gpt4 book ai didi

c++ - OpenGL 纹理映射禁用着色

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

我当前的 openGL 应用程序只是一个球体和一个地板,照明和阴影工作正常。

通过红皮书教程向地板添加 2d 纹理后:http://fly.cc.fer.hr/~unreal/theredbook/chapter09.html

.. 我的阴影被禁用了。如果我禁用 GL_TEXTURE_2D,一切都会正确渲染,但纹理显然不会显示。这是已知解决方法的已知问题吗?这里有一些代码供引用:

#define    checkImageWidth 64
#define checkImageHeight 64
GLubyte checkImage[checkImageWidth][checkImageHeight][3];

void makeCheckImage(void)
{
int i, j, c;

for (i = 0; i < checkImageWidth; i++) {
for (j = 0; j < checkImageHeight; j++) {
c = ((((i&0x8)==0)^(((j&0x8))==0)))*255;
checkImage[i][j][0] = (GLubyte) c;
checkImage[i][j][1] = (GLubyte) c;
checkImage[i][j][2] = (GLubyte) c;
}
}
}


void initImage() {

makeCheckImage();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth,
checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,
&checkImage[0][0][0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
}

然后是粗糙的地面绘制函数:

void makeGround() {

GLfloat mat_specular[] = { 0.5, 0.5, 0.5, 0.5 };
GLfloat mat_diffuse[] = { 0.3, 0.3, 0.3, 0.3 };
GLfloat mat_shininess[] = { 25.0 };

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

glColor3f(0.2, 0.2, 0.2);

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-100.0f, -1.0f, -100.0f);
glTexCoord2f(0.0, 1.0); glVertex3f(-100.0f, -1.0f, 100.0f);
glTexCoord2f(1.0, 1.0); glVertex3f( 100.0f, -1.0f, 100.0f);
glTexCoord2f(1.0, 0.0); glVertex3f( 100.0f, -1.0f, -100.0f);
glEnd();
glFlush();

}

如果您需要查看代码的任何其他部分,请告诉我

最佳答案

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

Decal 是一种奇怪的环境模式。对于 GL_RGB 纹理(如您的纹理),它替换 颜色。对于 RGBA 纹理,它将它与来自纹理的 Alpha 混合。

如果你只是想用光照调制你的纹理,使用 GL_MODULATE

关于c++ - OpenGL 纹理映射禁用着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345028/

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