GLSL 和 glBegin(GL_TRIANGLES) 不起作用

GLSL and glBegin(GL_TRIANGLES) not working

本文关键字:TRIANGLES 不起作用 GL glBegin GLSL      更新时间:2023-10-16

此代码仅呈现十二面体并完全忽略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;
}

和碎片:

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 着色器一起使用,所以这肯定是可能的。可能缺少什么?

glBegin/glEnd 块中三角形顶点的坐标为

 11, 0,  0
-11, 0,  0
  0, 0, 11

这意味着它在视图中完全平坦。这就像从如此坚硬的角度看一张纸,它变成了一条线。因为三角形没有厚度,所以连这条线都没有画出来,三角形似乎看不见。