2013-01-06 16 views
5

OpenGL 2.1以降では、テクスチャを使用する前にglEnable(GL_TEXTURE)に電話する必要がありますか?私たちが質感に問題があるなら、原因は何でしょうか?OpenGL 2.1でテクスチャを使用する前にglEnable(GL_TEXTURE)を呼び出す必要がありますか?

更新:

私はデスクトップ用のOpenGL 2.1を使用していて、私のステップは次のとおりです。

  1. ロードBMP 24ビット画像(そう、私はgDebugerにチェックし、それが私のテクスチャがOKを示し私は私のロードイメージプロシージャが失敗していないと確信しています)。

  2. コールinit() procedudeにおけるいくつかのOpenGL関数:

    glGenTextures(1, &texture_id); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data); 
    
  3. そしてdraw_sceneで():

    glUseProgram(program); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glUniform1i(uniform_texture, 0); 
    ... 
    
  4. 頂点シェーダ(バージョン120):

    attribute vec3 vPos; 
    attribute vec2 vTexCoord; 
    
    uniform mat4 MV; 
    uniform mat4 Projection; 
    
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        fragTexCoord = vTexCoord; 
        gl_Position = Projection * MV * vPos; 
    } 
    
  5. フラグメントシェーダ:

    uniform sampler2D my_texture; 
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        gl_FragColor = texture2D(my_texture, fragTexCoord); 
    } 
    
+1

シェイダーを使用している場合、 'glEnable(GL_TEXTURE)'は何もしません。あなたが得ているもののスクリーンショットを私たちに与えることができますか、またはあなたが持っている出力の問題をより詳しく記述できますか? – TheAmateurProgrammer

+0

私はいくつかの私のパラメータのエラーと思う、私はクリアし、すべてのテクスチャコードを書き換え、今はそれが動作します! GL_RGBA8'、 'GL_RGBA'、...を' internalFormat'でどのように違うのか説明することはできますか? 'internalFormat'で' GL_RGB'を使用した場合、 'texture2D(myTexture、texCoord).a'のようにフラグメントシェーダのalpha要素にアクセスできますか? –

答えて

3

あなたは、OpenGL 2.1にGLSLシェーダを使用する場合は、glEnable(GL_TEXTURE_*)への呼び出しは意味を持ちません。フラグメントシェーダでテクスチャを適用します。

OpenGL 3.xコアプロファイルに移行する場合は、glEnable(GL_TEXTURE_*)は推奨されていません。

関連する問題