c++ - GLSL 和 glBegin(GL_TRIANGLES) 不工作

标签 c++ opengl glsl

此代码仅呈现十二面体并完全忽略 glBegin(GL_TRIANGLES) block :

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 block 中三角形的顶点坐标为

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

这意味着它在 View 中是完全平坦的。这就像从这样一个困难的角度看一张纸,它变成了一条线。因为三角形没有粗细,所以连这条线都没有画,三角形好像看不见。

关于c++ - GLSL 和 glBegin(GL_TRIANGLES) 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240882/

相关文章:

c++ - 将 2D 对象更改为 3D 对象 OpenGl

android - 噪声算法在 Samsung Galaxy SIII (GLES) 中失败

three.js - THREE.js 中的定向位移图?

java - 无法使用 Java OpenGL VBO 同时显示 2 个项目

c++ - 在 opengl c++ 中加载 32 位 .bmp 纹理时出现问题

c++ - 如何列出所有现代 UI 应用程序?

c++ - 使用级联相关神经网络(再训练)

glsl - GLSL sign() 函数是否会导致分支以及它是如何工作的?

c++ - 使用包含结构的 Vector 的指针问题

c++ - 将 unique_lock<recursive_mutex> 移动到另一个线程