2011-01-26 9 views
1

을 렌더링합니다. 사용자가 선택할 수있는 객체 (그리고 선택 항목 - 방해 객체)만으로 더 작은 버전의 객체를 만듭니다. 그 버퍼에서 나는 각각의 객체를 다른 색으로 렌더링합니다. 사용자가 mouseX와 mouseY를 가지고있을 때, 나는 그 버퍼에 어떤 색이 그 위치에 해당하는지 살펴보고 해당 객체를 찾습니다. FBO를 사용할 수 없어 텍스쳐에이 버퍼를 렌더링하고 텍스쳐를 화면에 직각으로 재조정하고 glReadPixels를 사용하여 마우스 커서 주변의 "핫 영역"을 읽습니다. 가장 효율적인 것은 아니지만 성능이 지금은 괜찮습니다.객체 선택을위한 버퍼 사용 : 정확도 문제 각 프레임의 초당 프레임 수와 같이 각 프레임의 정확도 문제

이제 "채색 된 물체"가있는이 버퍼에는 정확도 문제가 있습니다. 물론 모든 조명 및 프레임 쉐이더를 비활성화하지만 어쨌든 여전히 인공물을 얻습니다. 분명히 나는 ​​차이가없는 깨끗한 색상 시트가 정말로 필요합니다. 여기에 내가 GL_RED에서 부호없는 바이트의 모든 색상 정보를 넣어

Screenshot here

참고. (지금은 최대 255 개의 선택 가능한 객체를 가정합니다).

질감을 재조정하여 발생합니까? (나는이 좌표를 작은 텍스처로 스케일 된 좌표로 찾아서 대체 할 수 있습니다.) 또는 원하는 색상을 실제로 얻으려면 다른 플래그를 비활성화해야합니까? 이 기술을 안정적으로 사용할 수 있습니까?

답변

2

GL_TEXTURE_MAG_FILTERGL_LINEAR을 사용하고있는 것으로 보입니다. 보간 된 색을 원하지 않으면 GL_NEAREST을 대신 사용하십시오.

+0

스케일링으로 인해 보간 된 채색이 남아 있습니다. 감사! – buddhabrot

0

작은 텍스처로 스케일 된 좌표를 찾아 보아이를 대체 할 수 있습니다.

해야합니다. 좌표 재 지정은 좌표 변환보다 비용이 많이 듭니다.

그렇다면 균일 한 텍스처를 스케일링하면 정교한 필터링없이 정수 비율 (최고 2 배)을 유지하면 아티팩트가 발생하지 않습니다. 다각형 모서리가 흐릿하게 보입니다. 그래서 당신이 사용하는 것이 아니라고 가정합니다.

또한 크기 재조정은 다각형 경계에서만 변형을 도입해야합니다. 크기 조정되지 않은 텍스처에 변형이 없는지 확인 했습니까? 그것은 당신의 "유물"을 소개하는 스케일링인지 여부를 확인합니다.

0

"분산"이란 정확히 무엇을 의미합니까? 좀 더 자세히 설명해주십시오.

이제 몇 가지 제안 : 렌더링이 스텐실 버퍼 작업에 의존하지 않는 경우 객체 ID를 스텐실 버퍼에 넣을 수 있습니다. 렌더링 자체는 윈도우에 전달되며, 별도의 텍스처에 대해서는 사용하지 마십시오 . 현재 하드웨어에서는 일반적으로 8 비트 스텐실을 사용합니다. 물론 인덱스 버퍼 접근 방식을 사용하려는 경우 최상의 솔루션은 여러 렌더링 대상을 사용하고 오브젝트 ID를 색상 및 기타 항목과 함께 인덱스 버퍼에 한 번에 렌더링하는 것입니다. http://www.opengl.org/registry/specs/ARB/draw_buffers.txt

+0

와우, 실제로 그 기술이 더 효율적일 수 있습니다. ARB_draw_buffers는 GPU에서 널리 지원됩니까? 나는 최대한의 호환성을 위해 노력하고 있습니다. – buddhabrot

+0

@buddhabrot : ARB_draw_buffers가 충분히 지원되어야합니다. 사용중인 모든 NVidia, AMD 및 Intel GPU에이 기능이 있습니다. 이는 NVidia GeForce6 이상, AMD Radeon HD4xxx 이상 및 Core2 이상 칩셋에서 찾을 수있는 인텔 통합 그래픽입니다. – datenwolf