问题标签 [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 投票
2 回答
3590 浏览

java - 如何在 Java 中对某些形状进行三角剖分/镶嵌?

我想从 GeoTools 镶嵌国家形状,以便在地球表面上以 3D 形式显示它。GeoTools 使用 JTS 拓扑套件,内部看起来功能丰富。

它是否包含细分某些形状的实用程序?我看到有 triangulation 包,但不知道如何将它用于带孔的形状。

我也用它不仅像这里一样连接现有顶点

在此处输入图像描述

它应该用内部的多个顶点填充形状。

更新

我发现,JTS 包含ConformingDelaunayTriangulationBuilder允许以某种方式制作所需镶嵌的类,但效果不好。首先,它只允许约束,这意味着需要额外的代码来从凹入区域中删除三角形。而且它还试图保留曲面细分的 Delaunay 特性,这会导致创建许多额外的部分。

最后,它会导致ConstraintEnforcementException复杂的形状,如国家和无法使用。

我还发现了“三角形”包,它是用 C 语言编写的,实现了Chew 的第二个算法,效果很好

在此处输入图像描述

现在我想知道,它是移植到 Java 还是封装到其中?

0 投票
0 回答
322 浏览

c++ - 如果我有 OpenGL 3.0,我可以使用 GLSL 在 GPU 上进行镶嵌吗?

在 Opengl 3.0 中将顶点数组发送到 GPU 后,OpenGL 内部是否有任何方法可以创建顶点?我无权访问曲面细分着色器。

0 投票
2 回答
3407 浏览

opengl - 曲面细分着色器 - OpenGL

摘自:Haemel,尼古拉斯。“OpenGL 超级圣经:

我如何理解 TessLevelInner 和 Outer 以及为什么 id 0 被列出两次?

0 投票
1 回答
6895 浏览

opengl - GLSL 镶嵌位移映射

在我最近的项目中,我正在使用硬件方面的细分。我要实现的管道应该采用低多边形网格,对其进行细分并应用置换贴图。

Tessellation 工作正常,正如我预期的那样。但是,当我在细分评估着色器中应用置换贴图时,我得到的输出有点随机。

这是没有位移的输出(我使用高度图作为纹理来验证我的 texCoords 是否准确)

在此处输入图像描述

这是我启用置换时得到的结果(对着色和置换使用相同的纹理):

在此处输入图像描述

着色器代码如下:

//顶点着色器

//苔丝控制

//测试评估

//几何学

//分段

如果有人可以帮助我解决这个问题,那就太好了。

0 投票
4 回答
15039 浏览

opengl - 细分如何提高性能?

计算更多的顶点而不是仅仅从 vram 读取更多会更快,这似乎违反直觉。但是,如果内存带宽是使曲面细分值得的问题,那么为什么会存在诸如置换贴图之类的东西呢?在曲面细分着色器中,如果您从纹理中读取数据,那么无论如何您访问 vram 的次数更多。纹理查找是否比更多原始顶点便宜?为什么镶嵌速度很快?

假设你有一个 32 的顶点放大和一个非常低的多边形模型。这会比说只有镶嵌顶点放大为 8 或其他东西的更高多边形模型更快。或者换句话说,你是否会随着镶嵌的越多线性地获得性能?

0 投票
0 回答
480 浏览

opengl - 具有 GL_TRIANGLES_ADJACENCY_EXT 的曲面细分和几何着色器

我有一个小程序可以从一些 SRTM 数据中渲染地形。

我正在玩一些 glsl 新功能。我已经成功创建了一个 vs、tcs、tes、gs 和 fs,其中 gs 只是一个通过着色器:

现在,在 tcs 和 tes 中我添加了更多的三角形,我需要计算新的法线,所以我认为我必须在 gs 中使用 triangles_adjacency 选项进行计算,这样我就可以访问 4 个三角形的六个顶点。但是当我更改代码时:

没有什么是平局。我知道,如果我激活了曲面细分,我必须在绘制数组中使用 GL_PATCHES(我以这种方式制作),但我不明白我该怎么做才能看到这个 gs 的工作。

但是我的目标是在细分后计算新的法线;谁能最终帮助我在哪里计算它们?

0 投票
1 回答
500 浏览

c++ - gluTessCallback 错误 C2440

我正在尝试使用该功能gluTessCallback,但出现 C2440 错误。我不知道为什么。

这是代码:

错误出现在 gluTessCallback 函数上:

错误 C2440:“类型转换”:无法从“重载函数”转换为“void (__stdcall *)(void)”

为什么会出现此编译错误?

0 投票
1 回答
234 浏览

opengl - 多边形 KML 中的 Z 冲突问题

我正在尝试在地面以上的 KML 中创建一个多边形。当多边形尺寸较小时,它可以正常工作,但当多边形较大时,由于 Z 冲突,它看起来很奇怪。我也试过镶嵌,但结果是一样的。

这个问题有什么解决办法吗?

0 投票
3 回答
1932 浏览

opengl - GLSL tessellation control shader indexing gl_TessLevelOuter with gl_InvocationID

为什么下面的tessellation control shader会让大部分三角形消失?

我输入三角形。当我用 0,1 和 2 索引 gl_TessLevelOuter 时,一切正常。在我看来,这个构造为我节省了 if 语句,我相信这有助于并行执行着色器。当然,我省略了片段中的顶点计算。

0 投票
1 回答
1276 浏览

opengl - OpenGL tessellation 和 GLSL 用于 Tessellation Control Shaders 说明

我正在研究图形管道,我对镶嵌阶段有一些疑问。我的基本阅读材料是《OpenGL SuperBible第六版:综合教程和参考》。

问题 #1:在 SuperBible 中,我读到顶点着色器每个补丁顶点(或曲面细分上下文中的控制点)运行一次,一次“馈送”细分控制着色器一个顶点。反过来,TCS 在顶点组上运行。虽然在这个链接中

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf

它说 TCS 每个“输出顶点”运行一次(我假设是 VS 输出的顶点)。两者哪一个是真的?我弄错了整个事情还是其中一个错了?

问题 #2:这个是关于 GLSL 的。以下着色器来自 SuperBible 示例。

顶点着色器

镶嵌控制着色器

a) 标记 gl_VertexID(在顶点着色器上)和 gl_InvocationID(在 TCS 上)是什么意思?它们让我感到困惑,因为它们没有在程序的任何地方明确声明。

b) 我知道在 TCS 中 gl_Position 变量从顶点着色器获取其数据,但在顶点着色器中没有任何地方明确声明 gl_Position 应该是输出(例如,在主程序之前使用 out 关键字)。我认为要通过各种着色器和管道阶段传递数据,必须明确声明具有相同名称的输入和输出,那么在这种情况下发生了什么?