问题标签 [glsl]
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 - 用于 Alpha 透明度的 AMD RenderMonkey GLSG 配置
我正在尝试使用 RenderMonkey 设计一个使用 Alpha 透明度的 GLSL 着色器,并且 RenderState 编辑器不使用我在 OpenGL 中使用的相同术语。谁能建议如何将其配置为简单的 Alpha 透明度?
opengl - GLSL 片段着色器语法错误
以下简单的片段着色器代码失败,在日志中留下一条无意义的消息:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
而以下一个有效:
这让我大吃一惊,因为在Lighthouse3D 的教程中 gl_Color 据说是 vec4。为什么我不能将它分配给另一个 vec4?
opengl - GLSL:启用/禁用纹理+着色器
我正在寻找一种从着色器访问 OpenGL 状态的方法。GLSL 快速参考指南,一个很棒的资源,在这方面帮不上我的忙。
在我正在处理的示例中,我有以下两个着色器:
顶点:
分段:
当我渲染没有纹理的多边形时,它们的 alpha 值是正确的,但它们被分配了黑色。
1,我可以设置什么条件检查,以便在禁用vec4(1.0, 1.0, 1.0, 1.0)
时设置变量“texel”而不是从纹理中采样?GL_TEXTURE_2D
2,如果我为不同的纹理模式编写不同的着色器并在我将使用glEnable
/ glDisable
( GL_TEXTURE_2D
) 的位置在它们之间切换,处理会更快吗?
opengl - 为什么我不知道 GLSL 中 OpenGL 灯的状态?
有没有办法找出是否在 GLSL 中启用了不涉及传递属性或创建大量不同着色器的灯光?
使用 NVidia 的 C for Graphics (Cg) 怎么样?我可以用 Cg 做吗?
我现在确信你做不到。但现在我问:为什么不呢?
opengl - OpenGL GLSL 插值
我尝试使用 GLSL 在 OpenGL 中实现点光源。我将所有需要的数据发送到着色器。为简单起见,我在这里只使用漫反射光。
我的示例显示了一个巨大的三角形,我想用一个光源照亮它。光源显示为一个蓝色的小三角形。
对于漫射光,我需要知道光与表面之间的角度。因此,我计算法线和光线的方向。然后点积会给我一个介于 -1 和 1 之间的数字,而 0 和 1 之间的所有内容都会被照亮。
但是,在这里我被卡住了,因为在我的示例中这个角度计算不正确。由于很难调试着色器,我使用了几个输出作为我的表面颜色。我使用法线作为三角形的颜色,无论光线在哪里,表面总是绿色。也就是说,法线指向 y 轴,因此它们被正确计算。也就是说,光的方向一定是错误的。但是,我找不到错误的原因。光的位置和顶点的位置在世界空间中传递给顶点着色器,然后将它们转换到眼睛空间,计算光的方向并将其传递给片段着色器:
顶点着色器:
片段着色器:
我已经附上了这个例子的一些图片,这些图片肯定表明插值真的很奇怪。我知道想知道我粘贴的代码是否正确,或者您是否需要了解更多代码。此外,这种插值行为是正常的还是我的代码中的错误?
http://img41.imageshack.us/img41/3566/interpolation.png http://img189.imageshack.us/img189/3566/interpolation.png
特别是第一张图片显示,灯的中心点不是直接在灯下,而是稍微移动到三角形的中心。
如果我将“pos”传递给片段着色器(即,它被插值)然后在片段着色器中计算“lightDir”,一切正常。
opengl - glUseProgram(0) 需要 50 毫秒?
是否有任何理由调用禁用 glsl 程序需要 50 毫秒?
我之前做过 glFlush,所以它不可能是在程序更改之前刷新的管道。
启用着色器需要 0.03 毫秒。
glsl - 在球体上画圆
我正在尝试使用着色器在球体上绘制很多圆圈。基本算法是这样的:
- 计算从片段(使用它的纹理坐标)到圆心位置的距离(圆心也在纹理坐标中指定)
- 计算从碎片到圆心的角度。
- 根据角度,访问纹理(其中有 360 个像素,红色通道指定半径距离)并检索给定角度的半径
- 如果从片段到圆心的距离小于检索到的半径,则片段的颜色为红色,否则为蓝色。
我想画……在蓝色球体上画 60 个红色圆圈。我让 y 着色器为一个圆圈工作,但如何做 60?这是我到目前为止尝试过的......
我传入了一个指定给定角度半径的数据纹理,但我注意到伪影蔓延。我相信这是由于当我尝试使用以下方法从数据纹理中检索信息时的线性插值:
其中角度是包含给定角度半径的数据纹理 (Sampler2D),x = 角度 / 360.0(角度为 0 到 360)和 y = 0 到 60(y 是圆数)
我尝试传入一个统一的浮点半径 [360],但我无法通过动态索引访问半径。我什至试过这个烂摊子......
等等 ...
如果我创建一个纹理并将所有圆圈放在该纹理上,然后将蓝色球体与包含圆圈的球体进行多重纹理处理,但正如您所料,我的锯齿非常糟糕。我喜欢根据片段的位置和圆的位置在程序上生成圆的想法,因为几乎没有混叠。但是,我做的不止一个吗?
谢谢!!!
〜螺栓
macos - OS X 上的 GLSL 着色器开发有哪些选择?
Apple 的 Shader Builder 并不是非常先进。我想知道除了在 bootcamp 下运行某些东西之外,OS X 是否还有更好的选择。
opengl - GLSL从modelviewmatrix和viewmatrix中提取modelmatrix
由于在 GLSL 中模型矩阵不可用,我想知道是否可以从 gl_ModelViewMatrix 和我将作为统一传递的“viewmatrix”以编程方式获取它?
如果是,如何?
谢谢你!
c++ - 打破 GLSL 着色器指令限制的错误消息是什么?
我们是一个小型开发团队,使用一些 GLSL,这些 GLSL 可能对于旧显卡来说太大而无法编译。当根据错误类型发生这种情况时,我们希望向用户显示一条合理的错误消息(而不是仅仅转储信息日志或输出通用的“此着色器不起作用”类型的消息)。
问题是,ATI 和 nVidia 对这些错误消息有不同的约定,我发现确定着色器错误类型的唯一方法是解析 glGetShaderInfoLog 生成的错误字符串。
鉴于此,是否有某个地方的列表,或者有人知道 ATI 和 nVidia 卡的错误输出是什么样的吗?或者有没有更好的方法来检测何时超过指令限制?