Unity 离轴相机 投影矩阵算法 XY双方向的

该代码段展示了如何使用OpenGL构建一个透视偏移矩阵,通过`calculateProjectionMatrix`函数结合`PerspectiveOffCenter`方法,考虑了视口大小、近裁剪面、远裁剪面以及屏幕偏移值来创建投影矩阵。这在虚拟现实或3D图形渲染中尤其重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Matrix4x4 calculateProjectionMatrix(float offsetX, float offsetY)
    {
		float near = LeftEyeCam.nearClipPlane;
		float far = LeftEyeCam.farClipPlane;

		float left = -ScreenSize.x / 2 * near / m_length;
		float right = -left;
		float top = ScreenSize.y / 2 * near / m_length;
		float bottom = -top;

		float offsetnearX = near * offsetX / m_length;
		float offsetnearY = near * offsetY / m_length;

		return PerspectiveOffCenter(left - offsetnearX, right - offsetnearX, bottom- offsetnearY, top- offsetnearY, near, far);
	}

	// 构造投影矩阵(OpenGL版)
	public static Matrix4x4 PerspectiveOffCenter(float left, float right, float bottom, float top, float near, float far)
	{
		float x = 2.0F * near / (right - left);
		float y = 2.0F * near / (top - bottom);
		float a = (right + left) / (right - left);
		float b = (top + bottom) / (top - bottom);
		float c = -(far + near) / (far - near);
		float d = -(2.0F * far * near) / (far - near);
		float e = -1.0F;
		Matrix4x4 m = new Matrix4x4();
		m[0, 0] = x;
		m[0, 1] = 0;
		m[0, 2] = a;
		m[0, 3] = 0;
		m[1, 0] = 0;
		m[1, 1] = y;
		m[1, 2] = b;
		m[1, 3] = 0;
		m[2, 0] = 0;
		m[2, 1] = 0;
		m[2, 2] = c;
		m[2, 3] = d;
		m[3, 0] = 0;
		m[3, 1] = 0;
		m[3, 2] = e;
		m[3, 3] = 0;
		return m;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值