따라서 docs 다음을 시도했지만 질감 2D 배열이 작동하지 않는 것 같습니다.OpenGL 3.2에서 GL_TEXTURE_2D_ARRAY 사용하는 방법
-(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;
}
나는 같은 질감의 매개 변수와 함께 개별 텍스처를로드 할 수 있어요,하지만 난 그게 텍스처 2 차원 배열에서 작동하지 않습니다. 내가 얻는 모든 것은 검은 색 질감입니다. 왜 이런 일이 일어나는 걸까요? 사실
밉맵 문제 일 수 있습니다. 1 텍셀이 대략 1 픽셀을 차지하도록 확대하면 텍스처가 보입니까? 또한, 당신의 p 텍스 코드는 0과 arrayOfImages.size-1 사이에 있어야합니다, 유효합니까? – Calvin1602
@ Calvin1602 아니요, 전체 화면이 완전히 검은 색입니다. 예, 현재 테스트 목적으로 내 P 텍스 코드가 모두 0으로 설정되어 있습니다. – TheAmateurProgrammer
'GL_LINEAR_MIPMAP_LINEAR'을 사용한다면 밉맵을 업로드해야합니다. – genpfault