头文件

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语言做出3D效果的程序,3D数学库的简单实现(C语言)相关推荐

  1. Unity 工具 之 VText 简单快速实现 文字 3D 效果,VText 的导入设置和简单使用(可支持中文字体)

    Unity 工具 之 VText 简单快速实现 文字 3D 效果,VText 的导入设置和简单使用(可支持中文字体) 目录 Unity 工具 之 VText 简单快速实现 文字 3D 效果,VText ...

  2. 怎么用c语言做出等妖三角形_初二数学培优,怎么用顶点坐标求三角形面积?割补法这样用很简单...

    点击右上角关注"陈老师初中数理化"分享学习经验,一起畅游快乐的学习生活. 根据顶点坐标求解三角形的面积是初二数学的重要知识点,本文就例题详细解析这类题型的解题思路,希望能给初二学生 ...

  3. c语言小游戏 精简_【原创】用非常简单的c语言自编的一个小游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 修改过后: #include #include void js(int); int qian = 1000; int x = 0; int main() ...

  4. Android Camera 3D效果

    版本:1.0 日期:2014.4.14 版权:© 2014 kince 转载注明出处 一.概念 在Android中要想实现3D效果,第一个想到的应该就是OpenGL ES,因为在很多基础教材中几乎都提 ...

  5. android 3d渲染动画效果吗,Android如何实现3D效果

    前言 前段时间读到一篇文章,作者通过自定义View实现了一个高仿小米时钟,其中的3D效果很是吸引我,于是抽时间学习了一下,现在总结出来,和大家分享. 正文 想要在Android上实现3D效果,其实并没 ...

  6. css立体3d效果动画,css3 实现动画,变换基点及3D效果~

    各位小伙伴 上次分享的爱心感觉如何呀~ 动画效果 首先,娜娜在这边给大家认个错,上次分享落下了一个东西,就是动画效果,没有动画是实现不了爱心一条一条的动作的. 虽然那个爱心源代码已经给大家了,只要复制 ...

  7. 3d服务器播放系统,3D立体电影放映系统

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 3D立体电影放映系统采用普通偏光式双机3D技术,播放3D左右格式的片源.常见三种双机放映的3D体验,依次为IMAX 3D.普通 ...

  8. 4行python代码做出打字机效果

    4行python代码做出打字机效果 文章目录 4行python代码做出打字机效果 前言 一.导入库 二.完整代码 前言 今天想用python做一个打字机的效果出来看看! 一.导入库 import py ...

  9. 详解c语言编程库题,详解C语言编程

    C语言作为编程语言,其诞生已经很早,但是在编程语言多样化的今天,C仍然高居TIOBE编程语言排行榜的第一位(2014年5月),而C++语言排位第四.而位居第二位的Java本身就是脱胎于C++语言,第三 ...

  10. uniapp 小程序左右滑动切换不同图片序列帧,实现3d效果

    uniapp 小程序左右滑动切换不同图片序列帧,实现3d效果 最近接了个新的需求,将多张序列帧图片,通过程序滑动加载不同的序列帧,给用户看到的效果就好像3d那样,360度顺逆时针旋转,一开始尝试了两种 ...

最新文章

  1. Rational Purify 使用及分析实例(转载)
  2. CloudStack的部署架构概览
  3. 动态生成类_springboot动态生成类属性
  4. 好书荐读:阿里达摩院算法专家领衔《深度学习与图像识别:原理与实践》
  5. c++ 字符串连接_C语言字符串操作总结大全(超详细)
  6. linux eth0 proxy arp,在interface vlan下敲no ip proxy-arp什么意思
  7. 在家办公,我比上班还累你信吗?
  8. [渝粤教育] 西南科技大学 程序设计语言VB 在线考试复习资料(2)
  9. Linux安装软件包时的“依赖关系树”算法(C#)
  10. 贴一篇以前写的产品推广旧文
  11. 谷歌Gmail注册方法
  12. I5 4590 台式机安装黑苹果最新版笔记
  13. 理解DCT与DST【一】:离散傅里叶变换
  14. Windows10卸载密钥导致win10未激活--解决
  15. 光电信息科学与工程学c语言吗,光电信息工程专业排名_光电信息科学与工程专业可以考什么专业的研究生...
  16. GBD数据库相关文献中的EAPC怎么算?
  17. 一文搞懂什么是GPA
  18. 小渔夫 | 一万多的椅子照样畅销全球,它是怎么做到的?
  19. 社交媒体2.0_社交媒体2.0:增强现实生活
  20. 归一化数字角频率_数字信号处理中的归一化频率

热门文章

  1. 实用小程序,快速求A类不确定度(物理实验),保留六位
  2. TI DSP 28335 自学之路,到此止步
  3. WiFi密码破解之Aircrack实战演示
  4. 基于RV1126平台imx291分析 --- 运行设备(VIDIOC_STREAMON)
  5. Windows下安装PyQt5教程
  6. IP地址归属地那些事
  7. 【Morgan Stanley IKM在线测试】C++
  8. 数据库:候选码、主码、超码、外码、主属性、非主属性
  9. 数据中心运维管理方案
  10. 数学建模--层次分析法