분류 전체보기
-
4.N-way탄프로그래밍/API 프로그래밍 2014. 4. 19. 20:49
n-way탄을 발사하기 위해서는 먼저 중심이 되는 탄환의 속도를 정한 후, 그 속도 벡터를 중심선의 좌우로 회전시킨 것을 다른 탄환의 속도 벡터로 합니다. 중심이 되는 탄환의 속도 벡터(vx0,vy0) 이라고 하면, 이것을 0만큼 회전시킨 속도 벡터 (vx,vy)를 구할수 있습니다. 또한 cos함수 대신에 cosf함수를, sin함수 대신에 sinf함수를 사용할 수도 있습니다. void RotateVelocity( float theta, // 회전 각도 float vx0, float vy0, // 원래 속도 float& vx, float& vy // 회전후의 속도 ) { // theta를 라디안으로 변환하여 cos과 sin값을 구하기: // M_PI는 원주율. float rad=M_PI/180*theta;..
-
3.테이블을 이용한 방향탄프로그래밍/API 프로그래밍 2014. 4. 19. 19:18
16방향으로 날아가는 탄환의 예 각 방향에 해당하는 탄환의 속도 벡터는 다음과 같다.{ 3, 0},{ 3, 1},{ 2, 2},{ 1, 3}, { 0, 3},{-1, 3},{-2, 2},{-3, 1}, {-3, 0},{-3,-1},{-2,-2},{-1,-3}, { 0,-3},{ 1,-3},{ 2,-2},{ 3,-1}테이블을 이용하는 방법의 이점은 단순함에 있습니다. 문제는 탄환을 발사하는 방향이 8방향혹은 16방향 등으로 제한된다는 점과 방향에 따라 미묘하게 탄환의 속도가 달라지는 점 , 속도 벡터의 테이블을 별도로 준비해야 한다는 점이 있습니다. 옛날에는 이 방법을 사용하는 게임도 많이 있었지만, 이렇게 해서는 요즘 게임처럼 세세한 탄막을 만들어 내기가 힘듭니다.실수형을 사용하는 경우에 비해 아무래도 ..
-
2.방향탄프로그래밍/API 프로그래밍 2014. 4. 19. 14:00
조준탄과는 달리 메인 캐릭터를 노리는 것이 아니라 임의의 방향을 향해서 날아가는 탄환을 말합니다. 이러한 탄환을 방향탄이라고 부릅니다. 방향탄은 대포가 회전하면서 탄환을 발사하는 장면 등에서 사용됩니다. #include void InitDirectedBullet( float ex, float ey, // 적의 좌표 float& x, float& y, // 탄의 좌표 float& vx, float& vy, // 탄의 속도벡터 float speed, // 탄의 속도 float theta // 발사각도 ) { // 탄의 좌표를 설정하기 x=ex; y=ey; // speed의 속도로 각도 theta 방향으로 날아가는 탄의 속도벡터(vx,vy)를 구하기: // M_PI는 원주율 vx=cos(M_PI/180*the..
-
1. 조준탄프로그래밍/API 프로그래밍 2014. 4. 19. 12:53
적기가 발사하는 탄환의 종류에는 여러가지가 있지만 가장 일반적인 것은 메인 캐릭터를 향해 날아오는 탄환으로서 거의 모든 슈팅 게임에서 볼수 있습니다. 이러한 탄환을 '조준탄'이라고 부릅니다. void CBullet::InitAimingBullet( int mx, int my, /* 메인 캐릭터의 위치 */ int ex, int ey, /* 적의 좌표 */ int speed, /* 탄의 속도 */ int& x, int& y, /* 탄의 좌표 */ int& vx, int& vy /* 탄의 속도 */ ) { // 탄의 좌표를 설정하기 x=ex; y=ey; // 목표까지의 거리 d를 구하기 float d=sqrt(float(mx-ex)*float(mx-ex)+float(my-ey)*float(my-ey)); /..
-
3. 뷰 행렬프로그래밍/3D게임프로그래밍 2014. 4. 16. 03:14
로컬 좌표 계의 위치로 설정된 정점은 장면 연출을 위해서 먼저 월드 행렬을 통해서 월드 변환을 합니다. 다음으로 카메라가 정의된 카메라 공간으로 변환하는데 이 변환을 뷰 변환이라 하고 이 때 정점의 변환에 적용되는 행렬을 뷰 행렬 이라 합니다. 뷰 행렬은 카메라의 위치, 카메라가 보고 있는 지점, Up벡터를 입력 받아서 만들어 집니다.보통 카메라의 위치를 Eye벡터라 하고, 카메라가 보고 있는 지점을 Look 벡터라 합니다. 뷰 행렬을 만들기 위해서 먼저 카메라의 시선 방향을 설정하는데 이것을 카메라의 z 축으로 설정합니다. 이 z 축과 Up 벡터를 이용해서 카메라의 x 축 벡터, 카메라의 y 축 벡터를 다음과 같이 만듭니다. Zaxis = 카메라가 보고 있는 지점 위치(Look) - 카메라의 위치 (E..
-
2. 카메라 클래스프로그래밍/3D게임프로그래밍 2014. 4. 16. 01:50
카메라 클래스에서 가장 중요한 멤버 변수는 뷰 변환에 대한 뷰 행렬 , 투영 변환에 대한 투영 행렬입니다. 카메라 클래스는 화면과 카메라에 대한 정보를 입력 받아 이둘의 행렬을 만드는 것이 주 임무라 하겠습니다.뷰 행렬을 만들기 위해서 카메라의 위치 (Eye vector), 카메라가 보고 있는 지점(Look Vector), 그리고 카메라의 업 벡터(Up Vector)가 필요한데 이들의 멤버 변수와 카메라를 생성하는데 필요한 Create() 함수 , 카메라의 뷰 행렬과 투영 행렬을 갱신하는 FrameMove()함수를 기본으로 하는 클래스를 다음과 같이 작성합니다. #pragma once class CCamera { protected: LPDIRECT3DDEVICE9 m_pDev; D3DMATRIX m_mt..
-
1. 카메라 기초프로그래밍/3D게임프로그래밍 2014. 4. 16. 01:14
정점은 월드 변환 (World Transfrom), 뷰 변환(View Transform), 정규 변환(Normalization Transform, 투영변환: Projection Transform) , 뷰포트(Viewport) 변환을 거쳐 2D픽셀로 바뀌게 됩니다. 카메라를 만드는 것은 정점의 뷰 변환과 투영 변환의 행렬을 만드는 것입니다. 카메라를 클래스로 만들고, 카메라 클래스의 인스턴스(Instance:객체)가 원하는 대로 동작을 하는 지테스트 하기 위해서 먼저 키보드와 마우스에 대한 Input Class, 그리고 화면에서의 위치를 적당히 표현하는 XYZ축에 대한 그리드(Grid) 가 필요합니다. 다음의 압축 파일은 게임 카메라를 만들기 위해서 인풋과 그리드가 포함되어 있는 코드 입니다. cam00_..