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.
IRS_Geometry.c
/******************************************************************************\ |
Module: IRS_Geometry.c |
Purpose: plug-in renderer for QD3D: geometry rendering |
Author: Sun-Inn Shih |
Copyright (C) 1993-96 Apple Computer, Inc. All rights reserved. |
\*****************************************************************************/ |
#include <QD3D.h> |
#include <QD3DGeometry.h> |
#include "IRS_Geometry.h" |
/* |
* IRS_Geometry_Triangle |
*/ |
TQ3Status IRS_Geometry_Triangle( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3TriangleData *pTriangleData) |
{ |
TQ3Point3D point3D; |
TQ3Point2D point2D[3]; |
float w; |
float scale = irsdata->scale; |
float center = irsdata->center; |
long j; |
/* local to Frustum */ |
float M00, M01, M02, M03; |
float M10, M11, M12, M13; |
float M20, M21, M22, M23; |
float M30, M31, M32, M33; |
M00 = irsdata->localToFrustum.value[0][0]; |
M01 = irsdata->localToFrustum.value[0][1]; |
M02 = irsdata->localToFrustum.value[0][2]; |
M03 = irsdata->localToFrustum.value[0][3]; |
M10 = irsdata->localToFrustum.value[1][0]; |
M11 = irsdata->localToFrustum.value[1][1]; |
M12 = irsdata->localToFrustum.value[1][2]; |
M13 = irsdata->localToFrustum.value[1][3]; |
M20 = irsdata->localToFrustum.value[2][0]; |
M21 = irsdata->localToFrustum.value[2][1]; |
M22 = irsdata->localToFrustum.value[2][2]; |
M23 = irsdata->localToFrustum.value[2][3]; |
M30 = irsdata->localToFrustum.value[3][0]; |
M31 = irsdata->localToFrustum.value[3][1]; |
M32 = irsdata->localToFrustum.value[3][2]; |
M33 = irsdata->localToFrustum.value[3][3]; |
/* trimesh data */ |
scale = irsdata->scale; |
center = irsdata->center; |
for( j = 0 ; j < 3 ; j ++) |
{ |
point3D = pTriangleData->vertices[j].point; |
point2D[j].x = point3D.x * M00 + point3D.y * M10 + point3D.z * M20 + M30; |
point2D[j].y = point3D.x * M01 + point3D.y * M11 + point3D.z * M21 + M31; |
w = point3D.x * M03 + point3D.y * M13 + point3D.z * M23 + M33; |
point2D[j].x = ( point2D[j].x / w ) * scale + center; |
point2D[j].y = ( point2D[j].y / w ) * scale + center; |
} |
fprintf(irsdata->filePtr, "%d %d moveto ", (long) point2D[0].x, (long) point2D[0].y); |
fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[1].x, (long) point2D[1].y); |
fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[2].x, (long) point2D[2].y); |
fprintf(irsdata->filePtr, "closepath\n" ); |
return kQ3Success; |
} |
/* |
* IRS_Geometry_Line |
*/ |
TQ3Status IRS_Geometry_Line( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3LineData *pLineData) |
{ |
return kQ3Success; |
} |
/* |
* IRS_Geometry_Point |
*/ |
TQ3Status IRS_Geometry_Point( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3PointData *pPointData) |
{ |
return kQ3Success; |
} |
/* |
* IRS_Geometry_Marker |
*/ |
TQ3Status IRS_Geometry_Marker( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3MarkerData *pMarkerData) |
{ |
return kQ3Success; |
} |
/* |
* IRS_Geometry_PixmapMarker |
*/ |
TQ3Status IRS_Geometry_PixmapMarker( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3PixmapMarkerData *pPixmapMarkerData) |
{ |
return kQ3Success; |
} |
#if 0 |
/* |
* IRS_Geometry_TM |
*/ |
TQ3Status IRS_Geometry_TM( |
TQ3ViewObject pView, |
irsData *irsdata, |
TQ3GeometryObject pGeom, |
TQ3TriMeshData *pTriMeshData) |
{ |
/* QD3D structures */ |
TQ3TriMeshTriangleData *trianglelist; |
TQ3Point3D point3D, *pointlist; |
TQ3Point2D point2D[3]; |
float w; |
float scale = irsdata->scale; |
float center = irsdata->center; |
long i, j, index; |
/* local to Frustum */ |
float M00, M01, M02, M03; |
float M10, M11, M12, M13; |
float M20, M21, M22, M23; |
float M30, M31, M32, M33; |
M00 = irsdata->localToFrustum.value[0][0]; |
M01 = irsdata->localToFrustum.value[0][1]; |
M02 = irsdata->localToFrustum.value[0][2]; |
M03 = irsdata->localToFrustum.value[0][3]; |
M10 = irsdata->localToFrustum.value[1][0]; |
M11 = irsdata->localToFrustum.value[1][1]; |
M12 = irsdata->localToFrustum.value[1][2]; |
M13 = irsdata->localToFrustum.value[1][3]; |
M20 = irsdata->localToFrustum.value[2][0]; |
M21 = irsdata->localToFrustum.value[2][1]; |
M22 = irsdata->localToFrustum.value[2][2]; |
M23 = irsdata->localToFrustum.value[2][3]; |
M30 = irsdata->localToFrustum.value[3][0]; |
M31 = irsdata->localToFrustum.value[3][1]; |
M32 = irsdata->localToFrustum.value[3][2]; |
M33 = irsdata->localToFrustum.value[3][3]; |
/* trimesh data */ |
trianglelist = pTriMeshData->triangles; |
pointlist = pTriMeshData->points; |
scale = irsdata->scale; |
center = irsdata->center; |
for(i=0;i<pTriMeshData->numTriangles; i++, trianglelist++) |
{ |
for( j = 0 ; j < 3 ; j ++) |
{ |
index = trianglelist->pointIndices[j]; |
point3D = pointlist[index]; |
point2D[j].x = point3D.x * M00 + point3D.y * M10 + point3D.z * M20 + M30; |
point2D[j].y = point3D.x * M01 + point3D.y * M11 + point3D.z * M21 + M31; |
w = point3D.x * M03 + point3D.y * M13 + point3D.z * M23 + M33; |
point2D[j].x = ( point2D[j].x / w ) * scale + center; |
point2D[j].y = ( point2D[j].y / w ) * scale + center; |
} |
fprintf(irsdata->filePtr, "%d %d moveto ", (long) point2D[0].x, (long) point2D[0].y); |
fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[1].x, (long) point2D[1].y); |
fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[2].x, (long) point2D[2].y); |
fprintf(irsdata->filePtr, "closepath\n" ); |
} |
return kQ3Success; |
} |
#endif |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14