DirectX
jjuiddong
- 문자열 출력
- DirectX sample의 Text3D 프로젝트를 참조하자.
- ID3DXSprite, ID3DXFont 를 잘 사용하는게 관건이다.
- <3D 공간상에 폰트 출력하기> 참조
- ID3DXSprite 객체를 사용해서 텍스쳐 출력하기.
g_TextSprite->Begin( D3DXSPRITE_ALPHABLEND); Matrix44 mm; mm.SetScale(Vector3(0.5, 0.3f, 0.3f)); g_TextSprite->SetTransform((D3DXMATRIX*)&mm); RECT rc2 = {0,0,1920,2000}; Vector3 center(00,00,0); Vector3 pos(0,0,0); g_TextSprite->Draw(g_Texture1, NULL, (D3DXVECTOR3*)¢er, (D3DXVECTOR3*)&pos, D3DCOLOR_RGBA(255,255,255,255)); g_TextSprite->End();
- 3D좌표를 투영된 2D좌표로 변환하기
- D3DXVec3Project() 함수를 이용하자.
PxTransform viewTM = m_Sample.getApplication().getCamera().getViewMatrix(); PxTransform tm = m_pRenderNode->getTransform(); tm.p.x = -tm.p.x; // change left hand axis D3DXMATRIX m; convertD3D9(m, tm); D3DXMATRIX mProj; D3DXMatrixPerspectiveFovLH(&mProj, 55.f * PxPi / 180.0f, 800.f/600.f, 0.1f, 10000.f); D3DXMATRIX mView; { D3DXVECTOR3 pos(-viewTM.p.x, viewTM.p.y, viewTM.p.z); PxVec3 lookAt = viewTM.p + (m_Sample.getApplication().getCamera().getViewDir() * 10.f); D3DXVECTOR3 target(-lookAt.x, lookAt.y, lookAt.z); D3DXMatrixLookAtLH(&mView, &pos, &target, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); } D3DVIEWPORT9 viewport; viewport.X = 0; viewport.Y = 0; viewport.Width = 800; viewport.Height = 600; viewport.MaxZ = 1; viewport.MinZ = 0; D3DXVECTOR3 v; D3DXVec3Project(&v, &D3DXVECTOR3(0,0,0), &viewport, &mProj, &mView, &m); if ((v.x < 0) || (v.y < 0) || (v.x > 800) || (v.y > 600)) return; m_Sample.getRenderer()->print(v.x, v.y, m_Name.c_str() );
- 라인출력
LPD3DXLINE m_line; D3DXCreateLine(device, &m_line); PxTransform viewTM = m_Sample.getApplication().getCamera().getViewMatrix(); D3DXMATRIX mProj; D3DXMatrixPerspectiveFovLH(&mProj, 55.f * PxPi / 180.0f, 800.f/600.f, 0.1f, 10000.f); D3DXMATRIX mView; { D3DXVECTOR3 pos(-viewTM.p.x, viewTM.p.y, viewTM.p.z); PxVec3 lookAt = viewTM.p + (m_Sample.getApplication().getCamera().getViewDir() * 10.f); D3DXVECTOR3 target(-lookAt.x, lookAt.y, lookAt.z); D3DXMatrixLookAtLH(&mView, &pos, &target, &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); } m_line->Begin(); D3DXMATRIX mat = mView * mProj; m_line->DrawTransform( &m_lineList.front(), m_lineList.size(), &mat, D3DCOLOR_XRGB(255, 0, 0)); m_line->End();
- 벡터와 면의 충돌 판정 함수
- D3DXIntersectTri() 함수를 이용하자.
- http://blog.naver.com/PostView.nhn?blogId=zeowing&logNo=90082927644
- 직접 짠 코드, IntersectTri() 함수를 참조하자.
- 3DMax Exporter
- panda exporter
- http://www.andytather.co.uk/panda/directxmax_downloads.aspx
- XNA math
- xna 와 c 로 짠 벡터 연산 비교 결과다. 결론은 그냥 c 로 짜자.
- SIMD 를 쓰면 조금 빨라진다는 내용의 글이지만, 실무에 대한 얘기가 아니다.
- Exporter
- Direct3D 9 dxerr.h 컴파일 에러
- DXUT.h 에 추가 (dxerr.h 파일을 참조하는 함수는 모두 무시한다)
- dxerr.h 인클루드 제거
#define DXTRACE_ERR(a,b) b #define DXTRACE_ERR_MSGBOX(a,b) b #define DXTrace(a,b,c,d,e) S_OK