2017-04-11 9 views
0

하늘 상자가있어서 그 안쪽으로 이동할 수 없다는 것을 알았습니다 (회전 만하고, 안에있는 사람에게 더 가깝지 않습니다. 줌이 아니며 정확하게 움직입니다). 이 튜토리얼 https://learnopengl.com/#!Advanced-OpenGL/Cubemaps에 작성되었습니다. 카메라 번역을 사용하자마자 모서리와 모든면이 보이기 때문에 스카이 박스가보기 싫어서 카메라를 움직이고 동시에 스카이 박스를 움직이는 아이디어는 그리 좋지 않습니다. 적절한 해결책은 무엇입니까? 나는 그것이 명백한 문제라고 생각하지만, 어디서나 해결책을 찾을 수는 없습니다. 아니면 다른 목적으로 스카이 박스가 아닌 다른 구조를 사용해야 할 수도 있습니다. enter image description hereOpenGL- skybox 내부로 카메라 이동

enter image description here

여기에 두 가지 상태입니다 - 활성화 된 경우 번역 내가 할 첫 번째. 나는 두 번째 이미지에서 산에 더 가까이 가기를 원한다.

+0

많은 문제가 여기에 잘못 될 수 있습니다. 최소한 스크린 샷을 보지 않고는 도움을 받기가 어려울 것입니다. – jimvonmoon

+0

@ jimvonmoon, 사진을 다운로드했습니다. 코드 자체가 약간 큽니다. 대부분 튜토리얼과 동일합니다. –

+0

skybox에서 이동하면 skybox의 전체 목적을 무력화시킬 수 있습니다. 튜토리얼과 관련하여 의도 된 동작이기도합니다. – Vallentin

답변

0

비록 몇 년 전의 질문이지만,이 문제에 대한 해결책은 뷰 매트릭스를 후에 설정해야합니다. 후에 skybox에 대한 쉐이더를 "사용"합니다. 루프에서 뷰 매트릭스를 한 번만 설정할 수없고 뷰가 균일 한 모든 셰이더로 작업 할 수 있습니다.

glm::mat4 view = mCamera.GetViewMatrix(); 

    glDepthFunc(GL_LEQUAL); 
    mSkyboxShader.Use(); 
    mSkyboxShader.SetMat4("view", view); 
    mSkyboxShader.SetMat4("projection", projection); 
    mSkybox.Render(mSkyboxTexture); 
    glDepthFunc(GL_LESS); 

에 관계없이 코드, 이것은 당신이 이동할 수있는 다른 개체처럼 스카이 박스를 취급 :

그래서 문제는 영업 이익은 메인 루프 내에서 튜토리얼에 따라이 같은 것을 가지고 있다는 것입니다. 솔루션이다 : 당신은 당신이보기 행렬을 필요로 각 쉐이더 프로그램에 대한 균일에 적용하기 전에 쉐이더를 활성화 한 후보기를 업데이트 할 필요가

glm::mat4 view = mCamera.GetViewMatrix(); 

glDepthFunc(GL_LEQUAL); 
mSkyboxShader.Use(); 
view = mCamera.GetViewMatrix(); <----Solution 
mSkyboxShader.SetMat4("view", view); 
... 

.