OpenGL照明数据网格浪费
OpenGL lighting data for mesh - wastage
我正在开发一个类似于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();
您可以对每个块执行此操作,但建议尽可能减少状态更改(程序和制服)。
相关文章:
- 使用对象文件读取三角形数据网格
- 如何从 Skia 路径几何体中获取网格?
- CGAL:如何创建填充边界曲线的曲面网格?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 如何从 3D 曲面网格中删除自相交三角形?
- 在均匀网格中处理碰撞
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 用于查找网格中最短路径的算法
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 如何使用 sdl2 快速绘制像素网格?
- 如何使用条件计算 3D 网格中从一个点到另一个点的所有路径
- 使用 MFC 的表/网格
- 是否可以制作没有内部分割的cgal 3d多多马因网格?
- 获取网格中心的屏幕位置
- ASIMP 模型加载不会加载所有网格
- C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
- 如何从C++而不是虚幻编辑器中添加静态网格体组件的值?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例