0

如何使用 3D 图形对下图中的海洋进行编程?我应该使用圆形纹理吗?

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

1

场景的渲染方式很大程度上取决于使用场景,特别是:

  • 这是一个实时应用程序吗?
  • 相机可以左右移动吗?
  • 水应该有生命吗?

假设所有这些问题的答案是否定的,最简单的方法是在水应该在的地方渲染一个大的四边形(或两个三角形形成一个矩形)。使用无缝水纹理贴图水四边形。对于纹理映射参数,将纹理坐标 (u/v) 设置为等于四边形角的世界坐标,并将采样方法设置为 wrap。

如果版权不是问题,您可以从谷歌图像搜索中获取纹理,如果是,您可以尝试使用Gimp制作无缝过滤器或类似工具生成纹理。

类似的方法可用于创建海床。

如果你想包括天空,你可能想看看天空盒/圆顶,这里是 DirectX 的教程。

编辑

使用移动相机时,您需要根据相机的可视区域确定水四边形的大小。摄像头的可视区域定义了一个称为截锥体的 3D 体积。由此您可以计算出一个足够大的矩形,使得所有四个角都在可视区域之外,这样无论您将相机指向哪个方向,您都可以看到大海。

伪代码:

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)
于 2013-07-09T09:08:31.567 回答