4

そのため、ドキュメントに従ってみましたが、テクスチャ2D配列を機能させることができないようです。

-(GLint)buildTextureArray:(NSArray *)arrayOfImages
{
    GLImage *sample = [GLImage imageWithImageName:[arrayOfImages objectAtIndex:0] shouldFlip:NO]; //Creates a sample to examine texture width and height
    int width = sample.width, height = sample.height;
    GLsizei count = (GLsizei)arrayOfImages.count; 

    GLuint texture3D;
    glGenTextures(1, &texture3D);
    glBindTexture(GL_TEXTURE_2D_ARRAY, texture3D);

    glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

    glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_S,GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_T,GL_REPEAT);
    glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, width, height, count, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);

    int i = 0;
    for (NSString *name in arrayOfImages) //Loops through everything in arrayOfImages
    {
        GLImage *image = [GLImage imageWithImageName:name shouldFlip:NO]; //My own class that loads an image
        glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, image.width, image.height, 1, GL_RGBA, GL_UNSIGNED_BYTE, image.data);
        i++;
    }
    return texture3D;
}

//Setting Uniform elsewhere
glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
glUniform1i(textures, 0);    


//Fragment Shader
#version 150

in vec3 texCoords;

uniform sampler2DArray textures;

out vec3 color;

void main()
{
    color = texture(textures, texCoords.stp, 0).rgb;
}

同じテクスチャパラメータで個々のテクスチャをロードすることはできますが、テクスチャ2D配列で動作させることができません。私が得るのは黒いテクスチャーだけです。なぜこうなった?

4

2 に答える 2

2
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);

実際、テクスチャにはミップマップがありません。したがって、OpenGLにそのように伝えるのはやめましょう。

また、テクスチャのミップマップ範囲パラメータ(および)を常に設定してください。または、テクスチャストレージを使用してテクスチャのストレージを割り当てると、それが自動的に行われます。GL_TEXTURE_BASE_LAYERGL_TEXTURE_MAX_LAYER

于 2012-09-11T15:06:49.817 に答える
0

2d_arrayテクスチャの場合、texcoordsの「v」コンポーネントは0の高さから変化し、「w」は0の深さから変化します(レイヤーを表すため)。これらのtexcordinatesを変更してみてください。

于 2012-12-12T10:47:03.667 に答える