问题标签 [vertex-shader]

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 回答
24826 浏览

opengl - 顶点着色器和片段着色器中的 gl_Color 和 gl_FrontColor 之间的关系是什么

我有直通顶点和片段着色器。

顶点着色器

片段着色器

那些会产生空渲染(黑色而不是像 glClearBuffer 那样的背景颜色)。

如果我修改顶点着色器以将 gl_FrontColor 设置为 gl_Color 它会渲染未触及的 OpenGl 缓冲区......这是传递着色器的预期行为。

我很困惑,顶点着色器中的 gl_FrontColor 设置如何改变片段一中 gl_Color 的值?我错过了什么?

0 投票
1 回答
2782 浏览

opengl - 为什么这个 GLSL 顶点着色器不能编译?

我正在用 OpenGL 编写自己的着色器,我很困惑为什么这个着色器不能编译。其他人可以看看吗?

我作为顶点传入的是 2 个浮点数(以字节分隔),格式如下:

这是我的着色器:

如果您需要更多信息,我很乐意遵守。

0 投票
1 回答
1631 浏览

opengl-es - 如何使用顶点着色器将顶点数据乘以统一?

这是一个来自我之前遇到的问题的问题。基本上,我试图通过修改投影矩阵的比例分量来在我的着色器中实现正交缩放,但这是不可能的。我实际上必须做的是在通过绘图“发送”到我的着色器之前缩放顶点。这就像一个魅力......

但是,当然,问题在于现在在软件中我负责缩放所有顶点,然后再将它们交给着色器。这让我想知道是否有可能让顶点着色器做到这一点。我想是的,但我无法弄清楚。

我正在做的只是浏览我的所有 4 个顶点(保存在 中float vertices[8])并做*= scale;. 为了更准确一点,我将 X 和 Y 分量分别乘以scaleXscaleY

我怎样才能在顶点着色器中做同样的事情?

0 投票
2 回答
4843 浏览

opengl - 为什么这个正交顶点着色器不能产生正确的答案?

我的问题是我有一个(工作的)正交顶点和片段着色器对,允许我通过传入的“translateX”和“translateY”制服指定精灵的中心 X 和 Y。我乘以一个硬编码的 projectionMatrix 和效果很好。就正交运算而言,一切都有效。我传入此着色器的几何图形以 0、0、0 为中心点。

我现在想弄清楚平移后的中心点(局部坐标空间中的 0、0、0)变成了什么。我需要在片段着色器中知道这些信息。我假设我可以在 0、0、0 处创建一个向量,然后应用相同的平移。但是,我没有得到正确的答案。

我的问题:我做错了什么,我怎么能调试发生了什么?我知道正在计算的值一定是错误的,但我不知道它是什么。(我的平台是为 OpenGL ES 2.0 iOS 开发的 OS X 上的 Xcode 4.2)

这是我的顶点着色器:

编辑:作为对我的正交矩阵错误的回应,以下是维基百科关于正交投影的说法,而我的 -1 看起来是正确的。因为在我的情况下,例如我的垫子的第 4 个元素应该是 -((right+left)/(right-left)),它是 0 左边 960 的右边,所以 -1 * (960/960) 是 -1 .

编辑:我可能在这里发现了根本问题——你怎么看?

在此处输入图像描述

0 投票
2 回答
1615 浏览

glsl - [GLSL]如何比较世界坐标中所有顶点的z值?

这可能是一个简单的问题。作为 GLSL 的新手,我宁愿在这里问。现在,在顶点着色器中,我可以通过以下方式获得世界坐标系中的位置:

问题是:现在我可以在所有顶点中获取 posWorld 的最大值/最小值吗?这样我就可以获得顶点深度的范围,但不能获得深度缓冲区的范围。

如果这是不可能的,我怎样才能得到世界坐标系中近/远平面的 z 值?

最诚挚的问候,

0 投票
1 回答
3253 浏览

opengl-es-2.0 - Using multiple vertex shaders on the same program

I'm trying to implements projection, using a vertex shader.

Is there a way to have a separate vertex shader to handle set the gl_Position, and having another vertex shader to set the values required for the fragment shader?

The problem I have it that only the main() function of the first vertex shader is called.

Edit: I found a way to make it work, by combining the shader sources instead of using multiple independant shaders. I'm not sure if this is the best way to do it, but it seems to work nicely.

main_shader.vsh

transform_2d.vsh

Then use it as such:

0 投票
2 回答
502 浏览

c++ - 这个顶点着色器在做什么?

我最近接手了一个项目,该项目停滞不前,一名团队成员几个月前退出了。在试图让自己加快速度时,我遇到了这个顶点着色器,我很难理解它在做什么:

我想更好地理解的行是这样的行:

我似乎找不到解释这一点的文档。

有人可以快速解释一下这个着色器在做什么吗?

0 投票
1 回答
144 浏览

graphics - 如何在DX9的顶点着色器中获得正确类型的纹理坐标输入

这是 HLSL 顶点着色器输入的两个版本

结构 VS_INPUTS_0 { float3 位置:位置;浮动2 Tex0:TEXCOORD0;}

结构 VS_INPUTS_1 { float3 位置:位置;浮动3 Tex0:TEXCOORD0;}

唯一的区别是 Tex0 的 float2 和 float3。是否有 DX9 API 来获取正确的 Tex0 类型以指示 Tex0 的类型是 float2 还是 float3?

0 投票
1 回答
4418 浏览

opengl-es - 通过 glUniform OpenGL ES 2.0 在着色器中移动对象

如何通过 glUniform** 移动世界中的对象?

我试过 glUniform3f(_positionSlot, 6.0f, 6.0f, -2.0f);

但我的对象不动。

着色器.vs:

红色:

编辑:

如果我只画立方体或只画正方形,一切都可以。但似乎它的几个呈现在相同的位置,我只看到立方体。好像这个方法行不通。glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

0 投票
1 回答
11595 浏览

opengl - GLSL从顶点着色器传递纹理坐标

我要完成的工作:在场景顶部绘制场景的深度图(以便靠近的物体更暗,更远的物体更亮)

问题:我似乎不明白如何将正确的纹理坐标从我的顶点着色器传递到我的片段着色器。

所以我创建了我的 FBO,以及深度贴图被绘制到的纹理……并不是说我完全确定我在做什么,但无论如何,它可以工作。我测试了使用固定功能管道绘制纹理,它看起来就像它应该的那样(即深度图)。

但是尝试在我的着色器中使用它是行不通的......

这是我的渲染方法中绑定纹理的部分:

所以...我认为这是对的?也许?不知道为什么纹理 7,这只是我正在检查的教程中的内容......

这是我的顶点着色器中的重要内容:

Aaand,片段着色器:

现在的问题是,片段着色器接收到的纹理坐标始终是 (0,0),即左下角。我尝试将其更改为 ShadowCoord = gl_MultiTexCoord7,因为我认为这可能与我将纹理放在插槽号 7 中有关...但是,唉,问题仍然存在。当 (0, 0) 的颜色发生变化时,整个场景的颜色也会发生变化,而不是仅针对适当的像素/片段发生颜色变化。

这就是我希望获得的一些见解......如何传递正确的坐标(我希望纹理的角落与我的屏幕角落的坐标相同)。是的,这是一个初学者的问题......但我一直在看橙皮书,问题在于它在 GLSL 方面很棒,但是在示例中严重缺乏 OpenGL 方面我真的可以用...