问题标签 [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.
opengl - Go-GL 中的曲面细分
我正在尝试使用Golang OpenGL 绑定来细分一个简单的三角形
该库没有声称支持镶嵌着色器,但我查看了源代码,添加正确的绑定似乎并不十分棘手。所以我将它分支并尝试在gl_defs.go中添加正确的常量。
绑定仍然编译得很好,我的程序也是如此,当我真正尝试使用新绑定时,事情变得奇怪了。每当我实际尝试包含镶嵌着色器时,该程序就会从显示一个漂亮的圆形三角形变为黑屏。
我正在关注 OpenGL Superbible(第 6 版)并在这个项目中使用他们的着色器,所以我不认为我正在使用损坏的着色器(无论如何,它们不会吐出错误日志)。但如果着色器本身有问题,可以在此处setupProgram()
的函数中找到它们。
我很确定我的显卡支持曲面细分,因为打印 openGL 版本会返回4.4.0 NVIDIA 331.38
.
所以我的问题:
是否有任何理由为细分添加 go 绑定不起作用?绑定看起来很简单。我是否错误地添加了新绑定?
如果它应该工作,为什么它不适合我?我在这里做错了什么?
java - 阴影贴图的光通不适用于细分?
我目前正在实现阴影映射,并且在我的程序中遇到了一些奇怪的逻辑,我使用以下程序:
light.vs.glsl
light.fs.glsl
但是我得出的结论是我实际上是在做 Tesselation,所以我真的不知道现在发生了什么,在Terrain.java
:
同样对于lightProgram
传递给 的drawLightPass
,已确保lightProgram.use()
在此之前已调用过 ,这从代码中可能看起来并不明显。
正如你所看到的,我用 as argument调用drawArrays
,现在这真的应该出错了,因为在我的整个程序中,我发现每个部分都被认为是在阴影中,所以我有这些问题:drawLightPass
GL_PATCHES
1) 我当前的设置有问题吗?(我个人认为是。)
GL_PATCHES
2) 如果我在附加的着色器没有启用 Tesselation 时传入,OpenGL 如何不给出错误?
3)如何修复它,使其也适用于 Tesselation?
如果需要更多代码,那么我会发布它,我只是不想用不必要的代码使帖子过于混乱。
shader - 船体着色器术语
我对着色器编程相当陌生,我在 xna/directx9 上做了一些工作,但现在我想转向 c++/directx 11。我从这篇文章http://msdn开始阅读有关用于镶嵌的船体/域着色器的信息.microsoft.com/en-us/library/windows/desktop/ff476340(v=vs.85).aspx#Hull_Shader_Stage但我遇到了困难,因为我不熟悉某些术语。我知道这可能是一个微不足道的问题,但你能向我解释一下什么是补丁吗?还有一个控制点?什么是补丁常数阶段和控制点阶段?
opengl - gl_PrimitiveID 在镶嵌控制和评估着色器中是如何解释的?
OpenGL 规范。说:
该变量
gl_PrimitiveID
由生成输入顶点的绘图命令处理的图元数填充。由绘图命令生成的第一个图元编号为零,处理完每个单独的点、线或三角形图元后,图元 ID 计数器就会递增。使用原始重启索引重新启动原始拓扑对原始 ID 计数器没有影响。
不幸的是,我不太明白这一点。
GL_PATCHES
如果我使用顶点数 = 32进行绘图调用,是否所有32个顶点在 Tesselation Control 着色器中都gl_PrimitiveID
= 0 ?
Tessellation Control 着色器仍会输出一个 Patch,而一个 Patch 是单个图元。
假设当这个补丁在 Tessellation Evaluation 着色器中被细分为三角形时,每个第 n个顶点都有它的gl_PrimitiveID
= n / 3是否正确?
如果不是,请解释他们的价值观是什么。
c++ - 镶嵌 - 保存数据
我正在使用镶嵌来将非三角形多边形转换为三角形多边形。我正在尝试将数据保存在变量中并在保存数据时运行一次细分代码。代码使用保存的数据在绘图函数中绘制它。
我正在尝试绘制星形多边形,问题是我可以看到一些三角形但看不到星形。为什么我保存数据时绘图会出错?
下面是初始化代码:
保存数据代码及保存绘图方式:
最后是卓尔功能:
正如我所说,我应该看到明星:
但我可以看到一些三角形:
代码有什么问题?为什么我不能只保存一次进行曲面细分代码的数据?
opengl - OpenGL 3.3 - 如何在运行时更改 tesselataionlevel?
如何在运行时更改细分级别?
我唯一的想法是创建一个只有一个变量的缓冲区对象,我必须通过它......有没有更好的解决方案?
我有一个可以正常工作的镶嵌控制着色器文件:
opengl - OpenGL 4:缝合的镶嵌补丁不适合在一起
问题已解决,请看下面的更正
我正在尝试使用矩形补丁、镶嵌和自定义细节级别来实现 TDM 的“海景”(参见此处https://www.shadertoy.com/view/Ms2SD1 )。不幸的是我不能得到gl_TessLevelOuter
正确的。补丁之间有一些小孔。
我将天空盒设为红色以强调错误。
我glDrawArraysInstanced
用来绘制 64² 10*10 的补丁,并在顶点着色器中围绕摄像机位置重新排列它们:
然后我计算镶嵌控制着色器中的细节级别:
我认为错误在 TCS 着色器中的某个地方,但我找不到计算镶嵌级别的正确方法。
更正
opengl - 细分着色器
我正在尝试在 openGL 4.1 中学习曲面细分着色器。我明白了大部分事情。我有一个问题。
gl_InvocationID 是什么?
任何机构都可以用一些简单的方式解释吗?
c++ - glDrawArraysInstanced 没有在 OpenGL 中进行多次绘制调用?
我正在尝试绘制两个矩形块(用于镶嵌),我想将它们从 0,0 绘制到 1,1 和其他从 1,0 到 2,1
我正在使用 GL_PATCHES 将四边形发送到我的图形管道
我在齐次坐标中的顶点数据是
在 C++ 代码中
但是我的屏幕上只有一个从 0,0 到 1,1 的矩形补丁。我不明白为什么它不绘制第二个矩形
我的镶嵌评估着色器是
我将此vert转换为vec4并将其传递给gl_Position
opengl - OpenGL曲面细分着色器中缺少线条
我正在学习曲面细分着色器,并按照OpenGL wiki的链接访问:
http://voxels.blogspot.de/2011/09/tesselation-shader-tutorial-with-source.html
我将四边形镶嵌示例移植到 Mac OS X,但它只在外层渲染了一半的线条。如果我在镶嵌评估着色器中更改ccw
为cw
它会渲染另一半,但不会同时渲染两者。
预期(简化):
实际(逆时针):
实际(顺时针):
这是源代码(如果无法编译请告诉我):
我正在使用来自 macports (glfw @20150106) 的 GLFW 3.1。