ゲーム エンジンを 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 では、このテクスチャ座標で正しくレンダリングされます。