简单的平面平面镶嵌着色器

时间:2014-04-28 05:21:39

标签: c opengl quad tessellation

第1部分:

所以我想创建一个基本的曲面细分程序,它采用四边形平面并将其转换为一个更好,更详细/细分的四边形平面。如下图。细分的程度取决于用户控制,由制服(最初)传入。但是我对镶嵌着色器这么新,我甚至无法弄清楚如何做到这一点。

Flat plane tessellation

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

Quad tessellation

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

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

第2部分:

在我完成第1部分工作之后,我将如何制作它以使某些四边形比其他部分更加细分,例如:?

enter image description here

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

第3部分:

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

1 个答案:

答案 0 :(得分:0)

第1部分

是的,你是正确的:生成一个补丁'作为简单的点网格,将细分级别指定为TCS(tesselation控制着色器)中的制服,并在TES(tesselation评估着色器)中生成顶点数据。

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

第2部分

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

您建议的方法是正确的:将整个场景分解为' chunk'并分别确定每个块的LOD(即细分参数),通常是通过一些距离到摄像机的算法。

第3部分

另一个优秀的教程,在我相信之后完全符合您的要求:http://codeflow.org/entries/2010/nov/07/opengl-4-tessellation/

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

希望这有帮助。