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

How to use glDrawElements() to draw hard surfaced cubes?

本文关键字:表面 立方体 绘制 何使用 glDrawElements      更新时间:2023-10-16

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

有没有办法仍然对硬表面对象使用元素缓冲区?

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

一般来说,"顶点"(用OpenGL术语)应该包含渲染所需的所有信息。这包括位置,但可能(在您的情况下可能应该)还包括纹理坐标、法线等内容。因此,如果您正在使用两个位置相同但纹理坐标或法线不同的顶点(这在处理立方体或其他"平面阴影"对象接缝时很常见),则应将它们存储为唯一的顶点。

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