如何在没有着色器opengl的情况下渲染形状法线

时间:2017-03-28 07:41:32

标签: visual-studio graphics opengl-es shader

我是计算机图形学的新手。 我的任务是绘制没有着色器的形状。 但据我所知,从互联网SMOTHING和使用灯光应该用于绘制美丽的形状。但我无法使用它们,因为我无法渲染我的法线。 简而言之,我有3D顶点,索引,法线。我使用顶点缓冲区对象来渲染顶点和索引。所以我的代码是:

        glGenBuffers(3, vertexObjectBuffer);

        glBindBuffer(GL_ARRAY_BUFFER,  vertexObjectBuffer[0]);
        glBufferData(GL_ARRAY_BUFFER, sizeof(float) * numVertex * 3 , vertex, GL_STATIC_DRAW);
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
        //glGenBuffers(1, &vertexObjectBuffer[1]);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertexObjectBuffer[1]);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(float) * numIndicies * 3 , indices, GL_STATIC_DRAW);

问题是如果我使用Vertex缓冲区对象但没有着色器,如何发送法线?

1 个答案:

答案 0 :(得分:2)

如果您使用的是OpenGL ES 2.x,则必须使用着色器;没有着色器=没有渲染。所有输入都由着色器定义,因此要传入一个法线,只需设置一个包含普通数据的新顶点属性,并通过另一个调用glVertexAttribPointer()将其传入。这听起来像你刚刚开始,所以只是让基本的着色器先工作;)

如果您使用的是OpenGL ES 1.1,则不需要着色器,但必须使用固定功能渲染管道。如果要传入顶点缓冲区对象,则可以通过glNormal3[x|f]()设置每个顶点法线,如果指定单个顶点(真的不是)或glNormalPointer()

诚实地学习着色器;它们并不是那么复杂,而且学习它会教你想要你需要的每一个现代图形API,所以它是一个非常有用的技能。

相关问题