gpt4 book ai didi

c - GLSL 纹理映射结果为纯色

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:20 26 4
gpt4 key购买 nike

我正在尝试编写一些基本的着色器来将 ppm 文件映射到我的形状。不幸的是,我得到的不是漂亮的多色纹理(我使用的是石砖图案),而是纯深紫色。

这是我的代码:
在里面:

printf("Using %d: Texture shading\n", shaderType);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textName);
int w, h;
texture = glmReadPPM("brick.ppm", &w, &h);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
printf("W%dH%d\n", w, h);
glTexImage2D(GL_TEXTURE_2D, 0, 3, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textName);
programID = LoadShaders("text.vert", "text.frag");

渲染:

glClearColor( 0.6f, 0.85f, 1.0f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
/*Unrelated code here*/
glUseProgram(programID);
varloc = glGetUniformLocation(programID,"texture1");
glUniform1i(varloc, textName);
glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF, &cutOff);
gluLookAt (posx, posy, zoom,
lookx,looky,0,
0,1,0);
glRotatef(anglex,0.0f,1.0f,0.0f);
glRotatef(angley,1.0f,0.0f,0.0f);

renderTriangles(); //Renders mountains from a list using intermediate mode
// Yes, I know it's deprecated
glutSwapBuffers();
glui->sync_live();
glUseProgram(0);

顶点着色器:

varying vec2 uv;
void main() {
uv = vec2(gl_MultiTexCoord0.st);
gl_Position = ftransform();
}

片段着色器:

uniform sampler2D texture1;
varying vec2 uv;
void main() {
gl_FragColor = texture2D(texture1, uv);
}

有人看到这里有什么问题吗?我似乎无法弄清楚。

我尝试使用基本的 White and Read 2x2 float ,但同样,我得到了一种颜色。它是淡红色。

最佳答案

如果您为整个对象获取单一颜色,则纹理坐标可能有问题。我会试着看看它们,看看它们是否正确。您可以通过像这样修改片段着色器来做到这一点:

gl_FragColor = vec3(uv.xy, 0);

如果您的整个图像仍然使用一种颜色渲染,则您发送纹理坐标的方式有问题。您正在使用一些已弃用的功能(立即模式,gl_MultiTexCoord0),也许它们不能像您期望的那样协同工作:

“请记住,对于 GLSL 1.30,您应该定义自己的顶点属性。” http://www.opengl.org/wiki/GLSL_:_common_mistakes

关于c - GLSL 纹理映射结果为纯色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22445709/

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