2012-03-15 7 views
-1

새로운 OpenGL 사양에서는 행렬 조작 함수가 제거됩니다. 변형 행렬을 손으로 계산하여 쉐이더에 전달해야합니다.OpenGL에서 쉐이더에 대한 변환 행렬을 계산하는 방법

어떻게 변환을 처리하나요 : glRotate 있지만, glScale는 등, 나는

내 질문은 ... 교환에서 아무것도 보지 않았다 사라져? 이론을 파헤 치고 직접 구현하거나 미리 정의 된 라이브러리를 사용합니까? "공식적인"OpenGL 솔루션이 있습니까?

예를 들어 datenwolf은 손으로 가리키면 C 라이브러리 in this post이됩니다. Java 사용자 (Android)의 경우 AffineTransform 클래스이지만 3x3 매트릭스에 적용되므로 OpenGL에 적용하려면 추가 노력이 필요합니다 mat4

해결책은 무엇입니까?

+0

-1 : 이것은 설문 조사 질문입니다. 이것들은 SO에 환영받지 못합니다. –

+0

@ NicolBolas : 나는 동의하지 않는다. 명확한 문제가 있습니다 : "더 이상 변환을위한 OpenGL 지원, 그걸 어떻게해야합니까?". 매 두 번째 질문은 설문 조사라고 말하는 것을 두들겨 맞을 수 있습니다. –

+0

아니요, 당신의 질문에 "당신의 해결책은 무엇입니까?" * 모두 *가 다른 해결책을 가지고 있기 때문에 설문 조사 질문입니다. 당신은 우리가이 문제를 어떻게 다루는 지 개인적으로 우리에게 묻고 있습니다. –

답변

3

어떻게 변환을 처리합니까? 이론을 파헤 치고 직접 구현하거나 미리 정의 된 라이브러리를 사용합니까?

어느 쪽이든 간다. 그러나 사실입니다 : 3D 지오메트리를 다루는 실제 프로그램에서 렌더링하는 것보다 훨씬 많은 변환 매트릭스가 필요합니다. 어떤 종류의 물리 시뮬레이션을 실행한다고 가정 해보십시오. 강체의 위치는 일반적으로 변환 행렬로 표시됩니다. 그래서 물리 시뮬레이션을한다면 어쨌든 어딘가에 그 변형 행렬이 놓여 있으므로 그냥 사용하십시오.

완전히 통합 된 시뮬레이션 엔진에서는 중복성을 피하기 위해 ODE, Bullet 등과 같은 물리 시뮬레이션 라이브러리를 가져 와서 객체를 복사하지 않고 구조를 나타내는 객체에서 직접 작업 할 수있는 방식으로 수정합니다 데이터를 라이브러리 특정 레코드로 집계하여 다시 가져옵니다.

그래서 보통 약간의 혼합으로 끝납니다. 수학 중 일부는 기존 라이브러리에 있으며 일부는 직접 구현합니다.

3

나는 datenwolf에 동의하지만 예제를 제공하기 위해 환상적인 범용 행렬 수학 라이브러리 인 Eigen을 사용합니다.

+0

+1에 대한 언급 – datenwolf

0

glsl 3.0 glTraslate(), glRotate(), fTransform() 등의 함수는 더 이상 사용되지 않지만 여전히 사용 가능합니다.

더 좋은 방법은 glsl 사양과 호환되는 GLM http://glm.g-truc.net/과 같은 수학 라이브러리를 사용하는 것입니다.

투영 행렬, 모델 행렬 및 뷰 행렬이 균일 한 변수로 셰이더에 전달됩니다.

관련 문제