GLSL从“片段着色器”到“顶点着色器”发送颜色数据似乎总是等于0

沙阿

所以我有一个简单的,我希望它的工作有高度的映射,所以我只是把高度图作为一个经常性的质感,计算它的颜色,但不是设置我的片段的颜色纹理的颜色,我把我最初position.yposition.y + texColor.r * u_Scale的,这样的高度顶点将根据纹理的颜色而变化。

#shader vertex
#version 330 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color_in;
layout(location = 3) in vec2 texCoord;

uniform mat4 u_MVP;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform float u_Scale;

in vec4 texColor;

out vec3 FragPos;
out vec3 color_f;
out vec2 v_TexCoord;

void main()
{
    v_TexCoord = texCoord;
    color_f = color_in;

    vec3 newPosition = vec3(position.x, position.y + texColor.b * u_Scale, position.z);

    FragPos = vec3(model * vec4(newPosition, 1.0));

    gl_Position = projection * view * vec4(FragPos, 1.0);
};
#shader fragment
#version 330 core
out vec4 color;

in vec3 FragPos;
in vec2 v_TexCoord;
in flat vec3 color_f;

out vec4 texColor;

uniform sampler2D u_Texture;

void main()
{
    texColor = texture(u_Texture, v_TexCoord);

    color = vec4(color_f, 1.0);
}

因此,我在这里所做的是将纹理坐标发送到顶点着色器,然后将其传递到片段着色器,在片段着色器中,我计算与当前位置相对应的纹理颜色,然后将该颜色发送回顶点着色器以执行计算。但是似乎texColor.r总是为0,因为网格的行为与以前相同,没有任何变化。

我通过在网格物体上实际显示纹理来检查一切是否正确,这看起来还不错,但我不知道为什么这种方法不起作用。

我在哪里弄错了任何线索?

感谢所有的答案!

沙阿

所以我应该做的就是像这样在顶点着色器中完成所有操作:

#shader vertex
#version 330 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color_in;
layout(location = 3) in vec2 texCoord;

uniform mat4 u_MVP;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform float u_Scale;

in vec4 texColor;

out vec3 FragPos;
out vec3 color_f;

void main()
{
    vec4 texColor = texture(u_Texture, texCoord);

    color_f = color_in;

    vec3 newPosition = vec3(position.x, position.y + texColor.b * u_Scale, position.z);

    FragPos = vec3(model * vec4(newPosition, 1.0));

    gl_Position = projection * view * vec4(FragPos, 1.0);
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过顶点着色器将数据从顶点着色器传递到片段着色器

顶点着色器与片段着色器

在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

OpenGL无法将变量从顶点着色器发送到片段着色器

如何在Metal中将数组从顶点着色器传递到片段着色器

GLSL 变量未从顶点传递到片段着色器

片段着色器如何确定来自顶点着色器输出的片段数?

如何在顶点着色器中将VBO数据用作位置数据,在片段着色器中如何将统一数据用作颜色数据

优化片段和顶点着色器之间的操作

在顶点着色器与片段着色器中计算TBN矩阵?

了解来自顶点着色器的片段着色器输入

警告:片段着色器不会读取顶点着色器“ v_gradient”的输出

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

仅使用顶点着色器对象的glsl会丢失颜色/纹理

OpenGL顶点着色器处理

顶点着色器属性位置中的损坏数据

GLSL顶点着色器未接收到VBO数据

GLSL片段着色器获得“顶点位置”

GLSL着色器-片段着色器无法编译

OpenGL:如何将顶点位置从几何着色器传递到片段着色器?

WebGL:是否禁止在顶点着色器和片段着色器中绑定相同的制服?

此WebGL程序中的顶点着色器和片段着色器之间何时进行插值?

glsl 片段着色器颜色添加逻辑

有没有办法在片段着色器上从顶点着色器到一个点的位置绘制一个圆?

OpenGL-GLSL绘制3D GL_LINES顶点着色器与顶点

是否可以使用具有或不具有几何体着色器的相同顶点着色器和片段着色器?

顶点着色器中的广告牌顶点

丢弃Unity的顶点着色器中的顶点