Opengl 在着色器中glNormal3fv的等效值是什么?
感谢您抽出时间阅读此文章。 我正在修改OpenGL应用程序以使用GLSL着色器,其目的是可视化3D原子模型,包括使用GL_三角形的四面体(和其他多面体) 注:在下面的示例中,颜色和alpha通道是相同的 在我之前:Opengl 在着色器中glNormal3fv的等效值是什么?,opengl,glsl,shader,normals,Opengl,Glsl,Shader,Normals,感谢您抽出时间阅读此文章。 我正在修改OpenGL应用程序以使用GLSL着色器,其目的是可视化3D原子模型,包括使用GL_三角形的四面体(和其他多面体) 注:在下面的示例中,颜色和alpha通道是相同的 在我之前: void triangle (GLFloat * va, GLFloat * vb, GLFloat * vc) { glVertex3fv (va); glVertex3fv (vb); glVertex3fv (vc); } void tetra (GLFloa
void triangle (GLFloat * va, GLFloat * vb, GLFloat * vc)
{
glVertex3fv (va);
glVertex3fv (vb);
glVertex3fv (vc);
}
void tetra (GLFloat ** xyz)
{
// xyz Contains the coordinates of the triangles
// ie. the 4 peaks of the tetrahedra
// bellow 'get_normal' compute the normals
glBegin (GL_TRIANGLES);
glNormal3fv (get_normal(xyz[0], xyz[1], xyz[2]));
triangle (xyz[0], xyz[1], xyz[2]);
glNormal3fv (get_normal(xyz[1], xyz[2], xyz[3]));
triangle (xyz[1], xyz[2], xyz[3]);
glNormal3fv (get_normal(xyz[2], xyz[3], xyz[0]));
triangle (xyz[2], xyz[3], xyz[0]);
glNormal3fv (get_normal(xyz[0], xyz[3], xyz[1]));
triangle (xyz[0], xyz[3], xyz[1]);
glEnd ();
}
显示的(正确的结果):
然后,我修改了代码以使用以下着色器:
#define GLSL(src) "#version 130\n" #src
const GLchar * vertex = GLSL(
uniform mat4 viewMatrix;
uniform mat4 projMatrix;
in vec3 position;
in float size;
in vec4 color;
out vec4 vert_color;
void main()
{
vert_color = color;
gl_Position = projMatrix * viewMatrix * vec4(position, 1.0);
}
);
const GLchar * colors = GLSL(
in vec4 vert_color;
out vec4 vertex_color;
void main()
{
vertex_color = vert_color;
}
);
现在我得到了:
因此,很明显,颜色/照明有问题,我知道如何纠正,我认为我必须使用几何体着色器,但我不知道现在在哪里可以找到信息如何/怎么做,
提前感谢您的帮助。可能是一件小事,但您似乎没有在着色器中使用法线。你应该定义它(就像颜色或大小)作为他们的输入。谢谢你的回答,我尝试过,但我不知道如何在着色器中使用它,注意我也不知道如何使用“size”变量,我想用它来定义线宽的点大小,但到目前为止我还不知道该怎么做:-PAnd实际上如何使用着色器进行绘制调用?一般来说,应该绑定要使用的着色器,而不是我记忆中的固定功能。但顶点数据仍必须传递给GL(如glBegin/glEnd部分)。“
定义GLSL(src)”#版本130\n“#src
”真的吗?2017年?OpenGL社区中没有人听说过原始字符串文字吗?OpenGL用户的行为像C++一样,从2003开始就没有任何特征?问题是:当你使用着色器时,你必须做阴影,DUH?