본문 바로가기

프로그래밍162

DirectX - 행렬(Matrices) Dx에서 3차원의 정점(Vertex)를 화면상의 모니터로 출력해 주기 위해서는 3가지의 행렬 변환이 필요 하다. 1. 월드 행렬 2. 뷰 행렬 3. 투영 행렬 월드 행렬의 경우에는 3D오브젝트의 로컬좌표를 3차원의 필드에 특정 위치에 뿌려 주기 위해서, ( 좀더 간단하게 말하면, 로컬 좌표를 월드 좌표로 변환 하는 작업 ) 뷰 행렬은 카메라를 셋팅한다고 생각하면 되는데, 뷰 행렬을 만들기 위해서는 추가적인 3개의 백터가 필요 하다. 카메라의 위치, 카메라가 바라보는 방향, 카메라의 Up벡터가 필요 하다. 마지막으로 투영 행렬은, 각각의 3D좌표들을 우리의 눈으로 보게 되는 2D로 변경하는 작업을 한다. 이런 작업을 렌더링 파이프라인이라고 하는데, 3D의 좌표를 모니터 화면에 뿌려주기 위한 작업이라고 보면.. 2010. 6. 14.
게임테크 2010 Keynote 발표영상 어찌 보면 참 지루할 지도 모르겠지만, 프로그래머라면, 저중에 한 부분을 내가 맡게 될 것인데, 난 어떤 부분을 만지면, 즐겁게 일 할 수 있을지, 고민해 볼 수 있을 법하다고 생각해서 링크를 걸어 둡니다. 사실 어찌 보면 그냥 단순한 게임 홍보라고 볼수 있을지도 모르겠네요. 2010. 5. 21.
DirectX-정점(vertex_삼각형 띄우기) 먼저 정점을 띄우기 위해서는 정점을 보관할 정점 버퍼가 필요 합니다. 정점 버퍼에 FVF(사용자 정의 정점 형식)를 사용하여 생성할 수 있습니다. 최초 생성한 정점 버퍼는 쓰레기 값이 들어가 있기 때문에, Lock함수를 사용하여 값을 넣을 수 있는 포인터를 가져 옵니다. 그 후 미리 지정해 놓은 정점 정보를 정점 버퍼에 저장합니다. HRESULT InitVB() { // 삼각형을 렌더링 하기 위해 3개의 정점 선언 CUSTOMVERTEX verticse[] = { { 150.0f,50.0f,0.5f,1.0f, 0xffff0000, }, { 250.0f,250.0f,0.5f,1.0f, 0xff00ff00, }, { 50.0f,250.0f,0.5f,1.0f, 0xff00ffff, }, }; // 점정 버퍼를.. 2010. 5. 19.
DirectX-전체 화면 하는 방법 디바이스를 생성할때 InitD3D함수에서. D3DPRESENT_PARAMETERS d3dpp;// 디바이스 생성을 위한 구조체 ZeroMemory( &d3dpp, sizeof( d3dpp ) );// 반드시 ZeroMemory() 함수로 구조체를 지워야 함 d3dpp.Windowed = TRUE;// 창모드로 생성 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;// 가장 효율 적인 SWAP 효과 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;// 현재 바탕화면 모드에 맞춰 후면 버퍼를 생성​ 다음과 같은 부분이 있었습니다. 전 그냥 Windowed 라는 부분을 FALSE로 해주면 전체화면이 되겠거니, 하였으나, 그렇지 않더군요. 단순히 전체화면을 하고 .. 2010. 5. 19.
MFC-ImageRgn( 이미지의 특정 부분에 특수효과 삽입하기 ) 이번에 살펴볼 것은, 이미지에 대해서 특정 부분만 보여준다거나(감춘다거나), 이미지특성을 반전시키는 것에 대해서 통합해서 살펴보자. 먼저 실행 화면은 다음과 같다. *이미지의 내용은 중요하지 않습니다. 이미지를 보면 특정 원안에 부분만 이미지가 보여지고(저 원은 움직일 수 있고 사이즈 조정이 가능합니다.) 원엔에 특정 사각형은 그 부분의 이미지가 반전되는 것을 확인 할 수 있다. 코드를 살펴보자. 먼저 View클래스에 멤버 변수로, public: CImage m_Image; CRect m_Rect;​ CImage와 Crect를 하나씩 생성해 주자. 그리고 WM_PAINT, WM_KEYDOWN, WM_CREATE 메시지를 각각 추가해 주자. // View::OnCreate // 최초에 Rect(원)의 범위.. 2010. 5. 19.
MFC-TextRgn( 게이지에 따른 텍스트 변화 ) 프로그램을 인스톨 할때라던가, 특정 게이지가 오르락 내리락 할 때 그 안에 글씨를 상황에 맞춰서 색상 변경을 해주어야 한다. 만약 저안에 글자가 처음엔 빨강색 이였다가, 빨간색 배경이 들어 오면 흰색으로 변경하는 거라고 치자. 그에 따른 소스코드를 파악해 가면서 프로그래머는 역시 사기꾼 이라는 생각이 드는 예제인거 같다. 먼저 실행 결과를 보자. 마치 게이지의 위치에 따라서 글자가 자연스럽게 색상이 변경하는 '것'처럼 보인다. 소스를 보자. CRect rectLeft = CRect( 50, 50, RgnSize, 150 ); CRect rectRight( RgnSize, 50, 450, 150 ); dc.FillSolidRect( &rectLeft, RGB( 192, 0, 0 ) ); dc.FillSol.. 2010. 5. 19.