繁体   English   中英

GLSL和glBegin(GL_TRIANGLES)无法正常工作

[英]GLSL and glBegin(GL_TRIANGLES) not working

此代码仅呈现十二面体,而完全忽略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(); glBegin(..); glEnd(); 可以成功使用GLSL着色器创建块,因此必须可行。 可能缺少什么?

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

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

这意味着它在视图中完全平坦。 这就像从如此硬的角度观看一张纸一样,它变成一条线。 因为三角形没有厚度,所以甚至没有画出这条线,并且三角形看起来不可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM