0

シームレスな cubmap がどのように機能するかはわかりません。私が知っているのは、この機能を使用すると、エッジで 2 つのエッジ間で色が滑らかに変化することです。

そのため、各面に 8*8 のテクスチャを持つ立方体をレンダリングしており、glTexImage2D() 呼び出しの直前に glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS) を呼び出しています。しかし、上記の glEnable 呼び出しを追加しても、出力に違いは見られません。立方体の端に滑らかな色の変化があることを期待しています。ラッピングには GL_CLAMP_TO_EDGE モードを使用し、縮小と拡大のフィルタリングには GL_NEAREST を使用しています。

コード:

    GLbyte subpix[]={0, 0, 0, 127,     127,127,127, 127,  127,0,127,127,  0,127,0,127, 0, 127, 127, 127,  127,127,127, 127,   0,0,0,127,  127,127,0,127, 127, 0, 0, 127,
                            0, 127, 127, 127,  127,127,127, 127,   0,0,0,127,  127,127,0,127, 0, 0, 0, 127,    127,127,127, 127,  127,0,0,127,  0,127,0,127, 127,127,0,127,
                            0, 0, 0, 127,    127,127,127, 127,  127,0,0,127,  0,127,0,127, 0, 0, 0, 127,     127,127,127, 127,  127,0,127,127, 56, 32, 54, 127,
                            0, 127, 127, 127,  127,127,127, 127,   127,0,0,127,  0,127,0,127, 127, 0, 0, 127,    0,127,127, 127,  0,0,0,127,  127,127,0,127, 54, 100, 12,127,
                            127, 0, 0, 127,    0,127,127, 127,  0,0,0,127,  127,127,0,127, 56, 32, 54, 127,  54, 100, 12,127,  123,54, 12, 127,  32, 127, 23, 127, 21, 90, 111,127,
                        0, 127, 127, 127,  127,127,0, 127,    127,0,0,127,  0,127,0,127,  127, 0, 0, 127,    0,127,127, 127 , 54, 100, 12,127, 56, 32, 54, 127
        };  

  *target11=GL_TEXTURE_CUBE_MAP;

        glGenTextures(1, &textureId);
        nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glGenTextures(1, &textureId);"));      


        glBindTexture(*target11, textureId);
        glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);

        for(int i=0;i<6;i++)
        {
        glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, 0, GL_RGBA16_SNORM, 7 ,7, 0, GL_RGBA, GL_BYTE,subpix);
        nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexImage2D(types[i], 0, *format, 7 ,7, 0, GL_RGBA, GL_UNSIGNED_BYTE,pix31);"));
            }   

        glTexParameteri(*target11, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexParameteri(*target11, GL_TEXTURE_MIN_FILTER,GL_NEAREST);"));

         glTexParameteri(*target11, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
         nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexParameteri(*target11, GL_TEXTURE_MAG_FILTER, GL_NEAREST);"));

         glTexParameteri(*target11, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexParameteri(*target11, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);"));

    glTexParameteri(*target11, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexParameteri(*target11, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);"));
    glEnable(GL_DEPTH_TEST);

どこが間違っているのか教えてください。

4

1 に答える 1

3

縮小および拡大フィルタリング用のGL_NEAREST。

ポイント サンプリングを使用しています。すべてのテクセル間の継ぎ目を明示的に要求しました。したがって、シームレスにするものは何もありません。

シームレスなキューブマッピングとは、キューブの面の間でフィルタリングを行うことです。フィルタリングをまったく行っていないため、シームレスなキューブマッピングを使用していません。

于 2013-01-01T10:47:43.267 に答える