여기 OpenGL을 배울 수있는 멍청한 멍청한 놈입니다. 게시 할 코드가 없습니다. 현재 구현하지 않은 개념에 대한 질문이기 때문에 게시 할 코드가 없습니다. 코드가 절대적으로 필요한 경우 알려 주시면 부끄러움을 표시하고 일부는 게시합니다.Texture_2D가 뷰포트보다 큰 뷰포트를 OpenGL에서 뷰포트로 축척하지 못하도록하는 방법
기본적으로 GL에 2D 이미지를 표시하는 VBO가 있습니다. 그러나 내 뷰포트가 800x600이고 이미지가 1024x1024이므로 이미지가 뷰포트 내부에 맞도록 축소됩니다. 나는이 문제에 대해 아주 오랫동안 봤는데, 이것들이 일어날 것이라고 말하는 NeHe 튜토리얼과 같은 것들에 대해서는 이것에 대한 언급이 있지만 일어날 수없는 이유와 이유에 대해서는 설명하지 않고있다. 나는 예방할 수 있다고 말한 하나의 포럼을 찾았지만 다시는 세부 사항이 없다고 생각합니다.
그래서 궁금합니다. 어떻게 할 수 있습니까? 나는이 분야에서 꽤 새로운 아기 멍청 아. 그래서 나는 GL을 배우고있다. 도움이된다면 저는 2D 게임을 만들고 있는데이 VBO를 사용하여 레벨의 배경 이미지를 표시하려고합니다. 따라서 카메라를 좌우로 움직이면 본질적으로이 배경 이미지를 스크롤 할 수 있습니다 . 어떤 도움이라도 대단히 감사 드리며 감사드립니다. :)
P.S. 또한 이것은 아마도 별개의 질문 일 것입니다 만, 버텍스/텍스처 맵의 좌표계를 설명하는 설명이나 링크도 잘 이해할 수 있습니다. 저는 실제로 텍스처를 0-1에서 매핑하고 그것을 공간의 픽셀 좌표로 변환하는 방법을 알지 못합니다.
UPDATE 좀 더 내가 찾은 유일한 해결책은 다음, 당신의 2D 텍스처의 크기보다 크거나 같아야 일시적으로 뷰포트를 조정하여 2D 텍스처를 그릴 것입니다 인터넷 검색, 다음을 설정 한 후, 그래서
좋아 뷰포트를 창 크기로 되돌립니다. 좋아요 :
//Set viewport so size of the current texture - note this is using a VBO
glViewport(0, 0, 1024, 1024);
glBindTexture(GL_TEXTURE_2D, texture);
glDrawArrays(GL_QUADS, 0, 4);
glPopAttrib();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
//Set the viewport back to the window size
glViewport(0, 0, 800, 600);
유일한 문제는 주요 해킹처럼 보입니다. 이것이 공식인가 수용 가능한 해결책입니까?
답장을 보내 주셔서 감사합니다. 이 작업을 시도했지만 내 정점 데이터는 VBO에 저장되므로 VBO를 초기화 할 때 텍스처 너비를 뷰포트 너비로 나눈 크기에 따라 정점을 조정하려고했습니다. 아무 효과가없는 것 같았지만 느린 것을 변화시키는 뷰포트를 볼 수 있다는 것에 동의하기 때문에 또 하나의 샷을 제공 할 것입니다. –
고마워요! 내가 바보라고 밝히고, 이전에 이것을 시도했을 때, 너비/높이 등을 명시 적으로 float로 정의하지 않았기 때문에 변환시 값을 반올림하여 전혀 작동하지 않게되었습니다. 다시 한번 고마워요! 내가 더 upvote 수 있기를 바랍니다. –
뷰포트를 Chaning하는 것은 단지 정점 변환 프로세스에 영향을 미치는 4 개의 레지스터를 설정하기 때문에 값이 싸다. – datenwolf