此代码仅呈现十二面体并完全忽略glBegin(GL_TRIANGLES)
块:
glutSolidDodecahedron();
glBegin(GL_TRIANGLES);
glNormal3f(1, 0, 0);
glVertex3f(11, 0, 0);
glNormal3f(0, 1, 1);
glVertex3f(-11, 0, 0);
glNormal3f(0, 0, 1);
glVertex3f(0, 0, 11);
glEnd();
这两个着色器非常简单:
顶点着色器:
varying vec3 normal;
void main()
{
gl_Position = ftransform();
gl_FrontColor = gl_Color;
gl_BackColor = gl_Color;
normal = gl_Normal;
normal = gl_NormalMatrix * normal;
}
和frag:
uniform vec3 lightDir;
varying vec3 normal;
void main()
{
float intensity = dot(lightDir, normal);
gl_FragColor = 0.5 * (1.5 + intensity) * gl_Color;
}
虽然glutSolidX
类型的函数适用于此示例(基于Lightouse3D教程),但如何快速绘制三角形,从一帧到另一帧更改坐标(我尝试过数组和GL_DYNAMIC_DRAW,但是与旧的“固定管道”方法相比,这工作太多了。我看到其他人仍然成功地使用glBegin(..); glEnd();
块与GLSL着色器成功,所以它必须是可能的。可能会遗漏什么?
答案 0 :(得分:5)
glBegin / glEnd块中三角形顶点的坐标是
11, 0, 0
-11, 0, 0
0, 0, 11
这意味着它在视图中完全平坦。这就像从一个如此坚硬的角度观看一张纸,它就变成了一条线。因为三角形没有厚度,所以甚至不绘制这条线,三角形看起来不可见。