Loading...
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..

2010. 5. 2. 23:43

sprite 출력

2d sprite 출력 스프라이트 생성 ID3DX10Sprite* pkSprite; D3DX10CreateSprite(pkDevice, 64, &pkSprite); 이미지 로드 D3D10ShaderResourceView* pkTextureView = NULL; D3DX10CreateShaderResourceViewFromFile(pkDevice, L"G:/MProject/graphics/BackImg.jpg", NULL, NULL, &pkTextureView, NULL); 스프라이트 설정 구조체 D3DX10_SPRITE spriteDesc; spriteDesc.matWorld = W; spriteDesc.pTexture = pkTextureView; spriteDesc.TexCoord = D3DXVECT..

2010. 5. 2. 18:32

폰트 출력

회사에서도 맨날 폰트하는데....죽겠구만!!!!!! 폰트를 쓰는건 여러가지 방법이 있다. 1. CDXUTTextHelper의 사용 이 방식은 dxut에서 사용하는 방식이다. // 폰트의 생성 V_RETURN( D3DX10CreateFont( pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial", &g_pFont10 ) ); V_RETURN( D3DX10CreateSprite( pd3dDevice, 512, &g_pSprite10 ) ); g_pTxtHelper = new CDXUTTextHelper( g_pFont9, g_pSp..