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