设为首页 加入收藏

TOP

3D数学库的简单实现(C语言)
2014-11-23 18:02:53 来源: 作者: 【 】 浏览:7
Tags:数学 简单 实现 语言

头文件

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

实现文件vmath.c

#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.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言函数返回值不能直接写数组 下一篇Objective-C 的 API 设计

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: