当前位置: 首页 > news >正文

根据视图矩阵, 恢复相机的世界空间的位置

根据视图矩阵, 恢复相机的世界空间的位置

在这里插入图片描述

一、方法1

glsl 实现:

// 从本地局部坐标系(相机空间) 到 世界空间的旋转变换
mat3 getLocal2WorldRotation() {mat3 world2localRotation = mat3(viewMatrix[0].xyz,viewMatrix[1].xyz,viewMatrix[2].xyz);return inverse(world2localRotation);
}vec3 getCameraPos( in mat3 rotation ) {// 相机没有旋转时的世界坐标系下的位置const posWCNoRotation = - viewMatrix[3].xyz;return rotation * posWCNoRotation;
}mat3 local2worldRotation = getLocal2WorldRotation();// 世界坐标系的相机位置
vec3 camPositionWC = getCameraPos( local2worldRotation );

js 实现:

const viewMat = camera.matrixWorldInverse.elements;// 旋转矩阵, 方法1
const viewMat = camera.matrixWorldInverse.elements;
const viewRotation = new THREE.Matrix4();viewRotation.set(viewMat[0], viewMat[4], viewMat[8], 0,viewMat[1], viewMat[5], viewMat[9], 0,viewMat[2], viewMat[6], viewMat[10], 0,0, 0, 0, 1,);
viewRotation.invert();// 旋转矩阵, 方法2
const viewRotation = new THREE.Matrix4().makeRotationFromQuaternion(camera.quaternion);const pos = new THREE.Vector3(-viewMat[12], -viewMat[13], -viewMat[14]);
pos.applyMatrix4(viewRotation);
console.log(pos);
二、方法2
// 计算视图矩阵的逆矩阵
mat4 inverseViewMatrix = inverse(viewMatrix);// 提取相机在世界空间中的位置
vec3 cameraPosition = inverseViewMatrix[3].xyz;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch 企业级实战 01:Painless 脚本如何调试?
  • OPPO 2024届校招正式批笔试题-后端(C卷)
  • LLM基础模型系列:Prompt-Tuning
  • 前端实现将多个页面导出为pdf(分页)
  • SSL vpn easy connect 选路连接失败,可能当前连接网络异常,请稍后重试
  • 防火墙--双机热备
  • python + Pytest + requests 的接口自动化步骤
  • SQL基础 | NOT NULL 约束介绍
  • 7.13实训日志
  • Qt易错总结
  • Chrome浏览器的Profile数据内容简介
  • 一边吃谷一边痛,二次元距离三次元还有多远?
  • 电视盒子变身NAS之安装termux
  • IDEA中Git常用操作及Git存储原理
  • LeetCode-计数质数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Angular2开发踩坑系列-生产环境编译
  • ES6之路之模块详解
  • gf框架之分页模块(五) - 自定义分页
  • iOS | NSProxy
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript设计模式之工厂模式
  • Linux后台研发超实用命令总结
  • MQ框架的比较
  • Python连接Oracle
  • Python中eval与exec的使用及区别
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue.js-Day01
  • 前端js -- this指向总结。
  • 我的面试准备过程--容器(更新中)
  • 小程序开发之路(一)
  • 一些关于Rust在2019年的思考
  • 译自由幺半群
  • Spring Batch JSON 支持
  • # SpringBoot 如何让指定的Bean先加载
  • #define
  • #define,static,const,三种常量的区别
  • #FPGA(基础知识)
  • #微信小程序(布局、渲染层基础知识)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1)STL算法之遍历容器
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ZT)一个美国文科博士的YardLife
  • (待修改)PyG安装步骤
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四)React组件、useState、组件样式
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (一)为什么要选择C++
  • (转)h264中avc和flv数据的解析
  • (转)为C# Windows服务添加安装程序
  • (转载)Google Chrome调试JS
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)