问题标签 [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 - 使用 OpenGL 着色语言进行选择
我试图找出选择使用着色器呈现的信息的最佳方法。窗口管理器缓冲区(窗口)用于输出渲染。在用户事件中,我应该选择渲染的几何图形。使用 gluPick 很容易,但我试图只使用着色器来选择。
着色器的灵活性并不能帮助我找到正确的解决方案。我找到了以下解决方案:
- 使用系统提供的缓冲区进行渲染(实际上是使用颜色)。使用 glScissor 限制特定区域的渲染,并使用 glReadPixels 获取颜色,映射几何标识符
- 使用单独的帧缓冲区对象进行渲染。需要定义渲染缓冲区格式。也许我可以使用普通整数来输入名字吗?
- 使用帧缓冲区对象进行渲染,用于渲染和拾取。一个包含渲染名称的附加渲染缓冲区对象。
似乎第二种解决方案是最好的,因为它不会改变窗口缓冲区,并且可以定义自定义方式来指定几何名称。
有什么建议吗?
PS:
由于在片段着色器中我声明了一个 vec4 数组来定义片段数据,我如何设置一个帧缓冲区来保存一个只有 R 组件的渲染缓冲区,并以大小整数内部格式存储?
是否可以将片段着色器输出变量与特定的附加渲染缓冲区链接?
opengl - 你可以在同一个程序中有多个像素(片段)着色器吗?
我想要两个像素着色器;第一个做一件事,然后下一个做别的事。这是可能的,还是我必须将所有东西都打包到一个着色器中?
opengl - 光线投射:如何正确应用投影矩阵?
我目前正在 GLSL 中进行一些光线投射,效果很好。无论如何,我现在想从正交投影到透视投影,但我不知道如何正确地这样做。有没有关于如何使用带有光线投射的投影矩阵的好的链接?我什至不确定我必须将矩阵应用于什么(可能以某种方式应用于光线方向?)。现在我这样做(伪代码):
但现在我想使用一个类似于 gluPerspective 函数的 projMatrix,这样我就可以简单地定义纵横比、fov 以及近平面和远平面。所以基本上,任何人都可以为我提供一大块代码来设置类似于 do 的 proj 矩阵gluProjection
吗?其次告诉我将它与 rayDirection 相乘是否正确?
opengl - 在 GLSL 中外部定义预处理器宏
GLSL 有一个完整的 C 风格的预处理器。唯一不起作用的是#include。一个很棒的特性是,您可以使用#ifdef 注释掉函数,从而创建一个着色器,如果不使用某些特性,它可以被细化。
我的问题是:
有没有办法从 C 代码定义宏?
使用 openGL 界面似乎没有办法做到这一点。快速破解是在代码加载表单文件之前添加几行#define FOO。但这似乎有点倒退。
opengl - 带有片段着色器的 GLSL 仅渲染黑色 GL_POINTS
我正在尝试将一些着色器添加到我的旧 OpenGL 程序中,该程序会绘制很多 GL_POINTS 和一些 GL_LINES。
我创建了这两个着色器:
顶点着色器:
片段着色器:
这两个着色器编译和链接没有问题。并且顶点着色器工作得很好,我可以看到 GL_POINTS 在顶点着色器中使用该罪转移。但问题是,如果背景颜色不是黑色,我只能看到我的 GL_POINTS 和 GL_LINES,因为所有点和线都呈现为黑色。似乎在渲染代码中使用 glColor3f 设置的所有颜色都被忽略了。如果我在片段着色器中取消注释注释行,我可以将所有线条和点设为红色,但 gl_Color 不应该对应于为每个点设置的 glColor3f 的颜色吗?
我的 OpenGL 代码中是否还有其他可能导致此行为的内容?
geometry - GLSL 检查片段是否在几何体上
我目前正在将几何体的位置写入 RGB 通道,gl_FragColor
如果片段是几何体的一部分,我想将 1.0 写入 alpha 通道,如果片段为空,则写入 0.0。
有没有一种简单的方法来判断片段是否是几何图形?也许通过gl_FragCoord.z
?
谢谢
c++ - GLSL 错误:2001 - 此错误代码是什么意思?
当发生编译错误时,我在查询信息日志后得到了这个。我无法找到一个资源来告诉我错误代码的含义!
将 Ubuntu 9.10 与支持 glsl 1.1 的 Intel 移动芯片组一起使用。梅萨司机。
顶点着色器:
片段着色器:
当我初始化我的着色器对象时,我调用:
这些电话
是不是我绑定顶点属性太快了?绑定着色器时是否必须绑定它们?
opengl - 如何调试 GLSL 着色器?
我需要调试一个 GLSL 程序,但我不知道如何输出中间结果。是否可以使用 GLSL 进行一些调试跟踪(例如使用 printf)?
c++ - 如何更新 GLSL 中的统一变量
我试图从我的应用程序中更新我的着色器中的眼睛位置,但是当我尝试这个时我不断收到错误 1281。初始化后我没有问题,就在我随后尝试更新值时。这是我的代码:
void GraphicsObject::SendShadersDDS(char vertFile [], char fragFile [], char filename []) {
}
这是我调用来更新眼睛位置的函数:
void GraphicsObject::UpdateEyePosition(Vector3d& eyePosition){
}
我现在尝试了几种更新变量的方法,这是最新的化身,感谢观看,欢迎所有评论。
更新:错误实际上并没有在这里发生,我的错是假设它是,当我绘制一些 spring 时错误实际上发生了:
for(int i = 0; i < 2; i++) {
当我绘制第一个时它很好,但是在调用 glEnd() 以响应 glBegin(GL_LINE_STRIP) 的位置调用第二个时出现错误。很抱歉给您带来不便,因为这不是我发布的错误,但至少如果有人想知道如何更新统一变量,那么它就在这里。
shader - 使用 GLSL 实现您自己的深度缓冲区
我需要一个与普通深度缓冲区大小相同的数据结构,并且我需要能够在着色器中读取和写入它。这可能吗,这个数据结构是什么样的?