我如何渲染某个 z-pos 的纹理平面以使其朝向无穷远可见?
我可以通过绘制非常大的飞机来实现这一点,但如果我将相机从地面移到更高的高度,那么我会开始看到飞机的边缘,我想避免被看到。
如果这甚至可能,我更喜欢非着色器方法。
编辑:我尝试按照建议使用 4d 坐标系,但是:效果非常糟糕。即使在相机位置 100,我的纹理也会变形,所以无论如何我都必须绘制多个带纹理的四边形。也许我可以这样做,并用 4d 坐标系绘制最远的四边形?有更好的想法吗?
Edit2: 对于那些不知道什么是 opengl 纹理失真的人,这里是我使用 4d 顶点坐标进行的测试的示例:
(如果图片不可见:http://img828.imageshack.us/img828/469/texturedistort.jpg) 请注意,只有当相机距离足够远时才会发生这种情况,在这种情况下它离中间只有 100.0 个单位! (中间 = (0,0) 我的 4 个三角形开始走向无穷大)。通常这发生在 100000.0 左右。但是对于 4d 顶点,由于某种原因它似乎发生得更早。
最佳答案
您无法渲染无限大小的对象。
您很可能将投影的概念与无限大小的渲染对象混淆了。 W 为 0 的 4D 齐次坐标表示相对于投影处于无穷远的 3D 位置。但这并不意味着一个点离相机无限远;它意味着无限靠近相机的点。也就是说,它表示 Z 坐标(在与透视投影矩阵相乘之前)等于相机位置(在相机空间中为 0)的点。
在透视投影下看,与相机在同一平面上的点在X轴和Y轴上无限远。这就是透视投影的本质。 4D 齐次坐标允许您为它们提供所有有限的数字,因此您可以对它们进行有用的数学计算(如剪裁)。
4D 齐次坐标不允许您表示无限大的表面。
关于c++ - 如何渲染一个看似无限大的平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380250/