출처: http://beforu.egloos.com/4401340



클라이언트에 대한 자료긴 하지만 좌절과 열정을 다시 불타 오르게 하는 PT.

클라이언트 지망하는 사람들에게 좋은 참고가 될거같습니다.

'Programming > etc.' 카테고리의 다른 글

[장영수] 게임 UI 구현에 관한글  (0) 2010.06.18

[김재진]3D그래픽스의 개념과 렌더링파이프라인

Programming/DirectX 2010. 5. 27. 19:32 Posted by 알 수 없는 사용자
http://allosha.tistory.com/9
일본 저자가 쓴걸 번역해서 올린거 같은데 렌더링 파이프라인에 대해서 자세하게 나왔으니 확인하시기 바랍니다.

'Programming > DirectX' 카테고리의 다른 글

[강민수] DirectX-기초수학  (0) 2010.06.10
[손동진] 빌보드 (Billboard)  (0) 2010.06.07
[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
[김재진] 3D 행렬  (1) 2010.05.24

[김재진]행렬의 곱셈 및 항등행렬 설명

Programming/DirectX 2010. 5. 27. 19:27 Posted by 알 수 없는 사용자

 행렬의 곱셈
   
 
행렬의 곱셈에서는 순서가 바뀌면 값도 바뀝니다. 위의 행렬 순서를 아래와 같이 바꾸면...

그래서 행렬 곱셈시에는 순서가 중요합니다.


 항등행렬  

  어떤 행렬에 항등행렬을 곱하면(단 차수가 동일할 것), 원래의 행렬값이 됩니다.
  A * I = A = I * A = A

  하지만 항등행렬은 행렬곱셈에서 봤던 것처럼 순서가 중요하지 않습니다.  순서가 바뀌어도 결과가 동일하기 때문이죠
  항등행렬이 되려면 n * n 과 같은 정사각형의 행렬이어야 하며, 대각선이 모두 1로 구성되어 있고, 나머지는 0으로 채워져 있다는 점입니다.  
 
  3차원 항등행렬을 보겠습니다.  
 

위의 행렬을 곱하는 순서에 관계없이 어떤 행렬에 곱셈을 할경우 동일한 결과가 나오는데 이를 항등행렬이라 합니다

출처 : http://eecs.tistory.com/entry/3D프로그래밍의-첫걸음-행렬

'Programming > DirectX' 카테고리의 다른 글

[손동진] 빌보드 (Billboard)  (0) 2010.06.07
[김재진]3D그래픽스의 개념과 렌더링파이프라인  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
[김재진] 3D 행렬  (1) 2010.05.24
DirectX-정점  (1) 2010.05.20

[손동진] 재질과 광원

Programming/DirectX 2010. 5. 27. 17:27 Posted by 알 수 없는 사용자
1. 재질
재질이란 메시(또는 물체)의 표면 상태를 말하는 것으로 빛이 물체의 표면에서 반사되어 변화된 뒤 사람의 눈에 들어오기까지의 과정을 수학적으로 모델링하기 위해서 사용하는 값들이다.

1.1 재질의 종류
  • 주변색 (ambient)
    • 광원의 위치와 무관하게 똑같은 양으로 모든 점에서 반사되는 색
  • 확산색 (diffuse)
    • 광원에서 반사될 때 출력되는 가장 주된 색
  • 반사색 (specular)
    • 특정한 방향으로만 반사되는 색. 광원의 위치와 카메라의 위치에 따라서 달라진다.
  • 방출색 (emissive)
    • 메시 표면에서 자체적으로 방출되는 색. 단, 이 빛이 다른 메시에 영향을 주지는 못 한다.

2. 광원의 종류
  • 주변 광원 (ambient light)
    • 3차원 공간 내에서 메시의 배치나 위치와는 전혀 상관없이 똑같은 양으로 모든 곳을 비추는 빛의 강도를 말한다. 방향, 위치가 없으며 색과 강도만이 존재한다.
  • 점 광원 (point light)
    • 직관적으로 가장 쉽게 생각할 수 있는 빛이다. 예를 들면, 백열전구를 생각하면 된다. 광원의 위치에 따라 빛의 강도가 달라진다.
  • 방향성 광원 (directional light)
    • 모든 광원의 방향이 하나의 방향을 갖는 것으로 완벽하지는 않지만 태양을 예로 들 수 있다. 광원의 위치는 상관 없고, 방향이 가장 중요한 요소다.
  • 점적 광원 (spot light)
    • 정해진 위치와 범위에만 비추는 특수한 조명을 말한다. 흔히 영화나 쇼무대에서 사용하는 스포트라이트 조명을 생각하면 된다.

이들 광원 모델은 D3D의 고정함수 파이프라인을 사용할 때만 유효하고, 정점 셰이더와 픽셀 셰이더를 사용하게 되면 모두 무용지물이 된다.



* 용책 요약 (p. 161)
  • Direct3D는 방향성 광원과 점 광원, 스포트 광원의 세 가지 광원 모델을 제공하며, 광원은 환경광(ambient)과 난반사광(diffuse), 정반사광(specular)의 세 가지 빛을 발산한다.
  • 펴면의 재질은 표면과 표면에 닿는 빛과의 상호작용을 정의한다. (반사 되거나 흡수될 빛의 양을 조정하여 표면의 컬러를 결정한다.)
  • 버텍스 법선은 버텍스의 방향을 정의하며 Direct3D는 버텍스 법선을 이용해 버텍스에 빛이 닿는 각도를 계산해낸다. 버텍스의 법선이 삼각형의 법선과 동일한 경우도 있지만 부드러운 표면(구체, 원통 등)을 표현하는 경우에는 그렇지 않은 경우도 있다.

[장영수]MFC-Cimage

Programming/MFC 2010. 5. 27. 17:11 Posted by 알 수 없는 사용자
cImage 사용하다가 막혀서 불펌 -ㅂ-ㅋㅋ

----

CImage는 MS에서 .net 이후부터 제공되는 그림 관련 클래스임.
이전 CBitmap의 bmp만 다루던거에서 좀더 확장하여 Png, Jpg, gif등 다양한 포멧을 지원한다.

기본적으로 사용은
CImage image; 로 한다.

CImage는 일종의 스케치북으로 볼수 있다.

사용법으로
CImage.Create(width, height, bpp); 로 새 스케치북을 만드거나
CImage.Load(CString("filename")); 으로 파일을 받아올수 있다.

이렇게 만들어진것중에서 자주 사용하는 매소드로
BitBlt ... : 기본 API 이다.
사용법은
CImage image;
image.Load("test.jpg");
image.BitBlt(pDC, 0, 0);

이러면 pDC의 0,0 지점에 test.jpg 그림이 복사된다.
좀더 응용하면

CImage a,b;
a.Load("test.jpg");
b.Create(a.GetWidth(), a.GetHeight(), a.GetBPP());
a.BitBlt(b.GetDC(), 0, 0);
b.ReleaseDC();

이렇게 하면 b에 a의 그림이 복사된다.
중요 포인트는 GetDC()를 해준뒤 바로 ReleaseDC를 해줘야 한다.

나머지 대충 사용하면되고..

GetPixel의 경우..
GetPixel과 SetPixel을 그대로 사용하는건 정말 CPU혹사시키는 짓이다.
다음 함수로 대체 하는것이 좋다

// SetPixel 대용
void PointColor(CImage *image, int x, int y, COLORREF c)
{
 // m_image.SetPixel() call ::SetPixel() which is too slow
 // since it has to work with all DCs.

 BYTE *p = (BYTE*)image->GetPixelAddress(x, y);
 if (m_nBitDepth == 16) {
  *(WORD *)p = (WORD)(((c&0xf80000) >> 19) | ((c&0xf800) >> 6) | ((c&0xf8) << 7));
 }
 else {
  *p++ = GetBValue(c);
  *p++ = GetGValue(c);
  *p = GetRValue(c);
 }
}

// GetPixel 대용
COLORREF GetPointColor(CImage *image, int x, int y)
{
 COLORREF result = *((COLORREF*)image->GetPixelAddress(x,y));

 // 메모리에서 가져올때, blue와 red위치가 바뀌어서 가져와진다
 BYTE r = GetBValue(result);
 BYTE g = GetGValue(result);
 BYTE b = GetRValue(result);
 
 return RGB(r,g,b);
}

[김재진] 3D 행렬

Programming/DirectX 2010. 5. 24. 01:31 Posted by 알 수 없는 사용자
// 1000 밀리초마다 한바퀴씩 (2*pi) 회전 애니메이션 행렬을 생성.
// (1.0f * D3DX_PI) 회전속도
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0;

// y축을 회전축으로 회전하는 행렬을 생성
D3DXMatrixRotationY(&matWorld, fAngle); 

 // 시점 좌표값 설정 d3dx9math.h 참조
 // 뷰 행렬을 정의하기 위해서 3가지의 값이 필요
 D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);   // 1. 눈의 위치를 0.0f, 3.0f, -5.0f - 카메라 좌표
 D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f); // 2. 눈이 바라보는 위치(0,0,0) - 사물의 위치
 D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);    // 3. 천정방향을 나타내는 상방 벡터 ( 0,1,0)

D3DXMATRIXA16 matView; // 좌표를 저장할 변수 클래스 선언

// 1,2,3의 값으로 뷰 행렬 생성
 D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);

D3DXMatrixLookAtLH 함수 설명 및 왼손계 설정구현
http://blog.naver.com/peroz/60057859092

// 프로젝션 행렬을 정의하기 위해서는 시야각(FOV=Field of View)과 종횡비(aspect ratio), 클리핑 평면의 값이 필요
 D3DXMATRIXA16 matProj;
 // matProj     : 값이 설정될 행렬
 // D3DX_PI / 4 : FOV(D3DX_PI/4 = 45도)
 // 1.0f        : 종횡비
 // 1.0f        : 근접 클리핑 평면(near clipping plane)
 // 1.0f        : 원거리 클리핑 평면(far clipping plane)
 // 투영 변환 행렬 함수
 D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);

 D3DXMatrixPerspectiveFovLH()함수와 D3DXMatrixLookAtLH()함수의 'LH' 는 왼손 좌표계를 의미한다.

위의 D3DXMatrixPerspectiveFovLH()함수와 D3DXMatrixLookAtLH() 함수를 각각  D3DXMatrixPerspectiveFovRH(), D3DXMatrixLookAtRH() 함수로 변경하면 회전하는 방향이 달라진다.


사용 lib
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"winmm.lib")

사용된 Header File
#include <Windows.h>
#include <MMSystem.h>
#include <d3dx9.h>
#include <d3d9.h>

'Programming > DirectX' 카테고리의 다른 글

[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
DirectX-정점  (1) 2010.05.20
DirectX-전체 화면 하는 방법  (1) 2010.05.19
스터디때 쓰일 발표 자료..  (1) 2010.05.17

DirectX-정점

Programming/DirectX 2010. 5. 20. 00:30 Posted by 리뷰하는 (게임)프로그래머_리프TV



재대로 파악한건지 아닌지 솔직히 잘 모르겠습니다만,

어느정도 맞는거? 같아요...

트랙백 걸어 놉니다.

스터디때 보아요.

'Programming > DirectX' 카테고리의 다른 글

[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
[김재진] 3D 행렬  (1) 2010.05.24
DirectX-전체 화면 하는 방법  (1) 2010.05.19
스터디때 쓰일 발표 자료..  (1) 2010.05.17

DirectX-전체 화면 하는 방법

Programming/DirectX 2010. 5. 19. 17:01 Posted by 리뷰하는 (게임)프로그래머_리프TV


D3DPRESENT_PARAMETERS 구조체를 보셨을 때

창모드로 하는방법은 쉬웠지만 전체화면을 할려면

생각보다 많은 작업이 필요 하더군요.

혹시 전체화면을 해보고 싶으신 분들은 참조하세요.

링크 걸어 놓을게요.
( 방문자를 1명이라도 늘리겠다는 더러운 속셈...은 .. 맞습니다.)

'Programming > DirectX' 카테고리의 다른 글

[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
[김재진] 3D 행렬  (1) 2010.05.24
DirectX-정점  (1) 2010.05.20
스터디때 쓰일 발표 자료..  (1) 2010.05.17

스터디때 쓰일 발표 자료..

Programming/DirectX 2010. 5. 17. 12:22 Posted by 리뷰하는 (게임)프로그래머_리프TV

발표 자료라고 말하기 힘들정도구요-_-;

그냥 스터디때 말로 할게요...

트랙백 걸어놔요.

'Programming > DirectX' 카테고리의 다른 글

[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
[김재진] 3D 행렬  (1) 2010.05.24
DirectX-정점  (1) 2010.05.20
DirectX-전체 화면 하는 방법  (1) 2010.05.19