如何在OpenGL ES着色器中实现Catmull Clark细分算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在OpenGL ES着色器中实现Catmull Clark细分算法相关的知识,希望对你有一定的参考价值。

我已经实现了简单的Catmull Clark细分算法来在网格上运行。但它运行在CPU上,经过几次迭代后,它变得太计算密集了。我认为解决这个问题的一种方法是用Shader语言重写它,然后在GPU上运行它。

有没有相同的例子?

答案

AFAIK你需要GPU上的几何着色器(曲面细分)功能 - 发射/创建新的顶点。

http://en.wikipedia.org/wiki/Geometry_shader

我目前还不知道支持OpenGL ES的消费类硬件。

另一答案

Catmull-Clark是在面部被分解为基元(点,线,三角形)之前完成的。例如,Catmull-Clark维基百科页面显示一个立方体被更改为一个球体,如果使用三角形面而不是方形,则生成的形状将不是球体。这可能在使用补丁的Vulkan中是可能的,但我不知道如何。要做Catmull-Clark面(与补丁不同)需要有他们共享的顶点,我不知道如何指定这种关系。除了搜索相等的顶点之外,从而使任何性能增益无效。

以上是关于如何在OpenGL ES着色器中实现Catmull Clark细分算法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL ES 2.0 中获得“发光”着色器效果?

SDL 平台游戏中的 OpenGL 着色器?

如何在 GFlops 中估计 OpenGL ES 着色器/金属性能

如何在 WebGL 中实现阴影映射?

OpenGL,漫反射着色器

如何使用 OpenGL ES 2.0 着色器完成这些图像处理任务?