Send a suggestion!

We're building a brand new version of the site, and we'd love to hear your ideas

Members

Technology Zones

IBM Learning Center

Articles

Hosted By

MaximumASP

Info

Rated
Read 37,617 times

Contents

Related Categories

Introduction to Direct 3D - Defining the Direct3D class

davepamn

Defining the Direct3D class

The constructor initializes the direct3D interfaces to NULL. It creates a Matrix Stack variable. Matrix Stacks allow the developer to create hierarchial transformation trees
by using push and pop methods. For the current matrix the developer call apply local transformations which rotate, scale, or translate from the objects local coordinate axis or the developer can elect to select tranformations relative from the parent matrix. All matrix multiplication is accumulative, so parent tranformations apply to the children.

  • The BuildSceneGraph,TraverseSceneGraph, and CleanupSceneGraph are used to build a hierarchial tree, traverse it and run mapped functions (DrawObject1,DrawObject2,DrawObject3), and cleanup the scenegraph when the base class is destroyed.
  • The InitializeEngine creates the Direct3d object, gets the current desktop display mode, create the direct3d device which allows control of video card resources.
  • The InitializeGeometry, InitializeGeometry2, and LoadTigerModel create data structures that contain vertex information. The vertex information is streamed to one of two vertex buffers used to by DrawObject1, DrawObject2, or DrawObject3.
  • The SetEnvironment method trues on Z buffering, enables Back Face Removal, and calls InitializeGeometry, InitializeGeometry2, and LoadTigerModel.
  • The Render method clears both the backbuffer and zbuffer; begins the scene; sets up the world, view, and project matrixes, and traverses the scenegraph; and ends the scene.

struct CUSTOMVERTEX
{
   D3DXVECTOR3 position; // The 3D position for the vertex
   D3DXVECTOR3 normal;   // The surface normal for the vertex
};

typedef struct CAMERA_STRUCT
{
   float x;
   float y;
   float z;
   float radians;
   float mStep;
}CAMERA_STRUCT_TYPE;

typedef struct TREENODE_STRUCT
{
   float m[16];
   char parent_key[30];
   char node_key[30];
   //void (*f)();
   //void (*engine)();
   struct TREENODE_STRUCT *sibling;
   struct TREENODE_STRUCT *child;
   struct TREENODE_STRUCT *most_recent_child;
}TREENODE_STRUCT_TYPE;


// Our custom FVF, which describes our custom vertex structure
//#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)

class D3DEngine
{

public:

   LPDIRECT3D8             g_pD3D; // Used to create the D3DDevice
   LPDIRECT3DDEVICE8       g_pd3dDevice; // Our rendering device
   LPDIRECT3DVERTEXBUFFER8 g_pVB; // Buffer to hold vertices
   LPDIRECT3DVERTEXBUFFER8 g_pVB2; // Buffer to hold vertices

   float m_swing;
   CAMERA_STRUCT_TYPE mCamera;
   TREENODE_STRUCT_TYPE* root;
   ID3DXMatrixStack* ppStack;


   LPD3DXMESH              g_pMesh;
   D3DMATERIAL8*           g_pMeshMaterials;
   LPDIRECT3DTEXTURE8*     g_pMeshTextures;
   DWORD                   g_dwNumMaterials;

public:
   D3DEngine::D3DEngine();
   D3DEngine::~D3DEngine();
   HRESULT InitializeEngine(HWND hWnd);
   void SetLightState(BOOL pState);
   void SetProjection();
   HRESULT InitializeGeometry();
   HRESULT InitializeGeometry2();
   void Render();
   void SetZBuffering(BOOL bFlag);
   void BackFaceRemoval(BOOL bFlag);
   void ReduceToUnit(D3DXVECTOR3 *vector);
   void CalculateNormal(D3DXVECTOR3 *vertex1, D3DXVECTOR3 *vertex2,D3DXVECTOR3 *vertex3,D3DXVECTOR3 *normal);
   void SetupLights();
   void PositionCamera();
   void CameraLeft();
   void CameraRight();
   void MoveCamera(float dStep);
   void AdvanceCamera();
   void RetreatCamera();
   //BOOL CreateCube(double x, double y, double z);
   void TraverseSceneGraph(TREENODE_STRUCT_TYPE *root);
   TREENODE_STRUCT_TYPE* Node(char *node_key);
   void AddChild(TREENODE_STRUCT_TYPE *parentNode, TREENODE_STRUCT_TYPE *childNode);
   void CleanSceneGraph(TREENODE_STRUCT_TYPE *root);
   void D3DEngine::BuildSceneGraph();
   HRESULT LoadTigerModel();
   void SetAmbientState(BOOL mFlag);
   void EnvironmentSetup();
   void CopperMaterial();
   void ChromeMaterial();
   void DrawObject1();
   void DrawObject2();
   void DrawObject3();
};

NishiSoft provides Part I of the Information Technology Project collaboration. Sign up and list your IT project tasks, assign task too friends, and get percent complete task. Part will include a work order system with NishiSoft acting as the middle man between software task order, verification of requirements meet and services delivered, and generation of the voucher for payment between parties.

Comments

  • headers

    Posted by josabraham on 02 Aug 2004

    Where can I find out the headers?

    #include "cdxinput.h"
    #include "dsnEngine.h"
    #include "music.h"

    Joseph