2011-12-02 3 views
2

다음 알고리즘을 구현하려고합니다. (작은 삼각형에 페인팅하는 방법으로 깨뜨림) 제대로 설명하는 그물을 통해 자습서를 찾을 수 없습니다. 대부분의 것들은 ' 이론적으로 설명해 주었고 샘플은 다른 많은 것들을 포함하고 있기 때문에 이해하기 너무 복잡합니다.OpenGL에 대한 세부 수준 알고리즘 구현

내가 어떻게 완료되었는지 또는 그와 비슷한 것이 나에게 지적 할 수 있다면 나는 감사 할 줄 알았다.

+5

이것은 매우 복잡한 과정이며 그래픽 프로그래밍은 비밀로 가득 찬 세계입니다. –

+2

"작은 삼각형에 그림 그리기"라는 의미는 무엇입니까? – Stiefel

+0

"멀리에서 볼 수 있도록 덜 세부적인 버전을 만들기 위해 수퍼 샘플링을 원하는 많은 수의 다각형이있는 폴리곤 메쉬가 있습니까?" –

답변

4

귀하의 의견에 따르면, glVertex를 백만 번 호출하는 것처럼 보입니다. 이는 사용되지 않는 OpenGL 기능을 사용하고 있다는 것을 의미합니다. 프로그램이 너무 느리게 실행되는 이유 일 수 있습니다.

하루 안에 (내가 아는 것은 아니지만 저는 20입니다.) 프레임마다 한 번에 하나씩 glVertex를 사용하여 정점을 지정합니다. 이를 즉시 모드라고합니다. 이것은 정점 정보를 프레임 당 정점 당 한 번 OpenGL 메모리 (일반적으로 그래픽 카드)에 전달합니다. 따라서 200k 버텍스가 있다면, 프레임 당 최소 200k 번 수행해야합니다 (인덱스를 사용하면 정확히 200k로 잘라낼 수 있지만 다른 것들은 통과해야합니다).

모든 정점이 모든 프레임에서 변경되는 것은 의심 스럽습니다. 많은 사람들이 심지어 여러 프레임에 걸쳐 같은 것을 유지할 것이라고 나는 확신한다. 그래서 당신이 할 수있는 일은 VBO (정점 버퍼 객체)라고 불리는 것입니다. 즉,이 정점 정보를 OpenGL 메모리에 저장하는 것입니다 (다시 말하면 gfx 카드가 있다면 이것을 사용할 수 있습니다). 그런 다음, 모든 프레임마다 모든 것을 전송해야합니다.

처음에는 머리를 감싸는 것이 어렵습니다. 그러나 본질적으로 glVertex를 백만 번 호출하는 것은 모든 프레임에 대해 이렇게 말합니다. "여기에 필요한 정보가 있습니다. 그리고 모든 프레임마다 똑같은 말을합니다. Vertex Buffer Objects를 사용하는 것은 한 번 : "여기에 정보가 있습니다"라고 말한 다음 프레임마다 한 번씩 이렇게 말합니다. "내가 준 정보를 잠깐 기억하고 그립니다."

모든 프레임마다 정보를 릴레이 할 필요가 없기 때문에 분명히 빠릅니다.

하나의 단점은 꼭지점을 변경해야하는 경우 데이터가 더 이상 제어되지 않으므로 조금 까다 롭습니다. 이 경우 새 데이터를 전달하는 대신 vbo의 내용에 메모리 맵을 가져 와서 수정해야합니다. 또는 항상 삭제하고 다시 생성 할 수 있지만 모든 프레임을 이렇게하면 직접 모드보다 vbo를 사용할 필요가 없습니다.

VBO에 관한 코드는 게시하지 않습니다. 왜냐하면이 게시물은 이미 4 배 더 길어지기 때문입니다. 나는 당신에게 더 많은 정보를 찾을 수있는 많은 키워드를 주었다고 생각합니다. 여기에 난 그냥 주제에 대해 배울 수로 시작 (별도로 검색) 제안하는 몇 가지이다 :

버텍스 버퍼 오브젝트, 인덱스, 고정 기능 파이프 라인, 쉐이더

당신이 중 하나를 구현하는 문제가있는 경우 내가 언급 한 내용이 있다면 새로운 특정 질문을 열 것을 제안합니다.

행운을 빈다.

+0

그레이트 코멘트 정말로! 난 그냥 내 모든 데이터를 변경하는 계획이 아니라는 것을 언급하고 싶었을 때마다 사용자가 acouldally depands, 내 프로그램 실제로 만델 브로 세트 (도형 참조)를 계산하고 사용자가 확대/축소하기로 결정하면 화면에 3D 모델을 인쇄합니다 매 0.3 초마다 데이터가 급격히 변하고 VBO가 쓸모 없게 될 것이라고 추측합니다.하지만 "탐색기"를 설정하면 VBO를 설정하는 것이 좋습니다 ... –