프레임 버퍼를 사용하여 동적으로 여러 큐브 맵을 설정하는 프로그램을 작성 중입니다.이 큐브는 쉐이더에서 사용할 배열로 패킹하려고합니다. 현재 단일 큐브 맵을 허용하도록 코드를 설정했지만 cubemaparrays에서 작동하도록하는 데 문제가 있습니다. cubemapArray에 대한동적 CubemapArray 렌더링
내 설정 기능 :
void createCubemapArray(GLuint& cubemap)
{
//Generate an array texture
glGenTextures(1, &cubemap);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, cubemap);
//Create storage for the texture. (4 layers of 1x1 texels)
glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY,
1, //No mipmaps as textures are 1x1
GL_RGB8, //Internal format
width, height, //width,height
4 //Number of layers
);
for (unsigned int i(0); i != 4; ++i)
{
glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY,
0, //Mipmap number
0, 0, i, //xoffset, yoffset, zoffset
1, 1, 1, //width, height, depth
GL_RGB, //format
GL_UNSIGNED_BYTE, //type
0); //pointer to data
}
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
이 내 주요 기능에 호출된다. 런타임 중에 텍스처를 추가 할 수 있도록 설정했으면합니다.
나는 그것에 프레임 버퍼 텍스처를 추가하는 방법이 다음이다 :
vec3 position = mirrorCam.getPosition();
view = look_at(position, position + normalise(viewsX[i]), vec3(0.0, -0.5, -0.5));
drawloop(view, proj, fb[0][i].framebuffer);
glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubemapArray, 0, 0);
drawloop을() 나는 그것으로 전달하는 프레임 버퍼에 장면의 대부분을 렌더링 내 주요 렌더링 루프입니다. mirrorCam은 큐브 맵에 설정 한 카메라 객체입니다.
glBindTexture(GL_TEXTURE_2D, cubemapArray);
glUniform1i(glGetUniformLocation(reflectiveShaderID, "cube_array"), 0);
마지막으로, 내 쉐이더 코드 :
그런 다음 내 쉐이더로를 통과, 나는이 라인을 가지고있다. 중요한 부분에 짧음 :
uniform samplerCubeArray cube_array;
//....
void main()
{
//...
fragment_color = texture(cube_array, vec4(textureCoordinates, 0));
}
이 모든 것을 렌더링하면 검은 색 객체, 즉 질감이 없습니다. 그러나 하나의 큐브 맵으로 교체 할 때 문제가 없으므로 배열을 초기화하거나 배열에 이미지를 바인딩하는 방법에 문제가 있음을 확신합니다. 어떤 아이디어?
"* glTexSubImage3D *"왜 당신이이 호출을하는 당신이하지 않은 경우 : 큐브 맵의 첫 번째 레이어의 얼굴 인덱스를 의미하는
i
를 원하는 경우그래서, 당신은이 작업을 수행 할 것 그들에게 데이터를 전달 하는가? 랩 모드를 설정하고 있다면'GL_TEXTURE_WRAP_R' 랩 모드도 설정하지 않는 이유는 무엇입니까? –
내가 설정 한 예제에는 이러한 호출이 포함되어 있습니다.나는 여러분이 어떤 모양이나 형식으로 레이어를 초기화해야한다고 생각 했으므로 나중에 값을 동적으로 설정할 수 있습니다. – irishMTS