home *** CD-ROM | disk | FTP | other *** search
- /****************************/
- /* POLYGON.C */
- /****************************/
-
-
- /****************************/
- /* EXTERNALS */
- /****************************/
-
- #include <qd3d.h>
- #include <QD3DGeometry.h>
- #include <QD3DSet.h>
- #include <QD3DView.h>
- #include <QD3DShader.h>
- #include <QD3DGroup.h>
- #include <QD3DRenderer.h>
- #include <QD3DAcceleration.h>
- #include <QD3DDrawContext.h>
-
- extern TQ3ViewObject gMyViewObject;
- extern TQ3StyleObject gMyStyleObject_Interpolation;
- extern TQ3StyleObject gMyStyleObject_Backfacing;
- extern TQ3StyleObject gMyStyleObject_Fillstyle;
- extern TQ3ShaderObject gMyShaderObject_IlluminationShader;
- extern TQ3ShaderObject gMyTextureShaderObject;
-
-
-
- /****************************/
- /* PROTOTYPES */
- /****************************/
-
- extern void DoFatalAlert(Str255 s);
-
- void DrawMyObjects(void);
- void MakeTexturedPolygonGroup(void);
-
-
- /****************************/
- /* CONSTANTS */
- /****************************/
-
-
- /*********************/
- /* VARIABLES */
- /*********************/
-
- TQ3GroupObject gMyPolygonGroup;
-
-
- /***************** MAKE TEXTURED POLYGON GROUP *****************/
- //
- // Creates a simple 4-sided polygon object which has
- // u/v attributes for the 4 vertices. The polygon and
- // the texture shader object are placed into a new group object.
- //
-
- void MakeTexturedPolygonGroup(void)
- {
- long i;
- TQ3GeometryObject polygonObj;
- TQ3GroupPosition myGroupPosition;
- TQ3PolygonData polygonData;
- TQ3Vertex3D vertices[4] = {-20,0,20,nil,
- 20,0,20,nil,
- 20,0,-20,nil,
- -20,0,-20,nil};
- TQ3AttributeSet attribs[4];
- float ambient = 1.0;
- TQ3Param2D uv[4] = {0,0,1,0,1,1,0,1};
-
-
- /* CREATE A GROUP */
-
- gMyPolygonGroup = Q3OrderedDisplayGroup_New();
- if (gMyPolygonGroup == nil)
- DoFatalAlert("\pCouldnt make the group!");
-
-
- /* ADD TEXTURE SHADER OBJECT TO GROUP */
-
- myGroupPosition = Q3Group_AddObject(gMyPolygonGroup, gMyTextureShaderObject);
- if ( myGroupPosition == nil )
- DoFatalAlert("\pQ3Group_AddObject failed!");
-
-
- /* CREATE VERTICES OF POLYGON & SET UV'S */
-
- for (i=0; i < 4;i++)
- {
- attribs[i] = Q3AttributeSet_New(); // make new attribute set
- Q3AttributeSet_Add(attribs[i], // add uv attribute
- kQ3AttributeTypeShadingUV, &uv[i]);
- vertices[i].attributeSet = attribs[i];
- }
-
- /* CREATE NEW POLYGON OBJECT */
-
- polygonData.numVertices = 4; // 4 sided polygon
- polygonData.vertices = vertices; // point to our array of vertices
- polygonData.polygonAttributeSet = nil; // polygon itself has no attribs
- polygonObj = Q3Polygon_New(&polygonData); // create it
-
-
- /* DISPOSE OF OTHER REFERENCES TO ATTRIBUTES */
-
- for (i=0; i < 4; i++)
- Q3Object_Dispose(attribs[i]);
-
- /* ADD POLYGON INTO GROUP */
-
- myGroupPosition = Q3Group_AddObject(gMyPolygonGroup, polygonObj);
- if ( myGroupPosition == nil )
- DoFatalAlert("\pQ3Group_AddObject failed!");
-
- /* DISPOSE OF REFERENCE TO POLYGON */
-
- Q3Object_Dispose(polygonObj);
- }
-
-
-
- /******************* DRAW MY OBJECTS *********************/
- //
- // Draws a frame of animation for the FlyThru window.
- //
-
- void DrawMyObjects(void)
- {
- TQ3Status myStatus;
- TQ3ViewStatus myViewStatus;
-
- /* START RENDERING */
-
- myStatus = Q3View_StartRendering(gMyViewObject); // start rendering
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Q3View_StartRendering Failed!");
-
- do
- {
- /* SET INTERPOLATION STYLE */
-
- myStatus = Q3Style_Submit(gMyStyleObject_Interpolation,gMyViewObject);
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Q3Style_Submit Failed!");
-
- /* SET BACKFACING STYLE */
-
- myStatus = Q3Style_Submit(gMyStyleObject_Backfacing,gMyViewObject);
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Q3Style_Submit Failed!");
-
-
- /* SET FILL STYLE */
-
- myStatus = Q3Style_Submit(gMyStyleObject_Fillstyle, gMyViewObject);
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Q3Style_Submit Failed!");
-
-
- /* SET SHADER TO USE */
-
- myStatus = Q3Shader_Submit(gMyShaderObject_IlluminationShader, gMyViewObject);
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Q3Shader_Submit Failed!");
-
-
- /* DRAW THE POLYGON OBJECT */
-
- myStatus = Q3DisplayGroup_Submit(gMyPolygonGroup,gMyViewObject);
- if ( myStatus == kQ3Failure )
- DoFatalAlert("\p Drawing Mesh Failed!");
-
-
- /* SEE IF DONE */
-
- myViewStatus = Q3View_EndRendering(gMyViewObject);
-
- } while ( myViewStatus == kQ3ViewStatusRetraverse );
- }
-
-
-
-