OpenGL 坐标系的互相转换

这篇博客介绍了OpenGL中坐标系之间的转换,包括如何将世界坐标转换为矩阵坐标,以及如何通过逆矩阵将局部坐标转换回世界坐标。坐标转换对于简化运算和理解物体在不同坐标系中的运动至关重要,常用于动画和物理碰撞的计算。
摘要由CSDN通过智能技术生成

openGL坐标系包含旋转,平移,缩放被塞在一个矩阵里面。坐标系之间的转换基础是矩阵的运算。

每一个矩阵代表的坐标系,就是是原点坐标系通过旋转,平移,缩放得到的坐标系。

当一个矩阵右乘一个向量或是另一个矩阵,意味着把右边的变换,变成相对于左边的矩阵坐标系之上。



如果把一个世界坐标的X转换到一个矩阵上,我们可以矩阵右乘这个坐标:

static float multiplyMX(Matrix4* matrix, float x) {
	return matrix->m[0] * x + matrix->m[4] + matrix->m[8] + matrix->m[12];
}


如果把一个世界坐标Y转换到一个矩阵上,我们可以矩阵右乘这个坐标:

static float multiplyMY(Matrix4* matrix, float y) {
	return matrix->m[1] + matrix->m[5] * y + matrix->m[9] + matrix->m[13];
}


如果把一个世界坐标点转换到一个矩阵上,我们可以矩阵右乘这个点:

static void multiplyMV4(Matrix4* matrix, float x, float y, float z, float w, Out(Vector4* result)) {
	result->v[0] = matrix->m[0] * x + matrix->m[4] * y + matrix->m[8]  * z + matrix->m[12] * w;
	result->v[1] = matrix->m[1] * x + matrix->m[5] * y + matrix->m[9]  * z + matrix->m[13] * w;
	result->v[2] = matrix->m[2] * x + matrix->m[6] * y + matrix->m[10] * z + matrix->m[14] * w;
	result->v[3] = matrix->m[3] * x + matrix->m[7] * y + matrix->m[11] * z + matrix->m[15] * w;
}


static void multiplyMV3(Matrix4* matrix, float x, float y, float z, Out(Vector3* result)) {
	result->v[0] = matrix->m[0] * x + matrix->m[4] * y + matrix->m[8]  * z + matrix->m[12];
	result->v[1] = matrix->m[1] * x + matrix->m[5] * y + matrix->m[9]  * z + matrix->m[13];
	result->v[2] = matrix->m[2] * x + matrix->m[6] * y + matrix->m[10] * z + matrix->m[14];
}


static void multiplyMV2(Matrix4* matrix, float x, float y,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值