00001 /*
00002 File: Geometry.cc
00003
00004 Function: Implements Geometry.h
00005
00006 Author(s): Andrew Willmott
00007
00008 Copyright: (c) 1995-2000, Andrew Willmott
00009
00010 Notes:
00011
00012 */
00013
00014 #include "gcl/Geometry.h"
00015 #include "gcl/VecUtil.h"
00016
00017 #include <stdarg.h>
00018
00019 IndexList Indexes(Int first, ...)
00020 {
00021 IndexList result;
00022 va_list ap;
00023
00024 va_start(ap, first);
00025
00026 while (first != IDX_END)
00027 {
00028 result.Append(first);
00029 first = va_arg(ap, int);
00030 }
00031
00032 va_end(ap);
00033
00034 return(result);
00035 }
00036
00037 Transform Align(const Vector &xAxis, const Vector &yAxis, const Vector &zAxis)
00038 {
00039 Transform align;
00040
00041 // Create a matrix which will align scene with the xAxis, yAxis, zAxis
00042 align[0] = MVector4(xAxis[0], yAxis[0], zAxis[0], 0.0);
00043 align[1] = MVector4(xAxis[1], yAxis[1], zAxis[1], 0.0);
00044 align[2] = MVector4(xAxis[2], yAxis[2], zAxis[2], 0.0);
00045 align[3] = vl_w;
00046 #ifdef VL_ROW_ORIENT
00047 align = trans(align);
00048 #endif
00049
00050 return(align);
00051 }
00052
00053 Transform AlignToDir(const Vector &dir)
00054 {
00055 Vector x, y, z;
00056
00057 if (sqrlen(dir) == 0.0)
00058 return(vl_I);
00059 y = norm(dir);
00060 x = norm(FindOrthoVector(y));
00061 z = cross(x, y);
00062
00063 return(Align(x, y, z));
00064 }
00065
00066
00067 #ifdef CL_TMPL_INST
00068 template class Array<Vector>;
00069 #endif