WebGL自学笔记第四天

变换/仿射变换

  • 主要是一些数学知识

平移

  • 对顶点的分量上加上平移的距离
  • 逐顶点操作,所以需要操作顶点着色器

旋转

  • 旋转轴
  • 旋转方向
  • 旋转角度
    一般旋转角度与旋转方向会合并成一个参数,旋转角度为正代表逆时针,为负代表正时针。
    假设旋转角度为 β \beta β,则坐标点表达式为
    rX = xcos β \beta β - ysin β \beta β;
    ry = xsin β \beta β + ycos β \beta β;

变换矩阵

  • 三维图形学非常重要
  • 常用的矩阵
  1. 旋转矩阵
    [ c o s β − s i n β 0 0 s i n β c o s β 0 0 0 0 1 0 0 0 0 1 ] × [ x y z 1 ] \left[ \begin{matrix} cos\beta & -sin\beta & 0 & 0\\ sin\beta & cos\beta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{matrix} \right] \times \left[ \begin{matrix} x\\ y\\ z\\ 1 \end{matrix} \right] cosβsinβ00sinβcosβ0000100001×xyz1
  2. 平移矩阵
    [ 1 0 0 0 0 1 0 0 0 0 1 0 T x T y T z 1 ] × [ x y z 1 ] \left[ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ Tx & Ty & Tz & 1\end{matrix} \right] \times \left[ \begin{matrix} x\\ y\\ z\\ 1 \end{matrix} \right] 100Tx010Ty001Tz0001×xyz1
  3. 缩放矩阵
    [ S x 0 0 0 0 S y 0 0 0 0 S z 0 0 0 0 1 ] × [ x y z 1 ] \left[ \begin{matrix} Sx & 0 & 0 & 0\\ 0 & Sy & 0 & 0 \\ 0 & 0 & Sz & 0 \\ 0 & 0 & 0 & 1\end{matrix} \right] \times \left[ \begin{matrix} x\\ y\\ z\\ 1 \end{matrix} \right] Sx0000Sy0000Sz00001×xyz1
  • WebGL的矩阵和OpenGL一致,是列主序的

因为js的数组是一维的,所以需要表达矩阵有两种方式,即每行读取和每列读取,WebGL是每列读取,比如旋转矩阵,在js种的表达为

var xormMatrix = new Float32Array([
    cosB, sinB, 0.0, 0.0,
    -sinB, cosB, 0.0, 0.0,
    0.0, 0.0, 1.0, 0,0,
    0.0, 0.0, 0.0, 1.0

]);

核心代码

	// 转为弧度制
	var radian = Math.PI * ANGLE / 180.0;
	var cosB = Math.cos(radian);
	var sinB = Math.sin(radian);
	// WebGL矩阵是列主序的
	var xformMatrix = new Float32Array([
		cosB, sinB, 0.0, 0.0,
		-sinB, cosB, 0.0, 0.0,
		0.0, 0.0, 1.0, 0.0,
		0.0, 0.0, 0.0, 1.0
	]);
	var u_xformMatrix = gl.getUniformLocation(gl.program, 'u_xformMatrix');
	// 参数
	// locaion uniform变量的存储位置
	// Transpose 是否转置矩阵 WebGL没有提供该功能,所以必须为false
	// 待传输的类型化数组
	gl.uniformMatrix4fv(u_xformMatrix, false, xformMatrix);
	
	// 设置canvas背景色
	gl.clearColor(0.0, 0.0, 0.0, 1.0);
	gl.clear(gl.COLOR_BUFFER_BIT);
	// 传入的绘制个数是n,所以一次性可以绘制完成
	gl.drawArrays(gl.TRIANGLES, 0, n);
  • 相关矩阵都有对应的数学库,但是知道其原理总是好的。

相关demo可以在我的公众号【xyzzlky】中回复【WebGL】获取,今日内容在TransTriangle文件夹中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值