我正在尝试为我的项目在 OpenGL 中实现 Radiosity。首先,我需要能够绘制一个平面(代表墙壁)。然后能够通过使用一种方法将该平面细分为该平面内的补丁或较小的四边形。
困难是在我绘制另一个平原(另一面墙)时以某种方式绘制它们,如果高度和宽度不同,则顶点未对齐创建我想避免的 T 顶点。
我在想类似的东西
void drawPlaneMethod(float width, float height, int numberOfSubDivisions) {}
但是我可能需要使用比率或相关的东西。我不关心 Z 轴坐标,因为我可以在构建平面后旋转它们。高度和宽度上的细分数量必须与另一面墙成比例。
如果这是不可能的,那么我可以通过使用相同高度和宽度的平面来做到这一点,但是它看起来不切实际,因为我最终得到了一个高天花板。我不能制作窗户和门,而不必仔细创建许多平面来代表一堵墙。
然后我必须面对另一个问题,即能够在每个补丁上存储信息,例如颜色、光能传递值等。我正在考虑使用对象数组(补丁)并表示平面索引来访问补丁对象。由于我对 c++ 不是很好,我发现很难使用任何类型的数组(我猜二维数组是理想的)。
对这个问题有任何见解吗?
PS:我正在使用 glBegin(GL_QUADS),一旦我完成了项目的基础知识,我可以稍后为 VBO 进行更改。