2014-12-28 8 views
0

간결하게하기 : 우리 모두 알다시피, OpenGL은 많은 삼각형을 화면에 그립니다."오브젝트 맵"in opengl

내가 알고 싶은 :

OpenGL을이 삼각형을 그리는 경우는 알고있다가, 어떤 삼각형이 오른쪽 화면에있는 픽셀에 속하는?

이 정보를 얻을 수 있습니까? 예를 들어 무승부 (예 : gl_retrieve_object_map() 또는 유사)와 같은 함수를 호출하면 어떤 픽셀이 어떤 삼각형을 표시하는지 알 수 있습니까?

의 모든 픽셀

내가 나에게 삼각형 인덱스 또는 어떤 알리는 2 차원 배열 생각하고 대한을 따기 을하고 같은 :

예를 들어, 10 × 10 픽셀 화면 :

0 0 1 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 2 0 
0 0 0 0 1 1 1 2 2 0 
0 0 0 0 0 1 1 2 2 0 
0 0 0 0 0 2 1 2 2 0 
0 0 0 0 2 2 2 2 2 0 
0 0 0 2 2 2 2 2 2 0 
0 0 2 2 2 2 2 2 2 0 
0 2 2 2 2 2 2 2 2 0 
0 0 0 0 0 0 0 0 0 0 

과 같은 이미지의 경우 :

___ 
    \ | 
    \ | 
    \|/| 
    /| 
    /| 
/ | 
    /____| 

거기에 내가 사용할 수있는 것이 있습니까?

답변

4

OpenGL은 무언가를 그려 본 후에 실제로이 정보를 가지고 있지 않습니다. OpenGL은 (그 중에서도) 컬러 버퍼와 깊이 버퍼를 포함한 몇 가지 버퍼를 가지고 있지만, 그려진 각 프리미티브에 대한 인덱스를 보유하고있는 버퍼는 없다.

하지만 그건 운이 없다는 것을 의미하지 않습니다. 내가 본 어플리케이션 중 하나는 모든 조명 효과를 제거하고 각 오브젝트에 고유 한 색상을 부여하는 것입니다. 그런 다음 화면을 오프 스크린 버퍼로 렌더링합니다. 그런 다음 오프 스크린 버퍼에는 원하는 정보가 정확하게 있습니다.

+0

큰 해킹이지만 정말 멋진 솔루션입니다! 고마워요! 그러나 muspen OpenGL은 드로잉 타임에 그 정보를 저장합니까? 어떻게 그 객체의 색상과 올바른 쉐이더를 얻을 수 있을까요? – bricklore

+0

@Malte : OpenGL에는 객체 그리기에 사용할 현재 쉐이더와 색상을 저장하는 변수가 있습니다. 객체를 그릴 때 각 픽셀에 대해 그 위치에서 객체의 깊이를 파악하고 이전에 기록 된 깊이보다 가까운 경우 해당 픽셀의 색상을 계산하여 색상 버퍼에 덮어 쓰고 깊이 버퍼의 새로운 최소 깊이. 그런 다음 새 객체를 렌더링하면 해당 변수를 덮어 씁니다. 이전에 렌더링 된 객체의 유일한 흔적은 색상 버퍼의 색상과 깊이 버퍼의 깊이입니다. – icktoofay

+0

좋은 thas 좋고 나쁜 :) 내 첫 번째 생각했다 : ogl 에서이 방법을 끔찍하게 천천히해야합니까? 그곳에서 물건을 결정할 수 있다면, 왜 우리는 어떡하지? – bricklore

1

OpenGL이 삼각형을 그리는 경우 어떤 삼각형이 화면의 어떤 픽셀에 속하는지 알 수 있어야합니다. 맞습니까?

번호 OpenGL은 한 번에 하나의 삼각형을 그릴 것을 요구하는 순서로 삼각형을 그립니다. 프로그램은 "좌표 A, B와 C 사이에 삼각형을 그려라"고 묻습니다. 그리고 OpenGL은 그 다음에 그것을 할 것입니다. (사실,이 명령들을 일괄 처리 할 것입니다.)

그래서 삼각형이 그려지지기 전에 꼭지점 속성 만 있으면 그 위치가 결정됩니다. 그런 다음 목록의 각 삼각형에 대해 그려지며 남은 것은 채색되지 않은 픽셀과 삼각형이 그것을 만든 정보입니다.

관련 문제