我有这个代码,我正在使用我正在研发的引擎测试。
在我的NVIDIA NVS 4200M上,它按预期显示GL_TRIANGLE_STRIP。 在我的ATI Radeon 5800上,它似乎画了一个三角形。
shader.begin();
Matrix4<float> temp = getActiveCamera()->getProjectionMatrix() * getActiveCamera()->getObjectToWorld().fastInverse();
glUniformMatrix4fv(shader["mvp"], 1, GL_TRUE, temp.getArray());
glBegin(GL_TRIANGLE_STRIP);
glVertexAttrib3f(shader["colour"],0,1,0);
glVertexAttrib3f(shader["coord3d"],-.5,-.5,0);
glVertexAttrib3f(shader["colour"],1,1,0);
glVertexAttrib3f(shader["coord3d"],0.5,-.5,0);
glVertexAttrib3f(shader["colour"],1,0,1);
glVertexAttrib3f(shader["coord3d"],-.5,.5,0);
glVertexAttrib3f(shader["colour"],0,1,1);
glVertexAttrib3f(shader["coord3d"],.5,.5,0);
glEnd();
shader.end();
以下是我的两台计算机上的实际情况。
答案 0 :(得分:1)
这个问题可以通过移动到更高的GLSL版本来修复,我现在使用330,此外我切换到使用#version 330使我的所有属性“in”使我的变化“out”并使用布局(location = #)。
答案 1 :(得分:0)
相机投影和模型视图矩阵的值是多少?如果它们是标准的(没有从初始变化)你应该向下看-z轴,在这种情况下,两个三角形的接缝应该是从(.5,-.5)到(-.5,.5) )(从右下角到左上角)。在ATI卡的情况下,这不是真的(它从左下角到右上角)。如果您实际上正在查看三角形的背面,那么卡的OpenGL驱动程序可能会剔除面部。如果这是真的,我不会指望它画任何东西,但你永远不会知道。
对此的一个测试是调用glDisable(GL_CULL_FACE)并查看它是否绘制了您期望的内容。
关于面部剔除的参考: http://www.khronos.org/opengles/documentation/opengles1_0/html/glCullFace.html
玩得开心,