シームレスな 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);
どこが間違っているのか教えてください。