앞에서 언급했던 내용에 대한 간단히 예제 프로그램입니다

방향키로 오브젝트를 움직일수 있습니다.

 

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 );
}