1

我正在尝试将我的游戏引擎从 win/linux 移植到 mac os x 并且除了纹理之外一切正常。我使用 SOIL 加载纹理并使用 GLSL 着色器进行渲染,所有这些都是在 C++ 中完成的。

我相信我的着色器工作正常:

gl_FragColor = texture2D( BSTextureUnit, textureCoordinates ) * BSTextureColor;

这是我加载纹理的方式:

theTextureId = SOIL_load_OGL_texture
(
 nameChar,
 SOIL_LOAD_AUTO,
 SOIL_CREATE_NEW_ID,
 SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
 );

glBindTexture(GL_TEXTURE_2D, theTextureId);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
//glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

if(!theTextureId)
{
    std::cout<<"texture NOT loaded successfully: "<<name<<'\n';
}

它的作用是加载纹理,但不是渲染所有像素,而是为孔对象提供图像中第一个像素的颜色。

所以,如果纹理是这个:

在此处输入图像描述

它将呈现一个绿色块。

编辑:纹理坐标:

dataToSet[0].texCoord.s = texLeft;
dataToSet[0].texCoord.t = texTop;
dataToSet[1].texCoord.s = texLeft;
dataToSet[1].texCoord.t = texBottom;
dataToSet[2].texCoord.s = texRight;
dataToSet[2].texCoord.t = texBottom;
dataToSet[3].texCoord.s = texRight;
dataToSet[3].texCoord.t = texTop;

其中:GLfloat texTop = 1,texBottom = 0,texLeft = 0,texRight = 1;我还尝试使用纹理宽度和高度而不是 0 和 1,得到了相同的结果。在 Windows 上,它使用此纹理坐标正确渲染。

4

0 回答 0