Loading...
2010. 5. 11. 01:09

mesh 생성

이전 작업이 파일로부터 mesh를 읽어들이는 것이었다면 이번 작업은 mesh를 구성하는것이다. 기본적으로는 dx9 같이 몇몇개의 서브셋으로 구성되어져 있다. 하지만 생성하는 절차와 사용하는 api가 조금 다르다. ID3DX10Mesh* mesh = NULL; // 메시 - (정점, 인덱스, 속성버퍼를 가진다) 1. 정점 구조체의 형식을 결정하고 d3d10_input_element_desc 구조체를 준비하고 입력레이아웃을 생성 D3D10_INPUT_ELEMENT_DESC elements[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G3..

2010. 5. 9. 01:51

3ds 로드, 가상트랙볼

가상트랙볼 - 마우스의 위치는 트랙볼의 표면에서의 한 위치에 대응, 마우스가 움직이면 트랙볼이 움직이는 것처럼 구현. - 구 표면에서의 각 지점이 카메라의 방향에 해당, 카메라의 회전은 구 표면에서의 한 점이 표면의 다른 점으로 이동하는 것에 해당. - 반경이 1이고 항상 윈도우의 중심에 있다고 가정. 사실 가상트랙볼 쿼터니온 공식은 온전히 다 이해하지를 못하겠다..ㅡㅡ;.. 3d mesh - 3ds file load http://mgun.tistory.com/401 를 참조하자. .fx 도 딱히 달라진점이 없다.

2010. 5. 8. 14:15

카메라 클래스 - 쿼터니온

이전의 오일러랑 같은역활을 하긴 하지만 오일러의 단점을 보완하는 쿼터니온이 상당히 중요하다. 오일러의 단점으로 보면 - 각 축에 대한 회전의 적용순서가 다양하여 순서가 다르면 결과가 달라져 혼란을 야기한다. - 회전자유도가 3이지만 첫번째 회전축과 세번째 회전축이 거의 일치될 때 회전 자유도가 하나 감소하는 짐벌락 현상이 발생한다. - 회전을 오일러 각도로 표시하면 각 회전에 대한 오일러 각도가 유일하지 않다. - 두 오일러각도의 보간이 유일하지 않다.(보간경로의 문제) 이러한 단점을 보완하기 위해 쿼터니온을 사용한다. 사원수는 3차원에 적용하여 공간에서의 방향을 표현한다. 사원수의 장점 - 한 사원수는 하나의 4차원 벡터이고 3차원 공간에서의 한 방향을 표시 - 사원수는 단위벡터 - 사원수를 행렬로 또..

관리자 계정으로 만들기.

활성화 net user administrator /active:yes 비활성화 net user administrator /active:no

2010. 5. 7. 07:07

카메라 클래스 - 오일러

이번에는 오일러를 바탕으로 한 간단한 카메라 클래스를 만들었다. 카메라에서 중요한건 회전이다. 이 회전처리하는 부분을 잘 보도록 하자. 뷰행렬 x y z | rx ux lx 0 | V = | ry uy ly 0 | | rz uz lz 0 | |-pr -pu -pl 1 | void CameraEular::GetViewMatrix(D3DXMATRIX* vmat) { // right, up, look 벡터들를 모두 단위벡터로 정규화. D3DXVec3Normalize(&lookAt_, &lookAt_); D3DXVec3Cross(&up_, &lookAt_, &right_); // up D3DXVec3Normalize(&up_, &up_); D3DXVec3Cross(&right_, &up_, &lookAt_); ..

2010. 5. 5. 15:09

Depth Stencil ( orbit )

이 예제는 두가지 부분이 추가되었다. 하나는 간단한 행렬계산으로서 같은 오브젝트를 위치회전값을 조절하여 orbit로 만든 것이다. // 첫번째 상자가 스핀하도록 월드행렬을 갱신한다. static float t = 0.0f; t += timeDelta * (float)D3DX_PI * 0.5f; if (t > D3DX_PI*2.0f) t = 0.0f; D3DXMatrixRotationY( &matWorld1, t ); pkmatWorld->SetMatrix((float*)&matWorld1); // 두번째 상자가 원점을 중심으로 회전하도록 월드행렬을 갱신한다. D3DXMATRIX mScale; D3DXMatrixScaling( &mScale, 2.0f, 0.5f, 1.0f ); D3DXMATRIX mSpi..

2010. 5. 5. 14:23

육면체 렌더링

삼각형 렌더링에 인덱스 버퍼만 추가된 정도. 회전값을 계속 지정해 주기 위해 render에 쉐이더 버퍼 값을 갱신한다. fx matrix matWorld; matrix matView; matrix matProjection; VS_Output VS( float4 pos : POSITION, float4 color : COLOR ) { VS_Output output = (VS_Output)0; output.pos = mul( pos, matWorld ); output.pos = mul( output.pos, matView ); output.pos = mul( output.pos, matProjection ); output.color = color; return output; } 이정도가 추가된 전부.

2010. 5. 5. 13:05

삼각형 렌더링

전의 삼각형 렌더링 예제에서는 정점쉐이더가 입력정점의 위치좌표를 그대로 리턴하였는데 이는 정점의 위치가 이미 클립공간에서의 위치일 경우에만 유효하다. 일반적으로 입력정점의 위치가 로컬공간이므로 정점쉐이더에서 이를 클립공간으로 변환해 주어야 한다. D3DXMATRIX matProjection; ID3D10EffectMatrixVariable* pkmatProjectionVariable = NULL; D3DXMatrixPerspectiveFovLH( &matProjection, (float)D3DX_PI * 0.5f, (float)SCREEN_WIDTH / (float)SCREEN_HEIGHT, 1.0f, 1000.0f ); // 상수버퍼 변수들을 얻는다. pkmatProjectionVariable = pk..