OpenGL照明数据网格浪费

OpenGL lighting data for mesh - wastage

本文关键字:网格 数据网 照明 数据 OpenGL      更新时间:2023-10-16

我正在开发一个类似于Minecraft的体素引擎,目前正在实现基本照明。

理想情况下,我只需要为每个块面(4个顶点)存储一个照明值,并且照明值为4个字节(RGBA)。

目前,我为每个顶点存储3个浮点

是否有任何方法可以只存储每个面而不是每个顶点的照明数据并将其发送到着色器?

使用4字节整数的最佳方式是什么?(特别是如何发送到GLSL并与GLSL一起使用)。我现在刚刚使用了float进行测试,但我想停止这种内存浪费。

您不需要为每个顶点创建颜色。相反,您可以使用统一变量,统一变量在绘制调用之间会发生变化,因此例如,您可以在块的材质发生变化时更改值。

假设你有红色的方块和其他蓝色的方块。您可以通过以下伪代码等材料进行单独的绘制调用:

for each blocks with the same material
Material->UseProgram();
SetUniform3f ( location, Material->Color ) // Change the color 
DrawBlocks();

您可以对每个块执行此操作,但建议尽可能减少状态更改(程序和制服)。