문제

나는 현재 텍스처 좌표, 정상 및 (3DS) 모델의 정점에 VBO를 사용하고 있습니다. 디버깅을 위해 모델을 그릴 때 (일시적으로) 정상을 보여주고 싶습니다. vert에서 vert+normal- 또는 vert+vert+normal이있는 다른 vbo 또는 모든 정상을 그릴 수있는 다른 vbo 또는 vert+vertex를 사용하는 방법이 있습니까? 그리고 정상을 그릴 때 사용되는 V+N을 계산하기 위해 모델을 그릴 때 이미 정상 데이터가 전달 되었습니까?

도움이 되었습니까?

해결책

아니요, 정점 셰이더에서 추가 선을 그릴 수 없습니다.

정점 셰이더는 지오메트리를 만드는 것이 아니라 정점 계산 당 수행에 관한 것입니다. 말할 때 정점 셰이더 사용 glDrawArrays(GL_TRIANGLES,0,3), 이것이 당신이 그릴 것인지 정확히 1 삼각형을 지정하는 것입니다. 처리가 정점 셰이더에 도달하면 정점의 특성 만 변경할 수 있습니다. 그 삼각형의, 어떤 방식 으로든 모양 또는 형태로 지오메트리의 토폴로지 및/또는 수를 수정하지 마십시오.

당신이 찾고있는 것은 무엇입니다 OpenGL 3.2는 지오메트리 셰이더로 정의됩니다, 셰이더에서 임의의 지오메트리 카운트/토폴로지를 출력 할 수 있습니다. 그러나 이것은 OpenGL 3.2를 통해서만 지원되며, 현재 많은 카드/운전자가 현재 지원하지는 않습니다 (현재 몇 달 동안 나왔습니다).

그러나 나는 정상 (어떤 종류의 디버깅을 지원하는 대부분의 엔진에서)를 보여주는 전통적인 라인 렌더링으로 이루어지며, 올바른 위치 (p, p+c*n으로 채워지는 추가 정점 버퍼가 있습니다. ) 각 메쉬 위치에 대해 C는 정상을 보여주기 위해 사용하려는 길이를 나타내는 상수입니다. 글을 쓰는 것은 그렇게 복잡하지 않습니다 ...

다른 팁

지오메트리를 두 번 그려서이를 근사화 할 수 있습니다. 일단 당신이 평소처럼 그것을 그립니다. 두 번째로, 지오메트리를 GL_POINTS로 그리고 정점 셰이더를 부착하는 정점 셰이더를 vertex normal에 의해 상쇄하십시오.

이로 인해 모델에 표면에 일련의 점이 떠오를 수 있습니다. 각 점은 정점에서 정상의 방향을 보여줍니다.

이것은 완벽하지는 않지만 사용하기를 바라는 것이 무엇인지에 따라 충분할 수 있습니다.

업데이트: 아하! 그리고 정점 셰이더에 일정한 스케일링 계수를 전달하고 시간이 지남에 따라 애플리케이션이 0과 1 사이의 요인을 보간하면 정점 셰이더에 의해 렌더링 된 포인트는 시간이 지남에 따라 애니메이션을 시작하여 vertex에서 시작하여 적용됩니다. 그런 다음 정상의 방향으로 떠 다니고 있습니다.

영리하게 쓰여진 정점 셰이더로 올바른 효과를 얻는 것이 가능하지만 많은 작업 일 것입니다. 어쨌든 이것은 디버깅 목적을위한 것이기 때문에 몇 줄을 그리는 것이 더 낫습니다. 성능 히트는 심각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top