Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 在着色器中glNormal3fv的等效值是什么?_Opengl_Glsl_Shader_Normals - Fatal编程技术网

Opengl 在着色器中glNormal3fv的等效值是什么?

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

感谢您抽出时间阅读此文章。 我正在修改OpenGL应用程序以使用GLSL着色器,其目的是可视化3D原子模型,包括使用GL_三角形的四面体(和其他多面体)

注:在下面的示例中,颜色和alpha通道是相同的

在我之前:

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?