GPUPPUR̊ȒPȎg

1, GPUPPURĝɕKvȂ
1.1 Kvȃn[hEFA
CPU:x86n 32bit CPU
GPU:Geforce6V[YȏA܂RadeonX1300ȏ

1.2 GPUPPURڃvO̎sɕKvȃ\tgEFA
ΉOS:Windows XP܂Windows Vista
OpenGL2.0ȏA܂DirectX 9.0cȏ
PhysX SystemSoftware	Q:http://www.ageia.com

1.3 GPUPPURgăvOĴɕKvȃ\tgEFA
boost c++ library	http://boost.org/
glew܂glee
glew	http://glew.sourceforge.net/
glee	http://elf-stone.com/glee.php
DirectX SDK		http://www.microsoft.com/japan/msdn/directx/downloads.aspx
PhysX SDK		http://www.ageia.com
PhysX SDK_E[hɂ͏LTCgJҌTCgɐi݁Ao^KvB
JƂMicrosoft Visual Studio 2005Visual C++KvB

2, GPUPPURg߂̏
"1, GPUPPURĝɕKvȂ"ׂăCXg[AVisual C++gpł悤ɂB
\[XR[hincludefBNgVisual C++̃CN[hpXɒʂ
\[XR[hinclude/gpuppur/gpuppur/ppu/nxphysics.cppvWFNgɒǉāARpC悤ɂB

3, GPUPPUR̎g
GPUPPURɂGPUPPURayGPUPPURasĂ܂AGPUPPURay̎g܂B{IGPUPPURayGPUPPURas͎g͂قƂǓłB

3.1 GPUPPURg\[XR[hŕKvȃt@CCN[h
ȉ̍s\[XR[ḧԏɏĉB
#include <gpuppur/gpuppur/gpuppur.hpp>
#include <gpuppur/gpuppur/gpuppuray.hpp>
#include <gpuppur/gpuppur/gpuppuray_default_implement.hpp>

3.2 GPUPPURIuWFNg̐錾
GPUPPURayɂOpenGLDirect3D܂OpenGLg܂B
typedef gpuppur::gl_raytracer gpuppur_type;
gpuppur_type my_gpuppur;

3.3 GPUPPURIuWFNg̏
ȉGPUPPUR镶܂B
GPUPPUROɃEBhE쐬ĉB
܂AOpenGL̏sĉB
width, heightɂ̓EBhE̕AsNZPʂŎw肵܂B
initialize֐̖߂肪trueƐAfalseƎsӖ܂B

if
(
	my_gpuppur.initialize
	(
		width, height, NULL
	)
)
{
	std::cout<< "GPUPPUR" << std::endl;
}else
{
	std::cerr << "GPUPPUȐɎs_(OoO)^" << std::endl;
}

3.4 GPUPPUR3Df[^ǂݍ܂
create_mesh֐ɓǂݍ݂t@Cw肵܂B
ȉ̕@wave front`(gqobj)̃t@C3Df[^ǂݍ݂܂B

typename gpuppur_type::mesh my_mesh = my_gpuppur.create_mesh
(
	"my_favorite_model.obj"
);
if(!my_mesh)
{
	std::cerr << "3Df[^ǂݍ߂܂łBcO" << std::cout;
}else
{
	std::cout << "3Df[^ǂݍނƂł܂Bf炵I" << std::cout;
}


3.5 ǂݍ3Df[^\悤ɂ
create_instance֐ɐقǍ쐬bVw肵ăCX^X܂B
3Df[^͓ǂݍ񂾂ł͕\܂񂪁ACX^Xƕ\܂B
xǂݍ3Df[^͉xCX^X邱Ƃł܂B
2ڂ̈ɂ͕̂̈ʒuA3ڂɂ͕̂̐Fw肵܂B
vector3ƂGPUPPURŎgĂ3xNg^łB

typename gpuppur_type::instance3d my_instance = my_gpuppur.create_instance
(
	my_mesh,
	vector3(0.0f, 0.0f, -10.0f),	//GPUPPUR͉EWnȂ̂łȂJɉf邩
	vector3(0.9f, 0.8f, 0.7f)		//0.0~1.0̊ԂRGB̒lw
);

3.6 J̈ʒuAݒ肷
GPUPPURł͉EWngĂ邱Ƃ𓪂ɓăJ̈ʒuAw肵܂B

my_gpuppur.look_at
(
	vector3(0.0f, 0.0f, 0.0f),		//J̈ʒu_ɂB
	vector3(0.0f, 0.0f, -1.0f),		//J̌xNgŎw
	vector3(0.0f, 1.0f, 0.0f)		//J̏xNgŎw
);

3.7 ʂ֕\
process֐ŉʂɕ\܂B
ۂɂOpenGL̕`施߂𔭍sĂ邾Ȃ̂
̊֐̌ɂƉʂɕ\悤OpenGL̊֐ĂŉB

my_gpuppur.process();

3.8 }`𓮂
قǃCX^X̂̈ʒuAύX邱Ƃł܂B
set_orientation֐ɂ͕̂]悤3s3̍sw肵܂B
matrix3x3GPUPPURŎgĂ3s3̍s^łB

my_instance.set_position(vector3(1.0f, 0.0f, -10.0f));	//ʒuݒ
my_instance.set_orientation
(
	matrix3x3							//̂Y𒆐S180x]
	(	//̍s3̍sxNgŎw
		vector3(-1.0f, 0.0f, 0.0f),
		vector3(0.0f, 1.0f, 0.0f),
		vector3(0.0f, 0.0f, -1.0f)
	)
);

