我找到了这个(http://www.flipcode.com/voxtut/)基于体素技术的地形渲染算法示例,并将其转换为“全3d”渲染器。我的意思是,在高度图中,一对 (x,y) 只有一个 z(up) 坐标,而在“真实 3d”中则有很多。
我通过向普通 x,y 地图添加新的“z”层来做到这一点。例如,我有一个数据集:
data[x][y][0] = 0;
data[x][y][1] = 10;
data[x][y][2] = 50;
data[x][y][3] = 100;
data[x][y][4] = -1;
这意味着,坐标为 x、y、z 的可见体素,其中 0<=z<=10 或 50<=z<=100。因此,我以与 Flipcode 上描述的相似的方式绘制此数据集。
我对这种方法有一些问题。
在该算法中,对象由平行于屏幕的长条纹绘制(因为我们通过将水平屏幕坐标加 1 并将相机与射线上的点之间的距离加常数 dd 来穿过屏幕)。我们在可绘制对象之间有空间的地方,也有这些丑陋的锯齿形。我可以用其他东西(例如立方体)而不是这些条纹轻松绘制对象吗?或者也许还有另一种方法可以提高质量?
由于光线不会在屏幕上绘制列(而是绘制垂直线段),因此很难确定屏幕上哪些像素已经绘制,哪些尚未绘制。有什么关系吗?
有没有关于这个主题的论文或描述的任何现成算法?