问题标签 [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.
c - 更好地控制 OpenGL 中的曲面细分?
我花了一天时间开发一个 OpenGL 应用程序,该应用程序将镶嵌网格并应用镜头失真。目标是能够为各种不同的镜头渲染广角镜头。到目前为止,我已经让着色器正确地应用了失真,但我一直在以我想要的方式控制镶嵌时遇到问题。现在我的 Tessellation Control Shader 只是将一个三角形分解为一组较小的三角形,然后我在 Tessellation Evaluation Shader 中应用镜头失真。
我使用这种方法遇到的问题是,当我在场景中有非常大的三角形时,它们往往需要更多的变形。这意味着需要对它们进行更多细分,以确保获得好看的结果。不幸的是,我无法在顶点着色器或镶嵌控制着色器中计算三角形的大小(在屏幕空间中),但我需要在镶嵌控制着色器中定义镶嵌量。
那么我的问题是,有没有办法在 OpenGL 的可编程管道中获取整个基元,计算一些关于它的指标,然后使用这些信息来控制曲面细分?
为了清楚起见,这里有一些问题的示例图像......
图 1(上图):每个红色或绿色正方形最初是 2 个三角形,这个例子看起来不错,因为三角形很小。
图 2(上图):每个红色或绿色区域最初是 2 个三角形,这个例子看起来很糟糕,因为三角形很小。
图 3(上图):另一个带有小三角形但网格大得多的示例。注意边缘有多少东西弯曲。细分级别为 4 时看起来仍然不错。
图 4(上图):另一个大三角形示例,仅显示中心 4 列,因为如果存在更多列,则图像难以理解。这表明非常大的三角形无法很好地细分。如果我将曲面细分设置得非常高,那么效果会很好。但后来我也在较小的三角形上进行了大量的镶嵌。
opengl - Opengl 地形和曲面细分着色器
两个问题:
现代游戏如何设置地形顶点?他们是否将高度图图像附加到纹理,然后使用它来设置每个顶点位置,或者他们只是使用 3D 软件(如 Blender)创建包含这些顶点的文件,然后将其读取到 VBO?如果我的掌握不正确,请纠正我。
曲面细分着色器对这个过程有多重要?它们只是节省了性能,还是也改变了观众的场景?
c# - 将原始三角形分割成更小的三角形
我正在使用带有 Helix Toolkit 的 WPF 渲染管道。我意识到提供的函数会生成对我来说太大的三角形图元。
例如,如果红色三角形是我的图元,我想控制(比如说)三角形的中间部分。我能想到的一种方法是将红色三角形进一步拆分为蓝色三角形,如图所示。谁能指出允许这种拆分的方法或算法?
glsl - 镶嵌着色器绘制问题
我目前正在尝试将曲面细分着色器添加到我的程序中,但我觉得我已经无计可施了。我已经阅读了几个教程,并在这里研究了很多问题。不幸的是,在这一切之后,我仍然不明白我做错了什么。我很乐意接受任何提示,并且承认我在这里完全是新手。我的顶点和片段着色器可以工作,但无论我的代码基于哪个教程,一旦添加了曲面细分着色器,我就无法显示任何内容。在加载、链接或使用着色器/程序时,我也没有收到任何错误。
有问题的四个着色器:
顶点:
镶嵌控制着色器:
细分评估着色器:
片段着色器:
我确定我在这里忽略了一些非常简单的东西,但我在这里完全不知所措。感谢您抽时间阅读。
opengl - Sphere Tessellation 坐标错误
我正在尝试在 GPU 上为一个简单的球体应用细分。这种镶嵌非常适合简单的计划,但不适用于球体。当然,我知道坐标映射不一样,我尝试了很多方法来做到这一点。例如,我尝试在曲面细分评估中使用 gl_TessCoord(x 和 y)作为映射到平面的经度和纬度。然后将它们转换为球坐标,但它“真的”没有用。
对于镶嵌控制,我只是将所有补丁分成 2 个用于外部和 2 个以及内部级别。
这是我绘制球体的代码:
这是我在镶嵌评估中的当前代码:
以下是指数:
int indPtr = 0;
为了绘制球体,我遵循了这个例子:使用 Visual C++ 在 Opengl 中创建一个 3D 球体,所以所有的功劳都归于他(顺便谢谢你!)。
这是显示结果的两张图片:
如果您有任何可以帮助我解决此问题的提示,那就太好了。谢谢你。注意:如果您需要任何其他信息,请询问我,我会发布它们。
opengl - 球体镶嵌新的基元位置
我正在尝试让 LOD 与曲面细分着色器一起使用。我有一个简单的球体,一开始有 5 个环和 5 个扇区。我希望球体在相机接近时增加其细节。但是镶嵌生成的新基元被映射在一个平面上,我试图改变那里的位置,但我无法让它工作。这是问题的说明:
如您所见,当相机接近时,我没有得到球体。这是我在球体附近时想要得到的:
这是镶嵌评估着色器中的代码:
几何着色器:
谢谢您的帮助 !如果您需要其他任何东西,请问我,我会发布它。
opengl - 如何在 Tessellation Control Shader 中访问同一补丁中的所有顶点
我想在 Tessenllation Control Shader 中做 LOD。而我的方法是计算每个patch在屏幕坐标上所占的面积,并为它们设置不同的细分级别。
所以我需要访问一个补丁中的所有顶点,我这样做如下:
我在 TCS 中定义了我的补丁,例如:
这是OpenGL中的相关代码:
但是结果很奇怪。曲面细分级别与屏幕上的区域有关,但所有补丁都具有相同的曲面细分级别。
所以有什么问题?
我想这是我尝试访问补丁中顶点的方式出错了。那我该怎么做呢?
以下是我的 Tessellation Control Shader 中的代码,希望对您有所帮助:
geometry - 在矩形上镶嵌六边形
我有一个无限的六边形网格,由三次(xyz)坐标系定义,如下所示:
我还有一个视口——一个矩形画布,我将在其中绘制六边形。
我的问题是这个。因为六边形网格在各个方向上都是无限的,所以我无法一次绘制所有这些。因此,我需要绘制视口中的所有六边形,并且只绘制那些六边形。
这张图片总结了我想要做的事情:
在这张图片中,紫色的六边形是我想要渲染的,而白色的六边形是我不想渲染的。黑色矩形是视口——与它相交的所有六边形都将被绘制。我如何找到要渲染的六边形(即它们的 xyz 坐标)?
其他一些信息:
- 我有一个函数可以调用一个六边形图块,并在给定其三次 xyz 坐标的情况下将其绘制在视口中的位置(x,y)处。因此,我只需要绘制每个矩形的 xyz 坐标,我就可以绘制它们。这可能会简化问题。
我有从立方六边形坐标转换为 x/y 坐标并返回的公式。鉴于上图,r/g/b 是上图的三次坐标轴,x 和 y 是笛卡尔坐标,s 是六边形边的长度...
/li>
shader - 错误 X3502:缺少 ds_5_0 测试因子
我从我的着色器中收到上述错误。船体着色器代码片段:
以及来自我的域着色器的片段,错误来自:
任何帮助,将不胜感激。