2016-07-10 2 views
0

좋아, 이것은 약간 복잡해 (적어도 나를 위해), 나는 어느 곳에서나 해결책을 찾을 수 없었다. 저는 OpenGL에서 2D 골프 게임을 만들고 있습니다. 배경은 제가 만든 텍스쳐로 코스의지도가 있습니다. 문제는 볼이 안전하게 착륙 할 수없는 국경 (경계선 밖, 모래 함정 등)이 기하학적이지 않기 때문에 공의 x 좌표와 y 좌표를 몇 가지 값과 비교하여 볼 수 없는지 여부입니다. 나간다. 솔루션으로 얻은 한 가지 아이디어는 텍스쳐의 알파 채널을 사용하여 범위 밖의 픽셀을 표시하는 것입니다. 내 셰이더가 알파 값에 상관없이 RGB 값을 그려야합니다. 그런 다음 인계를 alpha==1.0f으로, 범위를 벗어난 값을 alpha==0.0f 또는 이와 유사한 것으로 표시합니다. 그런 다음 볼의 x 및 y 좌표에서 질감을 샘플링하여 볼 수 있는지 여부를 확인할 수 있습니다. 이것의 대부분은 한가지를 제외하고는 자신을 성취 할 수 있습니다 : 의 텍스쳐를 어떻게 샘플링합니까?? 그래픽 카드의 쉐이더는 sampler2Dvec2을 사용하여 texture() 함수를 사용할 수 있습니다. 단점 쉐이더의 유일한 출력이 첨부 파일을 색칠하는 것일 경우 (gl_FragDepth 또는 이와 유사한 것은 아님), 어떻게해야합니까? 반환 된 알파 값을 CPU로 다시 가져 옵니까? 또는 다른 쉐이더를 사용하는 대신 CPU에서 샘플링하십시오. 아니면 전체 개념에 결함이 있습니까? 어떤 도움을 주셔서 감사합니다.텍스처의 알파 채널을 경계선으로 사용

P. 그게 확실하지 않다면 OpenGL 4를 사용하고 있습니다.

답변

2

렌더링을하려면 OpenGL이 있어야합니다. 나중에 다시 읽는 유일한 목적으로 OpenGL 정보를 제공하는 것은 잘못된 것입니다.

그림을 그리는 데 사용하지 않는 한이 경계 정보를 OpenGL에 전달하면 안됩니다. 그리고 그렇게해도 CPU에 복사본을 보관하면 번거롭지 않고 쿼리 할 수 ​​있습니다. CPU에서, 당신은 당신이 읽어야하는 픽셀 좌표를 계산하고 읽어야합니다.

2D 배열에서 읽는 것과 아무런 차이가 없습니다.

+0

감사합니다. 하지만 이미지를 2D 배열에 저장하고'glTexImage()'를 통해 OpenGL로 보내면 이미지를 두 번 저장하는 데 약간의 중복성이없는 것입니까? 아니면 그냥 피할 수없는 것입니까? – TheJared802

관련 문제