⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matpost.c

📁 Graphics Gems 源码 a collection of algorithms, programs, and mathematical techniques for the computer
💻 C
字号:
/*Efficient Post-Concatenation of Transformation Matricesby Joseph M. Cychoszfrom "Graphics Gems", Academic Press, 1990*/#include	<math.h>#include	"GGems.h"/*   	M4xform.c - Basic 4x4 transformation package. *									  *	Description:							  *	    M4xform.c contains a collection of routines used to perform   *	    direct post-concatenated transformation operations. *		  *									  *	Contents:							  *	    M4RotateX		Post-concatenate a x-axis rotation.	  *	    M4RotateY		Post-concatenate a y-axis rotation.	  *	    M4RotateZ		Post-concatenate a z-axis rotation.	  *	    M4Scale			Post-concatenate a scaling.		  *	    M4Translate		Post-concatenate a translation.		  *	    M4ZPerspective	Post-concatenate a z-axis perspective	  *						transformation.				  *									  *	Externals:							  *	    cos, sin.											  */ 	 /*  	M4RotateX - Post-concatenate a x-axis rotation matrix.  */Matrix4	*M4RotateX	(m,a)		Matrix4	*m;			/* Current transformation matrix*/		double	a;			/* Rotation angle		*/{		double	c, s;		double	t;		int		i;		c = cos (a);	s = sin (a);		for (i = 0 ; i < 4 ; i++) {	     	t = m->element[i][1];	     	m->element[i][1] = t*c - m->element[i][2]*s;	     	m->element[i][2] = t*s + m->element[i][2]*c;		}		return (m);}/* 	M4RotateY - Post-concatenate a y-axis rotation matrix.  */Matrix4		*M4RotateY	(m,a)		Matrix4	*m;			/* Current transformation matrix*/		double	a;			/* Rotation angle		*/{		double	c, s;		double	t;		int		i;		c = cos (a);	s = sin (a);		for (i = 0 ; i < 4 ; i++) {	    	 t = m->element[i][0];	    	 m->element[i][0] = t*c + m->element[i][2]*s;	    	 m->element[i][2] = m->element[i][2]*c - t*s;		}		return (m);}/*   	M4RotateZ - Post-concatenate a z-axis rotation matrix.   */Matrix4	*M4RotateZ	(m,a)		Matrix4	*m;			/* Current transformation matrix*/		double	a;			/* Rotation angle		*/{		double	c, s;		double	t;		int		i;		c = cos (a);	s = sin (a);		for (i = 0 ; i < 4 ; i++) {	    	 t = m->element[i][0];	    	 m->element[i][0] = t*c - m->element[i][1]*s;	    	 m->element[i][1] = t*s + m->element[i][1]*c;		}		return (m);}/*   	M4Scale	- Post-concatenate a scaling.   */Matrix4	*M4Scale	(m,sx,sy,sz)		Matrix4	*m;			/* Current transformation matrix */		double	sx, sy, sz;	/* Scale factors about x,y,z */{		int		i;		for (i = 0 ; i < 4 ; i++) {	    	 m->element[i][0] *= sx;	    	 m->element[i][1] *= sy;	    	 m->element[i][2] *= sz;		}		return (m);}/*   	M4Translate - Post-concatenate a translation.   */Matrix4	*M4Translate	(m,tx,ty,tz)		Matrix4	*m;			/* Current transformation matrix */		double	tx, ty, tz;	/* Translation distance */{		int		i;		for (i = 0 ; i < 4 ; i++) {	    	 m->element[i][0] += m->element[i][3]*tx;	    	 m->element[i][1] += m->element[i][3]*ty;	    	 m->element[i][2] += m->element[i][3]*tz;		}		return (m);}		/* M4ZPerspective  Post-concatenate a perspective   	*/		/*transformation.									*/		/*				                  			      */		/* Perspective is along the z-axis with the eye at +z.   */ Matrix4	*M4ZPerspective	(m,d)		Matrix4	*m;			/* Current transformation matrix  */		double	d;			/* Perspective distance		*/{		int		i;		double	f = 1. / d;		for (i = 0 ; i < 4 ; i++) {	    	 m->element[i][3] += m->element[i][2]*f;	    	 m->element[i][2]  = 0.;		}		return (m);}	 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -