问题标签 [tesselation]

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 投票
1 回答
1224 浏览

opengl - GLSL:在曲面细分后计算法线

我在细分后计算法线时遇到问题。

目前我有代码可以对高度图进行采样并从中计算正常值:

但是对于低级别的镶嵌看起来不太好在此处输入图像描述

我怎样才能摆脱这个?

0 投票
1 回答
797 浏览

opengl - 球体镶嵌新的基元位置

我正在尝试让 LOD 与曲面细分着色器一起使用。我有一个简单的球体,一开始有 5 个环和 5 个扇区。我希望球体在相机接近时增加其细节。但是镶嵌生成的新基元被映射在一个平面上,我试图改变那里的位置,但我无法让它工作。这是问题的说明:
在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

如您所见,当相机接近时,我没有得到球体。这是我在球体附近时想要得到的:

在此处输入图像描述

这是镶嵌评估着色器中的代码:

几何着色器:

谢谢您的帮助 !如果您需要其他任何东西,请问我,我会发布它。

0 投票
0 回答
181 浏览

algorithm - 在 NASA 世界风上渲染本地 DEM

我正在尝试在 World Wind 上渲染本地高程数据。然后使用world wind的tessellation算法对数据进行tessellation,渲染到地球仪上。我知道 LocalElevationModel。我能够使用这个存储一个 DEM 文件:

我可以通过 localElevation 数据中的 max,min lat 日志使用 lookupElevation 方法访问此模型。但我不知道如何继续前进。我研究了 RectangularTessellator 类,但不明白如何使用它。关于我如何做到这一点的任何线索?

PS:我正在查看他们的源代码,但无法理解很多场景。所以我想了解更多。

PPS:如果不可能,有人可以指导我使用易于实现和优化的地形渲染算法。它支持生成的混乱的各种 LOD。

谢谢,

0 投票
1 回答
241 浏览

opengl - 附加曲面细分着色器时 gl::DrawArrays 失败

我正在使用 OpenGL SuperBible 第 6 版,并学习有关曲面细分着色器的知识。我INVALID_OPERATIONgl::DrawArrays. 这是我的代码:

运行此程序会导致一条调试消息:

我省略了着色器(顶点着色器、片段着色器、镶嵌控制着色器和镶嵌评估着色器),但如果有必要,我可以显示它们。它们非常基本,我只是不想使问题混乱。事实上,它们就是sb6 git 存储库中的示例程序中的那些。他们编译和链接没有错误。

如果我删除对两个曲面细分着色器的调用gl::AttachShader,则不会出现错误,并且会绘制一个简单的线框三角形。使用曲面细分着色器,它应该绘制相同的三角形,只是切割成更小的三角形。

我查看了glDrawArrays 此站点上的文档,并且我的代码似乎没有做任何可能导致INVALID_OPERATION错误的事情,afaict。

0 投票
0 回答
176 浏览

opengl - OpenGL Tesselation 控制和评估着色器语法错误

当我尝试编译 Tesselation Control Shader 和 Evaluation Shader 时,我得到了语法错误。GLSL 代码与我使用的教程代码完全相同,除了核心版本。

GLSL 代码:

创建函数:

编译后的错误信息:

我不知道这有什么问题。

0 投票
0 回答
231 浏览

opengl - GLSL 从线条制作 LOD 曲线

解决方案:在 OpenGL/GLSL 中绘制镶嵌的 LineLoops


我正在使用 OpenGL 和 GLSL 在球体上绘制 LineLoops(行星上的边界)。

由于定义线的点是由用户输入给出的,因此它们没有足够高的精度来防止球体内部的剪切。

我想使用镶嵌和/或几何着色器在现有点之间创建额外的点,以便点之间的距离不超过某个值(线不再夹在球体内)。

前: 在此处输入图像描述

后: 在此处输入图像描述

遗憾的是,关于 Tesselation Shaders 的信息并不多,所以我不太确定它们是如何工作的,但我知道我可以用它们细分图元。

这是我当前的顶点着色器:

如何使用 Tessalation/Geometry Shaders 在点之间创建更多顶点并偏移新创建的顶点,使它们具有给定的sphereRadius制服长度。

我不是在寻找一种对每一行都进行细分的解决方案。我寻找一种解决方案,可以根据需要进行尽可能多的细分,以获得不超过maxDist.


我现在画的是这样的:

0 投票
1 回答
363 浏览

math - OpenGL中圆的镶嵌

我无法理解这个函数背后的数学。我想听听这里写的公式背后的逻辑(特别是这个切向和径向因子),以创建稍后(当它将 vec3 数组发送到函数时)在 OpenGL 中形成一个圆的点。

0 投票
1 回答
325 浏览

c++ - C++/OpenGL:曲面细分如何工作?

我有《OpenGL SuperBible Seventh Edition》这本书,我现在想知道镶嵌是如何工作的?我目前在本书的第 3 章中,我并不真正理解使用镶嵌控制着色器、镶嵌引擎和镶嵌评估着色器进行镶嵌的解释。

所以我正在使用

  • OpenGL 4.5
  • C++11
  • 视窗

谁能向我详细解释 OpenGL 4.5中的曲面细分是如何工作的,以及控制点批次等是什么?

编辑:好的,我想我必须更详细地询问。

  • 什么是“高阶原语”?
  • 什么是“四边形”?
  • 形成补丁的那些“控制点”是什么?
  • 什么是“批次”?(这本书解释说,镶嵌控制着色器在控制点组上分批运行,其中每批的大小与每个补丁的顶点数相同。)
  • 什么是“重心坐标”。

我认为这可以更清楚地说明我的问题和问题。

0 投票
1 回答
213 浏览

opengl - 仅为一个输出顶点设置 gl_TessLevel?

在互联网上,我找到了一些 TCS 代码示例,其中gl_TessLevel*仅为一个输出补丁顶点设置变量

而不仅仅是

无论有无条件检查,它的工作原理都相似,但我在 OpenGL wiki 上没有找到任何关于这种用法的信息。

如果从逻辑上思考,只在一次 TCS 调用中设置这些变量应该是可以的,而将它们设置为基于gl_InvocationID. 所以我的问题是:

  1. 这种设置方式gl_TessLevel*是否正确,是否会在某些平台上导致错误或崩溃?
  2. 如果它是正确的,它应该一直使用吗?是地道的吗?
  3. 最后,这两个片段如何影响性能?由于分支,第一个片段可能会降低性能吗?第二个片段是否会导致后续管道阶段的冗余和/或空闲调用,也会降低性能?
0 投票
3 回答
1404 浏览

r - R - 绘制六边形镶嵌

我想生成一些里面有六边形数组的正方形图,就像在这里绘制的一样。我想绘制规则(几何规则)和异常六边形镶嵌,所以我不认为“sp”包中的工具可以工作。

下面是我尝试使用 owin 和 plot 进行正六边形镶嵌的尝试。


但是,上面的内容似乎出错了,因为 har2 没有正确格式化为列表列表。

以上显然仅适用于单行六边形,但我想一旦我得到第一行,我只需将单行包装在一个 for 循环中,为每行添加一组 x 和 y 距离。我只是不知道如何格式化 har2 以便我可以直接将其插入 owin 的 poly 函数中。

我愿意完全改变我完成上述操作的方式,我对 R 还比较陌生,所以我绝对不知道如何以最有效/优雅的方式做事。我目前正在运行 RStudio V0.99.903 的 Win 10 x64 上运行 R 版本 3.3.2

任何帮助表示赞赏。

谢谢!