Glusphere OpenGL 물체에 2 개 이상의 텍스처 맵을 적용하려면 어떻게해야합니까?
문제
나는 기본 행성 시청자 OpenGL Perl 응용 프로그램을 재미있게 쓰고 있습니다. 나는 영광스러운 행성과 함께 기본이 작동합니다. gluSphere()
, 고전적인 지구 텍스처 맵으로 응용 프로그램으로 회전합니다.
이제 OpenGL ( "지구 구름")을 통해 두 번째 텍스처 맵을 적용하려면 어떻게해야합니까?
물론 Photoshop 또는 다른 그래픽 응용 프로그램에서 두 개의 텍스처 맵을 혼합 할 수 있지만 OpenGL API를 통해 방법이 있습니까?
나는 두 텍스처를로드하고 MIPMAP를 생성하려고 시도했지만 행성은 두 번째 텍스처 만 적용된 것만으로 표시됩니다.
해결책
Jim Buck이 말했듯이 멀티 텍스트로 원하는 효과를 얻을 수 있습니다.
그러나 GLU Quadrics가 Multitexture 좌표 생성 (예 : Glmultitexcoord*() vs. gltexcoord*()를 사용하는 것을 지원한다고 생각하지 않습니다. 따라서 멀티 텍스처 경로로 이동하려면 자신의 구체 코드가 필요하다고 생각합니다.
또는 두 번째 텍스처 맵 (알파 채널 및 블렌딩을 적절하게 사용하여)에 약간 더 큰 구체를 그려서 도망 갈 수 있습니다. 이것은 Z-Fighting을 유발할 가능성이 높으므로 가치보다 더 어려울 수 있습니다.
자신의 구체 코드를 작성하는 것은 어렵지 않습니다. 아마도 만족스러운 결과를 얻는 가장 쉬운 경로 일 것입니다.
다른 팁
텍스처를 어떻게 결합하기를 원하십니까? 단순히 다중 텍스트를 사용하는 경우 원하는 효과를 얻을 수 있어야합니다.
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture1ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);
텍스처를 결합하려는 방법에 따라 gltexenvf 호출을 설정하십시오. 그런 다음 Glusphere ()을 호출하십시오.
드류 홀에 동의합니다. 어쩌면 두 번째 구체를 만드는 것이 더 간단합니다. 모든 OpenGL 카드가 다중 텍스트를 지원하는 것은 아닙니다.
glpolygonoffset과 z- 싸움에 대응할 수 있습니다.