2016-05-31 3 views
1

저는 모델 행렬 만 사용하여로드 된 모델 (Blender의 원숭이면)을 모형 공간에서 세계 공간으로 vbo로 전송합니다. 그러나 모델은 엄청나게 왜곡되어 있습니다 (무한대로 늘림). 왜 이런 일이 일어나고 있는지에 대해 당황 스럽습니다.OpenGL - 행렬 논리 오류

This video은 내 문제를 명확하게 표시하기 위해 y 축을 중심으로 일정하게 회전하는 모델을 보여줍니다. 나는 내가로드 한 OBJ 모델이 유효하다는 것을 확신합니다. 용암 텍스처가 모델에 결합되어보다 쉽게 ​​볼 수있게되었습니다.

비디오는 콘솔이 현재 버텍스 쉐이더로 보내고있는 매트릭스를 보여줍니다. 메모리에서, 매트릭스는, 행 우선 순서로 표현되기 때문에, 다음의 행렬 :

|1 0 0 0 | 
|0 1 0 0 | 
|0 0 1 10| 
|0 0 0 1 | 

수레 ++ C 다음의 배열로 내 정점 셰이더에 전송된다

{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 10, 0, 0, 0, 1} 

I 믿어 I 그 내 수학에 초보자 오류가 있습니다. 모델 만보기 만하면 눈에 띄는 오류가 있습니까?

'MVP'는 영상 위치에서 본 얻어진 행렬
gl_Position = mvp * vec4(position, 1.0); 

처리되는 모델의 현재의 정점의 위치를 ​​(포함 내 정점 셰이더 (GLSL)에서, I는 다음의 코드를 사용하여 모형 공간에서). 이러한 왜곡이 왜 발생하는지 이해하지 못합니다. 프로그램의 다른 측면에서 오류가 될 수 있습니까? 예 : 충분한 코드가 표시되지 않습니다.

+0

행렬을 전송할 때'traspose' 플래그를 사용합니까? – BeyelerStudios

+0

필자는 그렇게 해보았으며 모델이 보이지 않게되었습니다. 제 예제에서 '10'의 값은 네 번째 행이 아니라 네 번째 열이 될 것이기 때문에, 제대로 기억한다면 OpenGL의 순서에 위배됩니다. – Harrand

+0

아니요, 단순히 데이터가 클립 영역의 단위 큐브 안에 있지 않고 잘린 것을 의미합니다. – BeyelerStudios

답변

1

결과 행렬의 필요한 전치. 이전에 위치가 기본 파 클립을 초과하여 모델이 잘 리기 때문에 문제가 해결되지 않았습니다.