Camera.translate的陷阱!问题解决了

本文探讨了在3D环境中实现相机平滑旋转时遇到的问题,并详细记录了解决过程。作者最初尝试通过直接操作相机来实现旋转,但在实践中发现这种方法会导致相机位置偏移,进而影响旋转效果。最终通过将相机置于一个组节点中并调整该组节点的方法解决了问题。
摘要由CSDN通过智能技术生成

今天写billboard的测试程序
在处理镜头转动时
按左键 camera.postRotate(deltaAngle, 0.0f, 1.0f, 0.0f);
按右键 camera.postRotate(-deltaAngle, 0.0f, 1.0f, 0.0f);

这样却不行!

镜头经常会时好时坏,有时可以正常转动,有时就会出现莫名其妙的问题了。。这是问题一

后来我把绕Y轴的镜头处理成为

if (isKeyLeftPressed()) {
   camAngleY += deltaAngle;
   if(camAngleY >= 360.0f) {
    camAngleY -= 360.0f;
   }
   
   rotateCamY();
  }

private void rotateCamY() {
  camera.getCompositeTransform(tTemp);

  tTemp.get(matrixs);
  unitVector[0] = matrixs[3];
  unitVector[1] = matrixs[7];
  unitVector[2] = matrixs[11];
  
  tCamera.setIdentity();
  tCamera.postTranslate(unitVector[0], unitVector[1], unitVector[2]);
  tCamera.postRotate(camAngleY, 0.0f, 1.0f, 0.0f);
 }

从理论上来说,没有任何问题吧
但实际中就是不行
我郁闷阿
把每一步的矩阵都打印出来,观察了半天
突然发现rotateCamY()从进去到出来的结果都是对的
但下一次进去后结果就会比上次出来的结果矩阵有一个translate(0.0f, 3.0f, 10.0f)这样的操作
我恍然大悟!
在我loadCamera(),
camera.translate(0.0f, 3.0f, 10.0f);
world.addChild(camera);
现在看来,在每次rotateCamY()这个操作之后camera.translate(0.0f, 3.0f, 10.0f);会偷偷地执行
我晕。。这不是坑人吗?可能是API哪个部分我还没注意看到

看来这种方法也不行

第三种方法:
在看了几个M3G例子之后
我开始用
cameraGroup.addChild(camera);
cameraGroup.translate(0.0f, 3.0f, 10.0f);
world.addChild(cameraGroup);

果不其然,这样就正常了!

结论:一定要用个Group来保存Camera

---------------------------------------updated 2007/01/18------------------------------------------------------

现在来看这篇文章,当真幼稚无比

我因为在构造camera时进行了translate操作,这导致了camera的位置并不是在它坐标系的中心了,

假设camera新的位置是(0, 5, 10)

因此camera.rotate就会沿着原点(0,0,0)来进行旋转

当然,结果会异常了!

如果要想绕着自身中心旋转

就需要transform.rotate,然后camera.setTransform

同样的道理,在平移时

如果我使用camGroup.translate,这就是造成camGroup沿着其父坐标系的轴进行平移,也就是world坐标系的平移

如果我们想要在相机这个局部坐标系进行平移的话,就需要

camera.translate了!

引用\[1\]和\[2\]提供了关于驱动程序的注册和操作的代码片段。根据这些代码,可以看出驱动程序使用了platform driver和file operations来进行设备的初始化和操作。驱动程序在注册时会调用probe函数进行初始化,并在probe函数中注册i2c driver。引用\[3\]提供了关于i2c driver的注册和probe函数的代码片段。 根据问题描述,"v831 \[camera.capture\] can't get image, camera is busy!!!"是一个错误信息,可能是由于相机忙碌导致无法获取图像。这个错误信息可能是由于相机设备被其他进程占用或者相机驱动程序出现了问题导致的。要解决这个问题,可以尝试以下几个步骤: 1. 确保没有其他进程正在使用相机设备。可以通过查看系统中运行的进程来确定是否有其他进程正在使用相机。 2. 检查相机驱动程序的状态。可以查看驱动程序的日志或者调试信息来确定是否有错误发生。 3. 重新启动相机设备。有时候重新启动设备可以解决一些临时的问题。 4. 更新相机驱动程序。如果有可用的更新版本的驱动程序,可以尝试更新驱动程序来解决问题。 希望以上信息对您有帮助。如果问题仍然存在,请提供更多的详细信息以便我们能够更好地帮助您解决问题。 #### 引用[.reference_title] - *1* *2* *3* [MTK平台CAMERA驱动框架解析](https://blog.csdn.net/dthua888/article/details/102490973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值