问题标签 [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 回答
572 浏览

c++ - 不同于 Voronoi 和 Delaunay 的替代 3D 空间分区细分的建议

我在立方体盒子里有一个单分散球体系统。在使用 Voronoi 和 Delaunay 镶嵌对其进行镶嵌之后,我正在研究样品内部的体积分布。我对一些不应该依赖于镶嵌的属性感兴趣。

目前,我正在与从 Voronoi 和 Delaunay 获得的值进行比较。我想知道您是否熟悉另一种空间分区方法(重要的是各个单元格的最终总和加起来等于总体积,并且单元格应该是不相交的)。此外,如果您知道另一种细分,您是否还知道已经实现它的库,最好在 C/C++ 或 python 中实现?

一些变化,如拉盖尔分区,与我目前的 Voronoi 方法一致,因为球体是单分散的。另一个候选者将是 Centroidal Voronoi tessellation,尽管我还没有找到一个库来做到这一点(尽管它可能导致均匀间隔的单元格不反映系统内部的无序,这是不可取的)。

提前感谢您的帮助。

0 投票
0 回答
463 浏览

opengl - OpenGL 曲面细分

我正在尝试编写一个 Tessellation 着色器。但是,我首先要确保管道在我的计算机上运行,​​所以我编写了一些非常基本的细分代码。

但是,当我尝试运行它时,我不断收到链接器错误,提示我的镶嵌评估着色器未编译。有谁知道这是什么意思,或者下面的代码看起来有错吗?

镶嵌.vert

镶嵌.tcs

镶嵌.tes

镶嵌.frag

0 投票
1 回答
2612 浏览

math - 测地球网

我会意识到像THIS这样的测地线球体的纸艺。

是另一个问题中讨论的对

我在哪里可以找到可打印的网络或创建它们的在线资源?

在另一个讨论中,我了解到有 3 类可能的镶嵌。这些类之一需要更少的五边形来镶嵌球体?

我不知道我需要多少面,一般在 100 到 200 之间。我应该考虑哪些和弦因素?

谢谢大家

0 投票
1 回答
629 浏览

opengl - 镶嵌:为什么是分数奇数和分数偶数间距?

我目前正在大量使用曲面细分,并且有一个关于间距参数的具体问题:

我知道分数间距导致不同镶嵌值之间的过渡比相等间距更平滑。但是为什么有两种不同类型的分数间距(奇数和偶数)?一种类型还不够吗?

非常感谢

0 投票
4 回答
11673 浏览

c++ - 测地球算法

我必须用较小的均匀分布的球制作一个球体。我认为最佳方法是构建一个基于三角形的测地线球体并将顶点用作我的球的中点。但是我没有编写生成顶点的算法。用 C++ 或伪代码回答会更好。

测地线球体示例:http: //i.stack.imgur.com/iNQfP.png

0 投票
1 回答
515 浏览

directx - Overlapping registers in Hull shader?

I am doing some hardware tessellation and managed to get the basic subdivision effect, so tried to move on to Phong tessellation (which is for rounding edges). Now when I want to add extra outputs in the Patch Constant Function and write them, but one of those throws an error.

The error thrown is: error X8000: D3D11 Internal Compiler Error: Invalid Bytecode: Components of input declaration for register 1 overlap with previous declaration for same register. Opcode #47 (count is 1-based). error X8000: D3D11 Internal Compiler Error: Invalid Bytecode: Can't continue validation - aborting. Which I can't seem to figure out what it means (given that it is my very first attempt at hull shader).

If I comment that out, it works, if I set an arbitary value for that, it also works (for example: output.f3N0 = float3(0,1,0) ). I also tried changing the semantics for the variables, but did not help. I would be very glad if someone could give me some insight on this.

UPDATE: Hull input follows, as requested:

0 投票
1 回答
378 浏览

opengl - 关于镶嵌细分模式的好资源

我需要在 CPU 上复制 GPU 镶嵌(即在 CPU 端获得相同的 uvw 坐标,因为我将从镶嵌器在 GPU 上获得)。这样做的原因相当复杂,但简单地说,我有一个算法可以存储每个细分点的数据,并且首先要计算它,我需要 CPU 上的 uvw 坐标。

我已经在谷歌上搜索了很多关于镶嵌图案的确切细节,但我只发现非常模糊的文字一般性地谈论它,最好的是这个:http: //fgiesen.wordpress.com/2011/09/ 06/a-trip-through-the-graphics-pipeline-2011-part-12/

缺少这方面的文本的原因是它依赖于供应商,还是我根本没有找到未找到正确的页面?

我对 OpenGL 和 DX11 实现的文本感兴趣,如果它们不同的话。

0 投票
0 回答
988 浏览

c++ - OpenGL /w tessellation(shaders) lagg - 地形

我正在修改我的地形渲染器,现在它使用带有着色器的 gpu 镶嵌,采用投影网格样式方法:网格居中并通过找到它后面最近的网格点定位在相机周围,使其成为中心。(skytiger 的方法是有点返工)它运行良好,直到我关闭“重新定位方法”,然后转到网格边缘。

由于曲面细分算法正在测试中,我使用简单距离相机类型曲面细分,外部 tess 因子取决于边缘中心点到相机的距离,以及内部到四边形补丁中心点到相机的距离。当我四处走动时,我跑得很好,但是当我靠近网格边缘时,就我而言,在 (0,0,0) 时,我得到了可怕的滞后。

我在曲面细分着色器中使用 VBO、VAO、高度图采样器,没有平截头体剔除(还),没有曲面细分剔除屏幕(还),我的地图宽度是 2^n*GRIDSCALE,n 和 GRIDSCALE 取决于截锥体。我用 8192*8192 的地图对其进行了测试。相机解锁(未居中)的平均 fps 约为 60-70,但 P(0,0,0) 约为 8-15。

我在没有 cpu LOD 的情况下渲染了整个测试网格,只使用了 gpu tessellation。

什么可能导致这种情况?

编辑:当我制作我的第一个高度图时,我遇到了这种滞后,它是带有 VBO 和索引数组的三角形条带的简单静态网格。当我将相机移动到地图中心时,(它不是(0,0,0))或'z-'方向的'z'轴上半部分,并向下看'z+'轴我得到了滞后。

在此处输入图像描述

这是滞后的观点。大约 (0,0,0)。其他地方运行平稳。

编辑:不在(0,0,0),我只是没有考虑顶点着色器变换,所以地形四边形中心是(0,0,0),右下角是(+MAPWIDTH ,0,+MAPWIDTH)(图中的角落)在其他角落没有任何滞后。

0 投票
1 回答
1084 浏览

performance - 细分优化 [OpenGL]

地形镶嵌: 我正在使用剪辑贴图截头体剔除和镶嵌着色器渲染我的地形。现在为了进一步提高性能,我想以更有效的方式使用一些曲面细分着色器。我的目标是实现相当高的(~100 FPS)帧速率和良好的视觉质量,所以我将结合 3 个细分因素、一个细分贴图、视图相关(每个边缘的像素)细分和轮廓细分。

我的想法是它们的加权平均值:

3 个因素在 0...1 之间变化,并且 tesscoeff 也可以是统一的以调整水平。我有地图和边缘半径因素,但是......

剪影: 如何找到用简单y(x,z)函数描述的网格上的剪影补丁?我正在使用 vertex-texture-fetch 所以我知道相邻的顶点/法线。如果我使用四边形补丁而不是三角形,或者它不会使查找它们变得更加困难,这是否有问题?

(EDITED TO BACK-PATCH) Backpatch Culling:我遇到的另一个问题是背面剔除。正如我所说,我正在使用四边形贴片,因此可能不会躺在平面上。对于三角形,我会将法线与眼睛方向进行比较,但在四边形上我不能,或者不知道该怎么做。

遮挡剔除:我正在使用几何剪辑贴图渲染地形,使用以下算法:

我有一个简单的n*n四边形混乱的顶点缓冲区。我有这个网格的 4 个索引缓冲区,一个用于这个四边形的每个象限。对于LOD=0我渲染中心/左下四边形,而对于其他级别,我只渲染 L 形混乱与其他 3 个(上、左上、左)象限,按pow(2,LOD). 然后用一个常数(gridscale)缩放整个网格。

由于整个网格被放置在摄像机前面的每一帧中,因此网格总是从视图原点逐个象限地渲染。也许它可以用于镶嵌控制着色器中的一些剔除,如early-z遮挡?

我正在寻找一些关于这些的指针,因为我发现的只是一些没有太多技术背景的 NVIDIA/AMD 论文。http://www.geeks3d.com/20101201/amd-graphics-blog-tessellation-for-all/完整文章的链接也被破坏了......(来自这篇文章:OpenGL Low-Level Performance Questions

0 投票
1 回答
130 浏览

c++ - 为什么 Tesellation 控制着色器被多次调用?

我的问题是所有的 Tesellation Control Shader Invocation 都会产生相同的结果,为什么 OPENGL 必须为每个补丁多次调用这个着色器。例如:My Tesellation Control Shader 计算 Bezier 曲面的控制点。它需要一个包含三个顶点的数组,这些顶点是之前从 Vertex Shaders 聚合的。

我的补丁大小是 3,因此对于相同的输入调用 Tesellation Control Shader 3 次,保存为 gl_invocatinoID,然后它们都产生相同的以下控制点:

而且,帮助 OpenGL 将此补丁划分为镶嵌坐标的相同信息:

很明显,所有的 Tes Control Shader 都做同样的工作。会不会浪费资源?为什么每个补丁都应该调用一次 Tesellation Control Shader?