问题标签 [tessellation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
39 浏览

directx-11 - Directx11 和曲面细分

我正在尝试创建一个包含多个三角形的网格,然后我可以对其进行镶嵌。一个三角形工作正常,但是当试图在我的网格中创建另一个三角形时,我得到了奇怪的行为。

这是我的顶点列表。

我已经拍摄了屏幕截图以显示该行为。图 1 是相机在 (0, 0, -10) 时拍摄的。图 2 是相机位于 (0, 0, 10) 时。图片 3 是在我将顶点 [3] 更改为后在 (0, 0, -10) 拍摄的

http://imgur.com/a/DCZfm

我的索引数组中有 6 个值,我的拓扑是 D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST。

如果有人可以提供帮助,我将不胜感激,我现在​​真的很困惑!

0 投票
0 回答
500 浏览

shader - 在曲面细分着色器中合成法线

我花了一些时间研究这个并找不到一个好的解决方案。

我的问题是找到一种在镶嵌着色器中创建法线的有效方法。我在程序上为洞穴系统创建了一个网格,然后实时对其进行细分以提高分辨率。我的大部分系统都在工作,但我正在努力寻找一种合理的方法来创建法线。

这是我的论文的链接,它为感兴趣的人描述了完整的系统:

https://cs.anu.edu.au/courses/CSPROJECTS/15S2/Reports/Tony_Oakden_Report.pdf

我使用三平面着色器来合成纹理坐标,并使用高度图来变形镶嵌评估着色器中的网格。变形工作正常,但我发现可靠创建法线的唯一方法是在几何着色器中,它可以工作,但 GS 真的太慢了​​。

我有一个想法,我可以使用 TextureGather 从高度图中拾取四个纹素,并使用它们找到该点的近似法线(获取 x 和 y 渐变,然后获取边缘向量,然后是叉积和归一化等得到正常)但我不能得到好的结果。我在网上找到了一些指向这个问题的链接,但没有具体的答案。

似乎在着色器中为程序生成的网格合成法线是一个棘手的问题,我想知道这些类型的问题是否有已知的解决方案我可以查看。人们也可以指出我的任何建议、链接、技术、博客将不胜感激。

0 投票
1 回答
174 浏览

directx-11 - 镶嵌阶段内 tessFactors 的奇怪行为

我注意到我的 nvidia 860m 上有一些超级奇怪的行为。我正在编程一些 3d 引擎,并且我正在使用曲面细分进行地形渲染。

我使用一个简单的四边形镶嵌算法。

上面这段代码不是问题,只是想给你一些代码上下文。

此函数出现问题:

当我在 Visual Studio 中使用调试模式时,一切正常,曲面细分可以正常工作。但是在发布模式下,我得到了地形补丁的闪烁。

现在超级奇怪的事情:当我改变函数并从 pow 切换到线性函数或其他东西时,一切都按预期工作。所以这很好用:

编辑:更改行:

做这项工作。

似乎有时 pow 函数正在计算对边缘测试因子无效的值(有效范围为 64.0f)。

另请记住,此问题仅在以发布模式而不是在调试模式(VS 2013)下运行时出现。

有谁知道 tessfactor 值组合的限制?我没有在 msdn 或任何类似页面上找到任何信息。

谢谢

0 投票
1 回答
584 浏览

c++ - 在 OpenGL/GLSL 中绘制镶嵌的 LineLoop

我正在球体上渲染一些 LineLoops(行星上的边界),并希望将它们镶嵌成较短的线,以防止长线夹入球体。例子: 在此处输入图像描述

这是我当前的源代码:C++ 绘制调用:

顶点着色器:

镶嵌控制着色器:

镶嵌评估着色器

片段着色器:

镶嵌似乎不像我期望的那样工作(关于等值线的文档也很糟糕)。

这是我用 LineLoops 和只有 Vertex/Fragment Shader 绘制它时的样子:

在此处输入图像描述

这就是我实施镶嵌后的样子:

在此处输入图像描述

这些线条看起来也没有镶嵌,并且具有与以前相同的长度。

问候乔尼

编辑:自己找到了解决方案。查看下面的答案部分以查看它。

0 投票
1 回答
290 浏览

opengl - 我可以跳过在 OpenGL 中实现曲面细分着色器吗?

昨天,我买了一本关于 OpenGL 4.5 的书,问题是我现在正在从事的项目不需要任何曲面细分功能即可通过。所以我想跳过在 OpenGL 管道的许多其他阶段中实现曲面细分着色器。是否可以跳过它?

提前致谢!

0 投票
1 回答
567 浏览

opengl - TES阶段如何识别当前顶点的ID?

我正在向管道发送一个三角形,并希望将其镶嵌到一个 sierpinski 垫圈中。感觉使用几何着色器的实例化会容易得多,因此请告诉我使用曲面细分着色器的想法是否完全错误。

在镶嵌控制期间,我检查 ID0-11并将顶点位置和颜色存储在当前 ID 的位置上。

我为我的镶嵌控制着色器定义glPatchParameteri(GL_PATCH_VERTICES, 3);layout(vertices = 12) out;,因为我希望将每个三角形镶嵌成 4 个三角形。

看起来在我的镶嵌评估着色器中,in vec3 tcPosition[];in vec3 tcColor[];数组包含12正确顺序的正确值。但是:如何在评估过程中正确关联它们?gl_primitiveID在镶嵌评估期间有什么类似的吗?我需要替换所有生成的顶点,因为它们是从同一个补丁中产生的gl_primitiveID0目前我只使用前三个顶点(0, 1, 2)的信息,但我需要在每个生成的三角形之后将这些索引移动 3。

非常感谢任何如何巧妙地镶嵌三角形以便我以后能够使用变换反馈进行乒乓渲染的见解或想法。

0 投票
0 回答
125 浏览

r - 使用 R 进行 3 维曲面细分

我有一组 3D 点(空间 (x,y) 和时间 t),如果可能的话,我想使用 Dirichlet tessellation 构建正交,最重要的是,计算正交权重,这意味着 Dirichlet 3 维'瓷砖的体积'。所有这些都在 R 中。我找到了几何包,但它不计算体积。你知道任何可以帮助我解决这个问题的 R 包吗?


这是代码:

0 投票
0 回答
50 浏览

r - 用于美国大陆六边形晶格镶嵌的 R 包

有谁知道一个 R 包,它会产生一个最佳的六边形晶格来镶嵌美国大陆?该包应该允许用户指定单元格大小,并且它应该返回结果格子所覆盖的美国区域。

0 投票
1 回答
439 浏览

c++ - glutesselator 总是在 gluTessEndPolygon() 崩溃

我使用 glu tessellation 来镶嵌复杂的多边形。下面列出了简化的代码。

gluTessEndPolygon(GLUtessobj)它总是因错误而崩溃:

错误:0xC0000005:访问冲突读取位置0x57783b39;

当多边形的点数很少(<100)时,该代码有效。

我只是想不通为什么。

0 投票
1 回答
794 浏览

opengl - 为什么我们必须分别指定曲面细分着色器的输入和输出补丁大小?

镶嵌控制着色器的Khronos wiki指出

输出补丁大小不必与输入补丁大小匹配。

这是为什么?当控制着色器能够在原始生成获得补丁之前更改输入补丁大小时,为什么我们必须指定输入补丁大小?

更新

下面的解释正确吗?

输入补丁(到 TCS)大小由glPatchParameter(GL_PATCH_VERTICES, X). 这导致in属性数组的长度为 X。

输出补丁大小由 TCS定义layout (vertices = Y) out;。这意味着输出属性数组的长度为 Y。

TCS 被调用 Y 次并将输出直接传递给 TES。因此,inTES 的属性数组的长度为 Y。

输出补丁顶点的数量与 Tessellation Primitive Generation (TPG) 无关,因为它只看到一个抽象补丁。抽象补丁的顶点数由 TES 定义layout (TYPE) in;

由于TCS(当它存在时)或glPatchParameter(GL_PATCH_DEFAULT_{OUTER|INNER}_LEVEL). 然后,TES 可以根据gl_TessCoord来自抽象补丁的属性和来自 TCS 的所有顶点(更像控制点)对属性进行插值。

例子

因此,可能出现以下情况。

TCS 每个补丁获得一个顶点。

TCS 为输出补丁创建 5 个顶点。不知何故。

TPG 使用四边形作为抽象补丁并进行细分。然后在每个新顶点上调用 TES,并将来自 TCS 的 5 个输出顶点的属性与gl_TessCoord来自抽象补丁(以某种方式)的属性进行插值,以计算新顶点的属性。