gpt4 book ai didi

opengl - GLSL 顶点着色器查找表问题

转载 作者:行者123 更新时间:2023-12-01 16:55:06 24 4
gpt4 key购买 nike

我在调试程序时遇到了一些困难。我正在尝试使用数组作为查找表来偏移顶点着色器中的顶点位置,但我什至无法判断我是否正确链接了数组。偏移因子总是以零结束(压平我的向量,而不是给它们一个形状),所以要么我错误地访问了texture1D坐标,要么数组没有正确绑定(bind)到纹理。

坦白说,我不知道应该使用哪个坐标来从 1D 纹理获取值......但我已经尝试了所有组合。

这里我设置了数组并将其绑定(bind)到着色器:

//FISH
GLfloat fish_coords[100];
for (int i = 0; i < 50; i++){fish_coords[i] = 0;}
for (int i = 50; i < 100; i++){fish_coords[i] = 1;}
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glGenTextures(1, &fishtexture);
glBindTexture(GL_TEXTURE_1D, fishtexture);
glTexImage1D(GL_TEXTURE_1D, 0, 1, 128,0,GL_RGBA, GL_UNSIGNED_BYTE, &fish_coords);

switch(shadow_selection){
case 0:
vertexShader = "fish.vert";
fragmentShader = "fish.frag";
setShaders();

GLint loc1;
loc1 = glGetUniformLocation(shaderProgram,"fish_coords");
glUniform1i(loc1,0);

还有我的顶点着色器:

uniform float spec_factor;
uniform sampler1D fish_coords;

varying vec3 lightDir,normal;

void main()
{

vec4 v_pos;
vec3 ldir;

gl_TexCoord[0] = gl_MultiTexCoord0;

v_pos = gl_ModelViewMatrix * gl_Vertex;
ldir = vec3(gl_LightSource[0].position-v_pos);
lightDir = normalize(ldir);
normal = normalize(gl_NormalMatrix * gl_Normal);

vec4 offset;
offset = texture1D(fish_coords, gl_TexCoord[0].r);

vec4 fish_shape;
fish_shape.xz = gl_Vertex.xz;
fish_shape.y = gl_Vertex.y * offset.x;
fish_shape.w = 1;

gl_Position = gl_ModelViewProjectionMatrix * fish_shape;
}

最佳答案

您的纹理加载代码中有两个问题:

1.- 默认的 MIN 过滤器使用 mipmap,因此设置后纹理不完整。将纹理绑定(bind)到 GL_NEAREST 后设置 MIN/MAG 过滤器。2.- 你的纹理数据是 float ,但你对 GL 说它们是无符号字节,将其更改为 GL_FLOAT。

进行此更改后,您的纹理应该会出现。

关于opengl - GLSL 顶点着色器查找表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com