У меня есть этот код, я использую тест для моего двигателя, над которым я работаю.
На моем 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();
Вот как это выглядит на моих двух компьютерах.
Эту проблему можно исправить, перейдя на более высокую версию GLSL, сейчас я использую 330. Кроме того, я переключился на использование #version 330, чтобы все мои атрибуты были «включены», а мои переменные «вне» и использовался макет (location = #).
Каковы значения матрицы проекции камеры и модели? Если они стандартные (без изменений по сравнению с исходными), вы должны смотреть вниз по оси -z, в этом случае шов двух треугольников должен быть от (.5, -.5) до (-.5, .5 ) (внизу справа вверху слева). В случае карты ATI это не так (она идет от нижнего левого к верхнему правому углу). Если вы на самом деле смотрите на задние грани треугольников, драйвер OpenGL для карты может отбирать грани. Если это правда, я бы не ожидал, что это что-то привлечет, но вы никогда не узнаете.
Одним из тестов этого будет вызвать glDisable (GL_CULL_FACE) и посмотреть, отрисовывает ли он то, что вы ожидаете.
Рекомендации по выбору лица:
http://www.khronos.org/opengles/documentation/opengles1_0/html/glCullFace.html
Повеселись,