장면을 큐브 맵에 렌더링하는 방법을 알아 내려고 노력 중입니다. 나는 이것에 조금 붙어 있었고 당신에게 도움을 청할 것이라고 생각했습니다. 저는 OpenGL을 처음 사용하며 FBO를 처음 사용합니다.
현재 cubemap bmp 파일을 사용하는 실제 예제가 있으며 조각 셰이더의 samplerCube 샘플 유형이 GL_TEXTURE1에 연결되어 있습니다. 셰이더 코드를 전혀 변경하지 않습니다. 나는 cubemap bmp 파일을로드하는 함수를 호출하지 않고 아래 코드를 사용하여 cubemap으로 렌더링하려고한다는 사실을 변경하고 있습니다.
아래에서 GL_TEXTURE1에 텍스처를 다시 연결하고 있음을 알 수 있습니다. 유니폼을 설정하면 다음과 같습니다.
glUniform1i(getUniLoc(myProg, "Cubemap"), 1);
프래그먼트 셰이더에서 uniform samplerCube Cubemap
.
다음과 같이 아래 함수를 호출합니다.
cubeMapTexture = renderToCubeMap(150, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE);
이제 아래의 그리기 루프에서 + x, -x, + y, -y, + z, -z 축을 내려다보기 위해 뷰 방향을 변경하지 않는다는 것을 알고 있습니다. 실제로 구현하기 전에 먼저 작동하는 것을보고 싶었습니다. 나는 적어도 코드가 지금있는 방식으로 객체에서 무언가를보아야한다고 생각했다.
나는 아무것도 보지 않고 똑바로 검은 색입니다. 나는 여전히 배경을 흰색으로 만들었습니다. 큐브 맵 텍스처를 샘플링하고 여전히 검은 색으로 표시하기 위해 조명과 색상을 제거했습니다.
GL_RGB8, GL_RGBA 인 텍스처를 설정할 때 문제가 형식 유형 일 수 있다고 생각하지만 시도했습니다.
GL_RGBA, GL_RGBA GL_RGB, GL_RGB
프레임 버퍼에 연결된 텍스처로 렌더링하기 때문에 이것이 표준이라고 생각했지만 다른 열거 형 값을 사용하는 다른 예제를 보았습니다.
또한 큐브 맵을 사용하려는 모든 그리기 호출에서 큐브 맵 텍스처를 바인딩하려고 시도했습니다.
glBindTexture(GL_TEXTURE_CUBE_MAP, cubeMapTexture);
또한 큐브 맵의 색상 버퍼 만 원하기 때문에 대부분의 예제에서 본 FBO에 대한 깊이 버퍼를 만들지 않습니다. 실제로 문제가 있는지 확인하기 위해 하나를 추가했지만 여전히 동일한 결과를 얻었습니다. 내가 시도했을 때 나는 그것을 퍼지 할 수 있었다.
올바른 방향으로 나를 가리킬 수있는 도움을 주시면 감사하겠습니다.
GLuint renderToCubeMap(int size, GLenum InternalFormat, GLenum Format, GLenum Type)
{
// color cube map
GLuint textureObject;
int face;
GLenum status;
//glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE1);
glGenTextures(1, &textureObject);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureObject);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
for (face = 0; face < 6; face++) {
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, InternalFormat, size, size, 0, Format, Type, NULL);
}
// framebuffer object
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, textureObject, 0);
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
printf("%d\"\n", status);
printf("%d\n", GL_FRAMEBUFFER_COMPLETE);
glViewport(0,0,size, size);
for (face = 1; face < 6; face++) {
drawSpheres();
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, textureObject, 0);
}
//Bind 0, which means render to back buffer, as a result, fb is unbound
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return textureObject;
}
drawSpheres
함수가 실제로 보이는 것을 그리 는지 테스트 했습니까 ? 함수가 실제로 무언가를 그리나요?drawSpheres
프레임 버퍼 만 지우도록 변경하면 어떻게됩니까 ?