用于网格的OpenGL照明数据 - 浪费

时间:2014-10-27 03:48:34

标签: c++ opengl glsl lighting

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

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

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

有没有办法只为每个面而不是每个顶点存储和发送着色器的光照数据?

使用4字节整数的最佳方法是什么? (特别是如何发送和使用GLSL)。我现在只是使用花车进行测试,但我想停止这种内存浪费。

1 个答案:

答案 0 :(得分:0)

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

假设你有红色的块和蓝色的其他块。您可以使用以下伪代码之类的材料执行单独的绘制调用:

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

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