0

テクスチャを VRAM にロードしようとすると問題が発生します。私は Mac OS X で OpenGL を使用しています。色をフラグメント シェーダーに渡すことでレンダリングに成功したジオメトリがあります。ただし、テクスチャを読み込もうとすると、ジオメトリがレンダリングされず、背景色しか表示されません。テクスチャをロードするコードは次のとおりです。

char imageData[27] = {
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
};

glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);

GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture");
std::cout << uniform_location <<std::endl;
glUniform1i(uniform_location, 0);

glEnable(GL_TEXTURE_2D);

そして、これが私のフラグメントシェーダーコードです:

uniform sampler2D texture;

void main()
{
    vec2 coord = vec2(0.5, 0.5);

    //gl_FragColor = vec4(coord, 0.0, 1.0);

    gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0);
}

このコードの一部はおそらく必要ないことはわかっていますが、考えられることはすべて試しています。

ありがとう。

4

1 に答える 1

3

最も可能性の高い原因は、ミップマッピングをオフにしておらず、ミップマッピング レベルを指定していないことです。したがって、テクスチャは不完全です。

このテクスチャ オブジェクトでオフにするには (glTexImage2D 呼び出しの前後で行う必要があります)。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

しかし、「すべてが崩壊する」ということは、自分が見ているものを理解するのにまったく役立たないことに気づいていますか? 一般に、スクリーンショットは 1000 語の価値がありますが、それよりも短く、少なくともそれがどのように失敗するかを説明することが役に立ちます。

于 2010-10-13T06:56:31.597 に答える