Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Source/Process.c
/****************************/ |
/* PROCESS.C */ |
/* By Brian Greenstone */ |
/****************************/ |
/****************************/ |
/* EXTERNALS */ |
/****************************/ |
#include <QD3D.h> |
#include <QD3DGeometry.h> |
#include <QD3DGroup.h> |
#include <QD3DMath.h> |
#include <QD3DView.h> |
#include <QD3DGroup.h> |
#include <QD3DTransform.h> |
#include <QD3DStorage.h> |
#include "myglobals.h" |
#include "misc.h" |
#include "process.h" |
#include "qd3d_support.h" |
extern float gFramesPerSecond; |
/****************************/ |
/* PROTOTYPES */ |
/****************************/ |
static void InitModelWindow(void); |
static void BuildTestModel(void); |
static void CreateMyFogStyle(void); |
/****************************/ |
/* CONSTANTS */ |
/****************************/ |
#define MODEL_WIND_ID 400 |
#define MY_HITHER 10 |
#define MY_YON 120 |
/*********************/ |
/* VARIABLES */ |
/*********************/ |
WindowPtr gModelWindow = nil; |
QD3DSetupOutputType gModelViewInfo; |
TQ3Object gModelGroup = nil; |
TQ3GroupObject gBaseGroup = nil; |
TQ3AttributeSet gTextureAttr; |
TQ3Matrix4x4 gTransformMatrix; |
TQ3Object gTransformObject = nil; |
TQ3FogStyleData gFogData; |
TQ3StyleObject gFogStyleObject = nil; |
TQ3ColorARGB gClearColor = {1,1,1,1}; |
#pragma mark ========INITIALIZATION STUFF========= |
/******************** INIT TEST ************************/ |
void InitTest(void) |
{ |
/* INIT THE WINDOW */ |
InitModelWindow(); |
/* CREATE THE TEST MODEL */ |
BuildTestModel(); |
/* CREATE DISPLAY GROUP */ |
gBaseGroup = Q3DisplayGroup_New(); // make display group |
Q3Matrix4x4_SetIdentity(&gTransformMatrix); |
gTransformObject = Q3MatrixTransform_New(&gTransformMatrix); // make transform object |
Q3Group_AddObject(gBaseGroup, gTransformObject); // add transform to group |
Q3Group_AddObject(gBaseGroup, gFogStyleObject); // add fog to it |
Q3Group_AddObject(gBaseGroup, gModelGroup); // add geometry to group |
/* DRAW THE WINDOW */ |
DrawModelWindow(); |
} |
/************** INIT MODEL WINDOW *******************/ |
static void InitModelWindow(void) |
{ |
QD3DSetupInputType viewDef; |
TQ3Point3D cameraFrom = { 0,0, 100 }; |
TQ3Point3D cameraTo = { 0, 0, 0 }; |
TQ3Vector3D cameraUp = { 0.0, 1.0, 0 }; |
TQ3ColorRGB ambientColor = { 1.0, 1.0, 1.0 }; |
TQ3ColorRGB fillColor = { 0.0, 1.0, 1.0 }; |
TQ3Vector3D fillDirection1 = {1, -.3, -1 }; |
TQ3Vector3D fillDirection2 = { -1, -.1, -.2 }; |
/* CREATE THE WINDOW */ |
gModelWindow = GetNewCWindow(MODEL_WIND_ID, nil,MOVE_TO_FRONT); |
if (gModelWindow == nil) |
DoFatalAlert("\pWhere did the GameWindow window go?"); |
SetPort((GrafPtr)gModelWindow); |
/***********************/ |
/* SET QD3D PARAMETERS */ |
/***********************/ |
viewDef.view.displayWindow = gModelWindow; |
viewDef.view.rendererType = kQ3RendererTypeInteractive; |
viewDef.view.clearColor = gClearColor; |
viewDef.view.paneClip.left = 0; |
viewDef.view.paneClip.right = 0; |
viewDef.view.paneClip.top = 0; |
viewDef.view.paneClip.bottom = 0; |
viewDef.styles.interpolation = kQ3InterpolationStyleVertex; |
viewDef.styles.backfacing = kQ3BackfacingStyleBoth; |
viewDef.styles.fill = kQ3FillStyleFilled; |
viewDef.styles.illuminationType = kQ3IlluminationTypeLambert; |
viewDef.camera.from = cameraFrom; |
viewDef.camera.to = cameraTo; |
viewDef.camera.up = cameraUp; |
viewDef.camera.hither = MY_HITHER; |
viewDef.camera.yon = MY_YON; |
viewDef.camera.fov = 1.0; |
viewDef.lights.ambientBrightness = .1; |
viewDef.lights.ambientColor = ambientColor; |
viewDef.lights.numFillLights = 1; |
viewDef.lights.fillDirection[0] = fillDirection1; |
viewDef.lights.fillDirection[1] = fillDirection2; |
viewDef.lights.fillColor[0] = fillColor; |
viewDef.lights.fillColor[1] = fillColor; |
viewDef.lights.fillBrightness[0] = 1.1; |
viewDef.lights.fillBrightness[1] = 0.7; |
QD3D_SetupWindow(&viewDef, &gModelViewInfo); |
/* CREATE FOG STYLE OBJECT */ |
CreateMyFogStyle(); |
} |
/******************* CREATE MY FOG STYLE OBJECT *****************/ |
static void CreateMyFogStyle(void) |
{ |
/* SET MY PARAMETERS */ |
gFogData.state = kQ3On; // fog is on |
gFogData.mode = kQ3FogModeLinear; // fog is linear |
gFogData.fogStart = 60; // start @ front |
gFogData.fogEnd = MY_YON; // end in back |
gFogData.density = 1.0; // goes totally foggy at back |
gFogData.color = gClearColor; // fog color is same as clear color |
/* MAKE NEW OBJECT */ |
gFogStyleObject = Q3FogStyle_New(&gFogData); |
if (gFogStyleObject == nil) |
DoFatalAlert("\pCreateMyFogStyle: Q3FogStyle_New failed!"); |
} |
/********************* BUILD TEST MODEL **************************/ |
static void BuildTestModel(void) |
{ |
TQ3TriMeshData myTriMeshData; |
TQ3TriMeshAttributeData vertexAttribs[3],faceAttribs; |
TQ3Point3D points[3] = |
{ |
0,35,0, |
-35,-35,0, |
35,-35,0 |
}; |
TQ3Vector3D vertexNormals[3] = |
{ |
0,0,1, |
0,0,1, |
0,0,1 |
}; |
TQ3Vector3D faceNormals[1] = |
{ |
0,0,1 |
}; |
TQ3Param2D uvArray[3] = |
{ |
.5,1, |
0,0, |
1,0 |
}; |
TQ3TriMeshTriangleData triangles[1] = |
{ |
0,1,2 |
}; |
TQ3SurfaceShaderObject texture; |
/* FIRST LOAD THE TEXTUREMAP */ |
texture = QD3D_GetTextureMap(128,nil); |
gTextureAttr = Q3AttributeSet_New(); |
Q3AttributeSet_Add(gTextureAttr, kQ3AttributeTypeSurfaceShader, &texture); |
/* BUILD MAIN TRIMESH DATA STRUCTURE */ |
myTriMeshData.triMeshAttributeSet = gTextureAttr; |
myTriMeshData.numTriangles = 1; |
myTriMeshData.triangles = &triangles[0]; |
myTriMeshData.numTriangleAttributeTypes = 1; |
myTriMeshData.triangleAttributeTypes = &faceAttribs; |
myTriMeshData.numEdges = 0; |
myTriMeshData.edges = nil; |
myTriMeshData.numEdgeAttributeTypes = 0; |
myTriMeshData.edgeAttributeTypes = nil; |
myTriMeshData.numPoints = 3; |
myTriMeshData.points = &points[0]; |
myTriMeshData.numVertexAttributeTypes = 1; |
myTriMeshData.vertexAttributeTypes = &vertexAttribs[0]; |
/* CALCULATE BOUNDING BOX */ |
Q3BoundingBox_SetFromPoints3D(&myTriMeshData.bBox, &points[0], 3, sizeof(TQ3Point3D)); |
/* CREATE FACE ATTRIBUTES */ |
faceAttribs.attributeType = kQ3AttributeTypeNormal; |
faceAttribs.data = &faceNormals[0]; |
faceAttribs.attributeUseArray = nil; |
/* CREATE VERTEX ATTRIBUTES */ |
vertexAttribs[0].attributeType = kQ3AttributeTypeSurfaceUV; |
vertexAttribs[0].data = &uvArray[0]; |
vertexAttribs[0].attributeUseArray = nil; |
/* MAKE THE TRIMESH GEOMETRY OBJECT */ |
gModelGroup = Q3TriMesh_New(&myTriMeshData); |
if (gModelGroup == nil) |
DoFatalAlert("\pQ3TriMesh_New failed!"); |
} |
#pragma mark =========UPDATING============ |
/*************** DO MODEL WINDOW NULL EVENT **********************/ |
void DoModelWindowNullEvent(void) |
{ |
TQ3Matrix4x4 m; |
/* ROTATE THE GEOMETRY */ |
QD3D_CalcFramesPerSecond(); |
Q3Matrix4x4_SetRotate_XYZ(&m,0.4/gFramesPerSecond,0.5/gFramesPerSecond,0); |
Q3Matrix4x4_Multiply(&m,&gTransformMatrix,&gTransformMatrix); |
/* UPDATE THE MATRIX */ |
Q3MatrixTransform_Set(gTransformObject,&gTransformMatrix); |
/* REDRAW IT */ |
DrawModelWindow(); |
} |
/******************* DRAW MODEL WINDOW *********************/ |
// |
// Calls the support function QD3D_DrawScene. |
// It passes the view info and a pointer to the game draw callback. |
// |
void DrawModelWindow(void) |
{ |
QD3D_DrawScene(&gModelViewInfo,(void *)SubmitFogAndGeometry); |
} |
/*************** SUBMIT FOG AND GEOMETRY ******************/ |
void SubmitFogAndGeometry(QD3DSetupOutputType *viewInfo) |
{ |
// Q3Style_Submit(gFogStyleObject,viewInfo->viewObject); // submit the fog style |
// Q3FogStyle_Submit(&gFogData,viewInfo->viewObject); // submit fog in immediate mode |
Q3Object_Submit(gBaseGroup,viewInfo->viewObject); // submit the geometry |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14