2014-12-09 4 views
1

다음부터 this post from yesterday까지입니다. 상황은 원래 게시물과 동일합니다. 저는 그래픽 파이프 라인을 구현하고 있습니다. 이상한 변환 문제가 있습니다. 그러나 저는 이제 그 문제가 원근 투영과 관련이 없으며 단지 그 문제보다 더 큰 이슈라고 생각합니다.그래픽 파이프 라인 구현

지금 파이프 라인은 3 단계 만 가지고 있습니다. 첫 번째 단계는 모델과 프로젝션 매트릭스를 사용하여 개별 정점을 변환합니다. 다음은 이들을 프리미티브로 어셈블 링하며, 래스터 라이저에 의해 최종적으로 렌더링됩니다.

이 정점 데이터는 :이 테스트 실행으로부터 출력

Vertex1: 0 , 0, -1, 1 
Vertex2: 0.5, 1, -1, 1 
Vertex3: 1 , 0, -1, 1 

더 변환 (즉, 모델 행렬은 단위 행렬 (identity matrix)이라고한다) 일어나지 않을 때 :

Model Matrix 
1.000000 0.000000 0.000000 0.000000 
0.000000 1.000000 0.000000 0.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 0.000000 1.000000 

    New vert x: 0.000000 y: 0.000000 z: -1.000000 w: 1.000000 
    New vert x: 0.500000 y: 1.000000 z: -1.000000 w: 1.000000 
    New vert x: 1.000000 y: 0.000000 z: -1.000000 w: 1.000000 

Projection Matrix 
1.931371 0.000000 0.000000 0.000000 
0.000000 2.414213 0.000000 0.000000 
0.000000 0.000000 1.002002 -0.200200 
0.000000 0.000000 -1.000000 0.000000 

    New vert x: 0.000000 y: 0.000000 z: -1.202202 w: 1.000000 
    New vert x: 0.965685 y: 2.414213 z: -1.202202 w: 1.000000 
    New vert x: 1.931371 y: 0.000000 z: -1.202202 w: 1.000000 

Divide by W 

    New vert x: 0.000000 y: 0.000000 z: -1.202202 w: 1.000000 
    New vert x: 0.965685 y: 2.414213 z: -1.202202 w: 1.000000 
    New vert x: 1.931371 y: 0.000000 z: -1.202202 w: 1.000000 

Screenspace Matrix 
400.000000 0.000000 0.000000 400.000000 
0.000000 320.000000 0.000000 320.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 0.000000 1.000000 

    New vert x: 400.000000 y: 320.000000 z: -1.202202 w: 1.000000 
    New vert x: 786.274170 y: 1092.548340 z: -1.202202 w: 1.000000 
    New vert x: 1172.548340 y: 320.000000 z: -1.202202 w: 1.000000 

이 결과는 다음과 같습니다. enter image description here 0,0,0 정점이 원점의 중심에있는 것처럼 보이고 다른 점이 화면에서 벗어난 것처럼 보입니다. 카메라에서 -1 떨어진 위치에 있습니다. 배고 있다.

있도록 나는 모델 행렬을 조정하는 경우 :

Model matrix 
1.000000 0.000000 0.000000 -4.799998 
0.000000 1.000000 0.000000 -3.999998 
0.000000 0.000000 1.000000 -2.300000 
0.000000 0.000000 0.000000 1.000000 
    New vert x: -4.799998 y: -3.999998 z: -3.300000 w: 1.000000 
    New vert x: -4.299998 y: -2.999998 z: -3.300000 w: 1.000000 
    New vert x: -3.799998 y: -3.999998 z: -3.300000 w: 1.000000 

Projection Matrix 
1.931371 0.000000 0.000000 0.000000 
0.000000 2.414213 0.000000 0.000000 
0.000000 0.000000 1.002002 -0.200200 
0.000000 0.000000 -1.000000 0.000000 

    New vert x: -9.270576 y: -9.656849 z: -3.506807 w: 1.000000 
    New vert x: -8.304890 y: -7.242636 z: -3.506807 w: 1.000000 
    New vert x: -7.339205 y: -9.656849 z: -3.506807 w: 1.000000 


Divide by W 
    New vert x: -2.809265 y: -2.926318 z: -1.062669 w: 3.300000 
    New vert x: -2.516633 y: -2.194738 z: -1.062669 w: 3.300000 
    New vert x: -2.224001 y: -2.926318 z: -1.062669 w: 3.300000 


Screenspace Matrix 
400.000000 0.000000 0.000000 400.000000 
0.000000 320.000000 0.000000 320.000000 
0.000000 0.000000 1.000000 0.000000 
0.000000 0.000000 0.000000 1.000000 

    New vert x: 196.293823 y: 119.578247 z: -1.062669 w: 3.300000 
    New vert x: 313.346680 y: 353.683777 z: -1.062669 w: 3.300000 
    New vert x: 430.399414 y: 119.578247 z: -1.062669 w: 3.300000 

이 데이터의 출력은 다음에 어디 이 enter image description here

이 나에게 제대로 보이지 않습니다하지만 난 볼 수 없습니다 매트릭스 스택 내 문제가 있습니다. 위의 다른 사람이 매트릭스 스택에 어떤 문제가 볼 수 있습니까? 원래의 게시물로

+0

원근 투영을 수행하는 방법을 보려면 http://www.khanacademy.org/computer-programming/perspective-spin-off-of-3d-magnet/6237326687600640을 참조하십시오. – ja72

답변

0

이 :.

는 "그래서 나는 꽤 중단 이후이 프로젝트에 다시 와서 내 투영 나누기 (일명/w)이 단지 XYZ 좌표를 나누는 것을 깨달았다 그래서 적용 할 때 스크린 공간 행렬에서 변환 열에 '하나보다 큰'W 값이 곱 해져서 Z가 감소하면 삼각형이 오른쪽 상단으로 이동합니다. "