如何使用glDrawElements()绘制硬表面立方体?

时间:2016-03-22 18:10:53

标签: c++ object opengl rendering normals

通过使用元素缓冲区,您可以发送指数,指示要用于某个面的哪些顶点。但是正常人怎么样?如果我想渲染一个带有基本漫反射着色器的立方体,我会得到平滑的法线(如果我之前平滑它们)。然而,当尝试像立方体一样渲染硬表面边缘时,我无法绘制硬边,因为有些面共享相同的顶点。

有没有办法让元素缓冲区用于硬表面对象?

使用glDrawArrays()时,我不喜欢浪费内存。

1 个答案:

答案 0 :(得分:1)

一般来说,“顶点”(用OpenGL术语)应该包含要呈现它的所有必要信息。这包括位置,但可能(在你的情况下可能应该)也包括纹理坐标,法线等等。所以如果你正在使用两个具有相同位置但不同纹理坐标或法线的顶点(这是相当的)在处理立方体或其他“平面阴影”物体接缝时常见的情况下,您应该将它们存储为唯一的顶点。

如果这样做,您仍然可以使用元素缓冲区。你将不得不增加顶点缓冲区对象的内存大小,如果你渲染像立方体一样简单的东西,你可能不会节省太多内存,但你的元素缓冲区对象不应该比以前更大,如果你做得对。