gpt4 book ai didi

c++ - OpenGL mipmap 问题

转载 作者:行者123 更新时间:2023-11-30 02:06:58 24 4
gpt4 key购买 nike

我的 mipmapping 工作正常。但出于某种原因,在我应用纹理后,应用程序中的所有其他对象都呈现出纹理的平均颜色。甚至平视显示器。有什么我需要考虑的吗?这是代码:

GLuint LoadTexture( const char * filename, int width, int height )
{
GLuint texture;
unsigned char * data;
FILE * file;

file = fopen( filename, "rb" );
if ( file == NULL ) return 0;
data = (unsigned char *)malloc( width * height * 3 );
fread( data, width * height * 3, 1, file );
fclose( file );

glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR );

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data );
free( data );
return texture;
}

在循环之前调用并释放后记。下一部分代码发生在我的 while 循环中。它在场景中的所有其他对象之前被调用。

void makeGround() {

glBindTexture( GL_TEXTURE_2D, texture );

GLfloat mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
GLfloat mat_diffuse[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat mat_shininess[] = { 100.0 };

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

//glColor3f(1.0, 1.0, 1.0);

glPushMatrix();
glTranslatef(-(size/2), 0.0f, -(size/2));
glCallList(LIST1);
glPopMatrix();
}

在绘制不同元素之间我应该做什么来防止这种情况发生?

最佳答案

我猜你忘记了在渲染完应该贴图的部分后解除绑定(bind)贴图或禁用贴图。当您尝试渲染无纹理对象时,它们仍然获得纹理,但由于缺少纹理坐标,它们都使用相同的纹理坐标,因此它只会从纹理中获得一种颜色。

关于c++ - OpenGL mipmap 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348666/

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