admin管理员组文章数量:1567262
高通VR里面的通用透视矩阵计算方法
static public Matrix4x4 Perspective(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;
}
float baseLen = 0.06f;//一般设为0.05~0.08之间
Frustums = new ViewFrustum[2];
Frustums[0].left = -baseLen;
Frustums[0].right = baseLen;
Frustums[0].top = baseLen;
Frustums[0].bottom = -baseLen;
Frustums[0].near = 0.061f;
Frustums[0].far = 1000f;
_projection = Perspective(frustum.left, frustum.right, frustum.bottom, frustum.top, frustum.near, _camera.farClipPlane);
public void OnPreCull()
{
if (_camera != null)
{
//_camera.fieldOfView = 30f;
_camera.projectionMatrix = _projection;
//_camera.aspect = 1440/2560f;
}
}
此处的值和输出的单眼分辨率比率有关,通常是成正比,因为现在输出的是1:1的图像,所以现在需要将left,right和top,bottom保持一致,否则left/bottom=aspect=width/height;
本文标签: 矩阵计算方法perspective
版权声明:本文标题:Perspective的矩阵计算方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725894944a1047521.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论