我的代码没有将纹理渲染到它绘制的三角形上。三角形以正确的方式绘制,当我在其他项目中使用它时,图像加载和纹理代码已经起作用。
unsigned char* gen_tex(std::string filename, int *texWidth, int *texHeight, int *texChannels)
{
unsigned char* image = SOIL_load_image(("Data/"+filename).c_str(), &*texWidth, &*texHeight, &*texChannels, SOIL_LOAD_AUTO);
return image;
}
void clean_tex(unsigned char* image)
{
SOIL_free_image_data(image);
}
^图像加载和清洁功能似乎没有问题。
这是与纹理相关的唯一代码区域,每帧运行一次。三角形本身正确显示在屏幕上,但只是使用set glColor
绘制int texWidth;
int texHeight;
int texChannels;
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GLuint tex;
glGenTextures(1, &tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
unsigned char* image = gen_tex(std::string("white.png"),&texWidth,&texHeight,&texChannels);
if(texChannels == 4)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
}
else
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texWidth, texHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
}
clean_tex(image);
for(int i=0; i<tNum; i++)
{
glBegin(GL_TRIANGLES);
glTexCoord2f( 0, 0); glVertex3f(triangles[i].A.x, triangles[i].A.y, triangles[i].A.z);
glTexCoord2f(0.5,0.5); glVertex3f(triangles[i].B.x, triangles[i].B.y, triangles[i].B.z);
glTexCoord2f( 0, 1); glVertex3f(triangles[i].C.x, triangles[i].C.y, triangles[i].C.z);
glEnd();
}
glBindTexture(GL_TEXTURE_2D, 0);
答案 0 :(得分:1)
您需要按如下方式绑定纹理:
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
与您的问题没有直接关系:
答案 1 :(得分:1)
好的,这是一个真实的脸部时刻。 我设法不小心删除了对glColor()的调用,因此它在那个色调中绘制了整个东西。看到我是一个傻瓜,使用简单的颜色纹理,它呈现错误的颜色,我一直在想什么都没有出现。 我有时候忘了我有多愚蠢。无论如何,谢谢,问题现在解决了。