|
|
![]() | |
|
|
|
To access the contents, click the chapter and section titles.
Cutting Edge Direct 3D Programming
The ShowRoom::CreateScene() FunctionIn order to construct the ShowRoom demo scene, the CreateScene() function loads 15 textures, each an image of the car rendered from a different angle. A mesh and a flat texture wrap are created, and the first texture is applied to the mesh. A callback function is used to apply subsequent textures to the mesh. Listing 5.7 is the CreateScene() function for the ShowRoom demo. Listing 5.7 The ShowRoomWin::CreateScene() function.
BOOL ShowRoomWin::CreateScene()
{
//-------- TEXTURES --------
HRSRC texture_id;
int t=0;
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE01),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE02),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE03),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE04),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE05),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE06),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE07),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE08),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE09),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE10),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE11),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE12),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE13),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE14),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
texture_id=FindResource( NULL, MAKEINTRESOURCE(IDR_TEXTURE15),
"TEXTURE" );
d3drm->LoadTextureFromResource( texture_id, &texture[t++]);
// ------- MESH BUILDER --------
D3DRMLOADRESOURCE resinfo;
resinfo.hModule=NULL;
resinfo.lpName=MAKEINTRESOURCE( IDR_BOXMESH );
resinfo.lpType="MESH";
LPDIRECT3DRMMESHBUILDER meshbuilder;
d3drm->CreateMeshBuilder( &meshbuilder );
meshbuilder->Load( &resinfo, NULL, D3DRMLOAD_FROMRESOURCE,
NULL, NULL );
meshbuilder->Scale( D3DVALUE(1), D3DVALUE(1), D3DVALUE(.1) );
ScaleMesh( meshbuilder, D3DVALUE(20) );
meshbuilder->SetPerspective( TRUE );
meshbuilder->SetQuality( D3DRMRENDER_FLAT );
meshbuilder->SetTexture( texture[0] );
//--------- WRAP --------
D3DRMBOX box;
meshbuilder->GetBox(&box);
D3DVALUE width=box.max.x-box.min.x;
D3DVALUE height=box.max.y-box.min.y;
LPDIRECT3DRMWRAP wrap;
d3drm->CreateWrap( D3DRMWRAP_FLAT, NULL,
D3DVALUE(0.0), D3DVALUE(0.0), D3DVALUE(0.0), // wrap origin
D3DVALUE(0.0), D3DVALUE(0.0), D3DVALUE(1.0), // z axis
D3DVALUE(0.0), D3DVALUE(1.0), D3DVALUE(0.0), // y axis
D3DVALUE(0.5), D3DVALUE(0.5), // origin
D3DDivide(1,width),D3DDivide(1,height), // scale
&wrap );
wrap->Apply( meshbuilder );
wrap->Release();
wrap=0;
//------- MESH ------
meshbuilder->CreateMesh( &mesh );
meshbuilder->Release();
meshbuilder=0;
//------- FRAME --------
LPDIRECT3DRMFRAME meshframe;
d3drm->CreateFrame( scene, &meshframe );
meshframe->AddVisual( mesh );
meshframe->SetRotation( scene,
D3DVALUE(0), D3DVALUE(1), D3DVALUE(0),
D3DVALUE(0.05) );
meshframe->AddMoveCallback( UpdateTexture, NULL );
meshframe->Release();
meshframe=0;
//-------- LIGHTS --------
LPDIRECT3DRMLIGHT dlight, alight;
d3drm->CreateLightRGB( D3DRMLIGHT_DIRECTIONAL,
D3DVALUE(1.0), D3DVALUE(1.0), D3DVALUE(1.0),
&dlight );
d3drm->CreateLightRGB( D3DRMLIGHT_AMBIENT,
D3DVALUE(1.0), D3DVALUE(1.0), D3DVALUE(1.0),
&alight );
LPDIRECT3DRMFRAME lightframe;
d3drm->CreateFrame( scene, &lightframe );
lightframe->SetOrientation( scene,
D3DVALUE(0), D3DVALUE(-1), D3DVALUE(1),
D3DVALUE(0), D3DVALUE(1), D3DVALUE(0));
lightframe->AddLight( dlight );
lightframe->AddLight( alight );
lightframe->Release();
lightframe=0;
dlight->Release();
dlight=0;
alight->Release();
alight=0;
//------ CAMERA ----------
d3drm->CreateFrame( scene, &camera );
camera->SetPosition( scene, D3DVALUE(0), D3DVALUE(0), D3DVALUE(-50));
d3drm->CreateViewport( device, camera, 0, 0,
device->GetWidth(), device->GetHeight(),
&viewport );
return TRUE;
}
|
|
Products | Contact Us | About Us | Privacy | Ad Info | Home
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. |