頭文件
vmath.h
#ifndef _VMATH_H #define _VMATH_H #ifdef _cplusplus extern "C" { #endif typedef float Matrix44f[16]; void translate(Matrix44f M, float x, float y, float z); void scale(Matrix44f M, float x, float y, float z); void rotateX(Matrix44f M, float radian); void rotateY(Matrix44f M, float radian); void rotateZ(Matrix44f M, float radian); void rotateXYZ(Matrix44f M, float radian, float x, float y, float z); void perspectiveFrustum(Matrix44f M, float left, float right, float top, float bottom, float near, float far); //透視投影 void orthoPerspect(Matrix44f M, float left, float right, float top, float bottom, float near, float far); //正交投影 #ifdef _cplusplus } #endif #endif
#include#include #include #include "vmath.h" ///////////////////////////////////////////////////////////////////// // void translate(Matrix44f M, float x, float y, float z) { int i; for(i= 0; i <16; i++) M[i] =0; M[3] =x; M[7] =y; M[11] =z; M[15] =1.0; } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// void scale(Matrix44f M, float x, float y, float z) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =x; M[5] =y; M[10] =z; M[15] =1.0; } /////////////////////////////////////////////////////////////////////////// //// void rotateX(Matrix44f M, float radian) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =1.0; M[5] =cos(radian); M[6] =sin(radian); M[9] =-sin(radian); M[10] =cos(radian); M[15] =1.0; } //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// void rotateY(Matrix44f M, float radian) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =cos(radian); M[2] =-sin(radian); M[5] =1.0; M[8] =sin(radian); M[10] =cos(radian); M[15] =1.0; } ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// void rotateZ(Matrix44f M, float radian) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =cos(radian); M[1] =-sin(radian); M[4] =sin(radian); M[5] =cos(radian); M[10] =1.0; M[15] =1.0; } ///////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// void rotateXYZ(Matrix44f M, float radian, float x, float y, float z) { int i; for(i= 0; i <16; i++) M[i] =0; } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// void perspectiveFrustum(Matrix44f M, float left, float right, float top, float bottom, float near, float far) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =2*near/(right -left); M[2] =(right +left)/(right -left); M[5] =2*near/(top -bottom); M[6] =(top +bottom)/(top -bottom); M[10] =(near +far)/(near -far); M[11] =2*near*far/(near -far); M[14] =-1.0; } void orthoPerspect(Matrix44f M, float left, float right, float top, float bottom, float near, float far) { int i; for(i= 0; i <16; i++) M[i] =0; M[0] =2/(right -left); M[3] =(left +right)/(left -right); M[5] =2/(top -bottom); M[7] =(bottom +top)/(bottom -top); M[10] =2/(near -far); M[11] =(near +far)/(far -near); M[15] =1.0; }
編譯好的靜態庫可至我的資源下載,使用VC++2008.