Click Here!
home account info subscribe login search My ITKnowledge FAQ/help site map contact us


 
Brief Full
 Advanced
      Search
 Search Tips
To access the contents, click the chapter and section titles.

Cutting Edge Direct 3D Programming
(Publisher: The Coriolis Group)
Author(s): Stan Trujillo
ISBN: 1576100502
Publication Date: 11/01/96

Bookmark It

Search this book:
 
Previous Table of Contents Next


The ShowRoom::CreateScene() Function

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


Previous Table of Contents Next


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.