2

第1部分:

所以我想创建一个基本的镶嵌程序,它采用一个四边形平面并将其转换为一个更详细/细分的四边形平面。比如下图。镶嵌多少取决于用户控件,由制服(最初)传入。但是我对镶嵌着色器太陌生了,我什至不知道如何做到这一点。

平面镶嵌

这通常是如何完成的?当然,您实际上不应该在着色器程序之前绘制四边形平面,因为根据我的理解,四边形不会以这种方式细分,而是以如下图所示的方式细分:

四边形镶嵌

我相信答案可能是绘制一个点平面,然后将这些点细分为更多点,然后这些点在我认为的几何着色器中转换为适当大小的四边形?或者,我可以在每四个最近点之间绘制四边形,而不是将点转换为四边形(那会更好)?例子非常感谢!

注意:仅使用 GLSL > 4.0 和 C(无 C++/Python)

第2部分:

在我开始第 1 部分工作后,我将如何使某些四边形比其他四边形更加镶嵌,例如这样?:

在此处输入图像描述

我希望靠近相机的部分更加细分。

第 3 部分:

如果我能走得那么远,下一步就是改变点的 z 轴,使飞机变成一个有趣的环境。这将通过阅读 2Dsampler 来完成,我知道如何做到这一点。但是,如果我在第 1 部分中关于使用点平面是正确的,那么我需要做的不仅仅是改变转换为四边形的点,因为四边形需要共享顶点,以便在四边形之间没有间隙。那怎么做?或者,如果我们在点之间绘制四边形,每个点都是适当的高度,那么这将不是问题。

4

1 回答 1

0

第1部分

是的,您是对的:将“补丁”生成为简单的点网格,将镶嵌级别指定为 TCS(镶嵌控制着色器)中的统一,并在 TES(镶嵌评估着色器)中生成顶点数据。

听起来很复杂?这是一个很好的教程,我的工作基于: http ://antongerdelan.net/opengl/tessellation.html

第2部分

您在这里谈论的是 LOD(或详细程度)。您需要对网格的较高多边形数左下角进行细分并将其渲染为单独的对象。

您建议的方法是正确的:将整个场景分解为“块”并分别确定每个块的 LOD(即镶嵌参数),通常通过某种距离相机的算法。

第 3 部分

另一个出色的教程,完全符合我的要求:http: //codeflow.org/entries/2010/nov/07/opengl-4-tessellation/

我使用这种方法获得了一个非常详细但内存和帧高效的地形。

希望这可以帮助。

于 2014-04-28T10:43:19.967 回答