0

gl_texture_3Dとgl_texture_2D_arrayをターゲットとしてteximage3Dを使用しています。

私は4層の色を作成し、それを球に適用しています。したがって、球に4つのレイヤーが均等に適用されることを期待しています。

ただし、GL_TEXTURE_3Dの場合、すべてのレイヤーが2回繰り返されます。一方、gl_texture_2D_arrayの場合、予想どおりにこれらのレイヤーを1回だけ適用します。

int w = 4, h = 4, d = 4;
size_t size = w * h * d;

*format=GL_RGBA;
GLubyte *dataRGBA=new GLubyte[4*size];

for (int i=0; i<size/4; i++)
{
    dataRGBA[4*i]=200;
    dataRGBA[4*i+1]=0;
    dataRGBA[4*i+2]=0;
    dataRGBA[4*i+3]=255;
}

for (int i=size/4; i<size/2; i++)
{
    dataRGBA[4*i]=0;
    dataRGBA[4*i+1]=255;
    dataRGBA[4*i+2]=0;
    dataRGBA[4*i+3]=255;
}

for ( int i=size/2; i<(3*size)/4; i++)
{
    dataRGBA[4*i]=0;
    dataRGBA[4*i+1]=0;
    dataRGBA[4*i+2]=255;
    dataRGBA[4*i+3]=255;
}

for ( int i=(3*size)/4; i<size; i++)
{
    dataRGBA[4*i]=255;
    dataRGBA[4*i+1]=0;
    dataRGBA[4*i+2]=255;
    dataRGBA[4*i+3]=255;
}

glGenTextures(1,&id);
glBindTexture(*target11, id);
glTexParameteri(*target11, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
// when this texture needs to be magnified to fit on a big polygon, use linear interpolation of the texels to determine the color
glTexParameteri(*target11, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// we want the texture to repeat over the S axis, so if we specify coordinates out of range we still get textured.
glTexParameteri(*target11, GL_TEXTURE_WRAP_S, GL_REPEAT);
// same as above for T axis
glTexParameteri(*target11, GL_TEXTURE_WRAP_T, GL_REPEAT);
// same as above for R axis
glTexParameteri(*target11, GL_TEXTURE_WRAP_R, GL_REPEAT);

glTexImage3D(*target11, 0, *format, w, h, d, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataRGBA);               
4

1 に答える 1

0

問題は、2Dテクスチャ配列がテクスチャインデックスとして整数を使用するのに対し、3DテクスチャはS軸やT軸のようにR軸を0-1にスケーリングすることだと思います。

于 2012-11-14T14:17:06.983 に答える