앞에서 언급했던 내용에 대한 간단히 예제 프로그램입니다
방향키로 오브젝트를 움직일수 있습니다.
dynamicObject.h
#pragma once #include#include class dynamicObject { public: dynamicObject(void); public: ~dynamicObject(void); bool Init(LPDIRECT3DDEVICE9 device); void Update(float dt); void Render(float dt); void SetForce(D3DXVECTOR3 newForce){ _Force = newForce; }; // 역학 float _Mass; // 질량 D3DXVECTOR3 _Location; // 위치 D3DXVECTOR3 _Velocity; // 속도 D3DXVECTOR3 _Acceleration; // 가속도 D3DXVECTOR3 _Force; // 힘 D3DXMATRIX _WorldMatrix; // 최종 결과 메트릭스 // DX LPDIRECT3DDEVICE9 _Device; LPD3DXMESH _Mesh; };
dynamicObject.cpp
#include "dynamicObject.h" dynamicObject::dynamicObject(void) { // 멤버 변수 초기화 _Mass = 1.0f; _Location = D3DXVECTOR3(0.0f, 0.0f, 0.0f); _Velocity = D3DXVECTOR3(0.0f, 0.0f, 0.0f); _Acceleration = D3DXVECTOR3(0.0f, 0.0f, 0.0f); _Force = D3DXVECTOR3(0.0f, 0.0f, 0.0f); D3DXMatrixIdentity(&_WorldMatrix); _Device = NULL; _Mesh = NULL; } dynamicObject::~dynamicObject(void) { } bool dynamicObject::Init(LPDIRECT3DDEVICE9 device) { assert (device != NULL); _Device = device; D3DXCreateSphere(_Device, 1.0f, 10, 10, &_Mesh, NULL); return true; } void dynamicObject::Update(float dt) { assert(_Mass != 0); _Acceleration = _Force / _Mass; _Velocity += _Acceleration * dt; _Location += _Velocity * dt; D3DXMatrixTranslation( &_WorldMatrix, _Location.x, _Location.y, _Location.z ); } void dynamicObject::Render(float dt) { D3DXMATRIX saveMatrix; _Device->GetTransform( D3DTS_WORLD, &saveMatrix ); _Device->SetTransform( D3DTS_WORLD, &_WorldMatrix ); _Mesh->DrawSubset(0); _Device->SetTransform( D3DTS_WORLD, &saveMatrix ); }
'Dev.Write' 카테고리의 다른 글
MFC Custom_Control 연습 (0) | 2010.01.15 |
---|---|
DX로 만든 첫번째 게임 프로젝트 (0) | 2010.01.08 |
물리 프레임의 기본 - 충돌(1) (0) | 2010.01.06 |
물리 프레임의 기본 – 회전 동역학 (0) | 2010.01.02 |
물리 프레임의 기본 - 선형 동역학 (0) | 2009.12.11 |