如何解决模版测试似乎无能为力
看来,无论我做什么,模板缓冲区都不会影响我正在绘制的内容。我正在绘制两个矩形,一个矩形绘制在另一个矩形的上方,略微偏离矩形。它们相交的部分是我唯一想要显示的东西。这样可以实现我想要的UI滚动区域。
这是我的抽奖电话:
void drawGL(sf::Window& i_Window)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
glStencilFunc(GL_ALWAYS,1,0xFF);
glStencilMask(0xFF);
glUtil::DrawQuad(0.0f,0.0f,300,1.0f,1.0f);
glStencilOp(GL_KEEP,GL_KEEP);
glStencilFunc(GL_EQUAL,0xFF);
glStencilMask(0x00);
glUtil::DrawQuad(200.0f,200.0f,0.0f);
}
这是我初始化OpenGL的方式
void initGL(sf::Window& i_Window)
{
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_FASTEST);
glShadeModel(GL_SMOOTH);
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_STENCIL_TEST);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glLoadIdentity();
glOrtho(0,i_Window.getSize().x,i_Window.getSize().y,10);
glClearColor(0.0245f,0.1294f,0.27255f,1.0f);
}
我的DrawQuad()
实现
void DrawQuad(GLfloat i_fX,GLfloat i_fY,GLfloat i_fWidth,GLfloat i_fHeight,GLfloat i_fR,GLfloat i_fG,GLfloat i_fB,GLfloat i_fA = 1.0f)
{
GLfloat Vertices[18] = {};
Vertices[0] = 0; Vertices[1] = 0; Vertices[2] = 0.0f;
Vertices[3] = 0; Vertices[4] = i_fHeight; Vertices[5] = 0.0f;
Vertices[6] = i_fWidth; Vertices[7] = i_fHeight; Vertices[8] = 0.0f;
Vertices[9] = 0; Vertices[10] = 0; Vertices[11] = 0.0f;
Vertices[12] = i_fWidth; Vertices[13] = i_fHeight; Vertices[14] = 0.0f;
Vertices[15] = i_fWidth; Vertices[16] = 0; Vertices[17] = 0.0f;
glPushMatrix();
glTranslatef(i_fX,i_fY,0.0f);
glColor4f(i_fR,i_fG,i_fB,i_fA);
glVertexPointer(3,GL_FLOAT,Vertices);
glDrawArrays(GL_TRIANGLES,6);
glPopMatrix();
}
还有我的main()
函数,以防它对诊断有用...
int main()
{
sf::Window window(sf::VideoMode(1200,720),"My window");
initGL(window);
sf::Event event;
int nNumFrames = 0;
while (window.isOpen())
{
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
case sf::Event::KeyPressed:
window.close();
break;
case sf::Event::Resized:
glViewport(0,window.getSize().x,window.getSize().y);
glLoadIdentity();
glOrtho(0,window.getSize().y,10);
break;
}
}
drawGL(window);
window.display();
++nNumFrames;
}
return 0;
}
这是我得到的屏幕快照,无论我如何设置模板缓冲功能。我想看到的只是一个绿色的小盒子,白色和绿色的盒子相交。
解决方法
您的窗口(默认帧缓冲区)根本没有模板缓冲区。您必须使用sf::ContextSettings
类来设置带有模板缓冲区的OpenGL窗口。
请参见Using OpenGL in a SFML window:
sf::ContextSettings settings;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 4;
settings.majorVersion = 4;
settings.minorVersion = 6;
sf::Window window(sf::VideoMode(1200,720),"My window",sf::Style::Default,settings);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。