Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl地形和细分着色器_Opengl_Shader_Terrain_Heightmap_Tessellation - Fatal编程技术网

Opengl地形和细分着色器

Opengl地形和细分着色器,opengl,shader,terrain,heightmap,tessellation,Opengl,Shader,Terrain,Heightmap,Tessellation,两个问题: 现代游戏如何设置地形顶点?他们是将高度贴图图像附加到纹理,然后使用它设置每个顶点位置,还是只使用3D软件(如Blender)创建包含这些顶点的文件,然后将其读取到VBO?如果我抓错了,请纠正我 细分着色器对此过程有多重要?它们是仅仅保存性能还是同时改变观众的场景 我见过的两种最常见的方法是heightmaps,其中RGB值用于曲面法线,alpha值用于高度,以及使用Perlin Noise等方法的程序地形生成,该方法使用随机函数并对其周围顶点进行采样以平衡高度 细分着色器主要用于通过

两个问题:

  • 现代游戏如何设置地形顶点?他们是将高度贴图图像附加到纹理,然后使用它设置每个顶点位置,还是只使用3D软件(如Blender)创建包含这些顶点的文件,然后将其读取到VBO?如果我抓错了,请纠正我

  • 细分着色器对此过程有多重要?它们是仅仅保存性能还是同时改变观众的场景


  • 我见过的两种最常见的方法是heightmaps,其中RGB值用于曲面法线,alpha值用于高度,以及使用Perlin Noise等方法的程序地形生成,该方法使用随机函数并对其周围顶点进行采样以平衡高度


    细分着色器主要用于通过简化远离的网格(在这些网格中您不会注意到额外的细节)来减少工作量。它们确实会改变观察者的场景,但会试图不被注意到。

    通常,顶点的高度是在着色器中按程序生成的。 在计算机图形学中,它是指一些数学算法。柏林噪声是这种程序生成的方法之一。有几种策略保持高度贴图的小尺寸,并使用程序方法生成不同的高度。这是因为高度贴图是纹理,并且使用带宽

    细分着色器与自适应细分一起使用。你可以把它看作某种细节层次的机制。地形的平滑度取决于使用多少三角形来表示地形上的面片。根据像素与相机的距离,开发人员可以动态决定细分级别,并为用户附近的面片生成更多三角形。这是一种改善地形细节的方法。这里的一切都是在GPU上进行的,因此非常高效

    在使用细分着色器之前,有一些算法(如ROAR)用于在CPU上进行自适应细分


    请关注这个项目。您将看到此处实施的所有地形技术状态。

    大多数开放世界游戏都使用高度地图作为基础地形。(例如战场)因此他们使用3D软件导出高度贴图图像,然后在应用程序中读取并将其绑定到2D纹理,然后在顶点着色器中使用纹理()确定每个顶点位置。我说的对吗?我不知道他们是如何渲染高度贴图的,但在顶点着色器中访问它是实现它的一种简单方法。你怎么知道战场使用高度贴图的?还有,推荐的渲染高度贴图的方法是什么?细分着色器将允许更轻松、动态的细节级别。