博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL 3D矩阵的位移、缩放变换
阅读量:6819 次
发布时间:2019-06-26

本文共 1711 字,大约阅读时间需要 5 分钟。

class wcPt3D {public:	GLfloat x, y, z;};typedef GLfloat Matrix4x4[4][4];// 打印矩阵void printMatrix4x4(Matrix4x4 mat){	printf("[");	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			printf("%.2f, ", mat[row][col]);		}		printf("\n");	}	printf("]\n");}// 转置矩阵void matrix4x4Transpose(Matrix4x4 mat){	Matrix4x4 mat_transp;	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			mat_transp[col][row] = mat[row][col];		}	}	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			mat[row][col] = mat_transp[row][col];		}	}}// 初始化为单位矩阵void matrix4x4SetIdentity(Matrix4x4 &mat){	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			mat[row][col] = (row == col);		}	}}/*	四阶矩阵相乘并将结果保存到mat2*/void matrix4x4PreMultiply(Matrix4x4 mat1, Matrix4x4 mat2){	Matrix4x4 mat_ret;	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			GLfloat sum = 0;			for (int i = 0; i < 4; ++i)			{				sum += mat1[row][i] * mat2[i][col];			}			mat_ret[row][col] = sum;		}	}	for (int row = 0; row < 4; ++row)	{		for (int col = 0; col < 4; ++col)		{			mat2[row][col] = mat_ret[row][col];		}	}}// 位移void translate3D(Matrix4x4 mat, const GLfloat tx,const GLfloat ty,const GLfloat tz){	Matrix4x4 trans_mat;	matrix4x4SetIdentity(trans_mat);	trans_mat[0][3] = tx;	trans_mat[1][3] = ty;	trans_mat[2][3] = tz;	matrix4x4PreMultiply(trans_mat, mat);}// 缩放void scale3D(Matrix4x4 mat, const GLfloat sx, const GLfloat sy, const GLfloat sz){	Matrix4x4 mat_scale;	matrix4x4SetIdentity(mat_scale);	mat_scale[0][0] = sx;	mat_scale[1][1] = sy;	mat_scale[2][2] = sz;	matrix4x4PreMultiply(mat_scale, mat);}

 

转载于:https://www.cnblogs.com/paralysis/p/10864675.html

你可能感兴趣的文章
Linux下的两个经典宏定义 转
查看>>
报错stale element reference: element is not attached to the page document结局方案
查看>>
【感悟】——人生路,昂首走
查看>>
Testbench
查看>>
推荐系统
查看>>
HoloLens | 世界的每一次变化,其实都提前打好了招呼
查看>>
seq命令
查看>>
线性表接口的实现_Java
查看>>
利用安卓手机搭建WEB服务器
查看>>
小巧玲珑:机器学习届快刀XGBoost的介绍和使用
查看>>
intellij开发安卓与genymotion配合
查看>>
jmeter大神博客笔记
查看>>
java.lang.NoClassDefFoundError: javax/annotation/Priority
查看>>
springmvc-mvc:resource标签使用
查看>>
Ubuntu 16.04安装IntelliJ IDEA时快捷键冲突设置
查看>>
Ubuntu界面重新安装图形界面
查看>>
去哪儿网支付系统架构演进
查看>>
Spring框架最简单的定时任务调用
查看>>
Spring 调度任务@scheduled学习总结
查看>>
mybatis配置进阶
查看>>