如何使用3D图形对下图中的海进行编程?我应该使用圆形纹理吗?
答案 0 :(得分:1)
渲染场景的方式很大程度上取决于使用场景,特别是:
假设所有这些的答案都是否定的,最简单的方法是渲染一个大的四边形(或两个三角形形成一个矩形),水应该在哪里。纹理映射与无缝的水纹理的水四元组。对于纹理贴图参数,将纹理坐标(u / v)设置为等于四边形角的世界坐标,并设置采样方法以进行换行。
如果版权不是问题,您可以从google image search获取纹理,如果是,您可以尝试使用Gimp制作无缝过滤器或类似方法生成纹理。
可以使用类似的方法来创建海床。
如果您想要包含天空,您可能需要查看天空盒/圆顶,here是DirectX的教程。
修改强>
使用移动摄像机时,您需要将水四边形的大小基于摄像机的可视区域。相机的可视区域定义称为frustum的3D体积。从这里你可以计算出一个足够大的矩形,使得所有四个角都在可视区域之外,这样无论你指向相机的哪个方向,都可以看到大海。
Psuedo代码:
var f = camera.getFrustum()
for each point in f.getCorners()
{
if (point.x < minimum.x) minimum.x = point.x
if (point.z < minimum.z) minimum.z = point.z
if (point.x > maximum.x) maximum.x = point.x
if (point.z > maximum.z) maximum.z = point.z
}
var quad = new Quad(minimum, maximum)