想自己实现一个tile地图,单一纹理是正方形形的,我想做成SLG、RTS的那种45°的地图,所以把摄像机旋转了。
这样的好处是生成地图时可以按原始纹理的高宽来计算整块地图,但是遇到了一个问题,就是如何在不改变摄像机旋转值的情况下,根据物体坐标来计算摄像机位置。
比如,我地图中心点的位置在(0,0,0)那么在摄像机旋转固定(比如 30,200,200,这个旋转值不能改)的情况下,如何计算摄像机的初始位置,让地图中心点显示在画面的正中?
想自己实现一个tile地图,单一纹理是正方形形的,我想做成SLG、RTS的那种45°的地图,所以把摄像机旋转了。
这样的好处是生成地图时可以按原始纹理的高宽来计算整块地图,但是遇到了一个问题,就是如何在不改变摄像机旋转值的情况下,根据物体坐标来计算摄像机位置。
比如,我地图中心点的位置在(0,0,0)那么在摄像机旋转固定(比如 30,200,200,这个旋转值不能改)的情况下,如何计算摄像机的初始位置,让地图中心点显示在画面的正中?
这要啥思路?你原本桌子上立着一根牙签,垂直桌面,摄像器就是牙签顶,现在,你牙签尖尖戳的地方不动,吧牙签往某个方向倾斜(可能还得再绑个牙签增加长度),设牙签尖尖是0,0,0,问牙签顶的坐标是多少?
小弟愚钝,没有理解到这段话的意思。
现在的情况是,要手动拖动摄像机才能看到(0,0,0)的问题,我想通过程序算出这个位置。
比如,有个物体在(12.3,34.5,45.6)的位置,我的摄像机在什么位置才能看到这个对象呢?
这里需要注意的是,摄像机的旋转是不能改的,也就是说只能用过改变摄像机的位置来显示对象。
你摄像机角度不变,长度不变,那不是一开始记录摄像机和你想要的中心点的位置差,然后变换了中心点直接加上去不行吗
这样说吧,刚开始网络初始化一个随时在动的物体在(275,356,777)这个位置,摄像机不能做旋转,如何让这个物体进入摄像机范围内?
摄像机的旋转值并不是(0,0,0),而是个固定角度,这个角度不能改。
要不这样,你建一个空节点,然后把摄像机挂在他里面调到你喜欢的位置和角度,然后你初始化的时候,把这个空节点的position设置成你在动的那个物体的position
做2次三角变换,初中知识点就能解决了,别老用3D催眠自己,算的时候摘掉一个维度
嗯,这个办法很不错。
不过,还是想知道有没有大佬能给出不需要挂对象,直接用数学方式计算出摄像机位置的办法。
嗯,感谢回复,确实是到3维里就比较晕了,一直做2D。。。仔细想了下牙签的例子,似乎理解一些了,先去掉一个维度思考确实简单一些了。
可以看看社区的四元数教程
所有NODE节点有个forward就是朝向的向量,相机放在任意位置加上 (相机朝向向量 * 距离常量),那个位置就是显示在画面正中。
虽然没试过但是就是这么个思路,应该是很简单的
向量运算问题。设定一个相机的拍摄方向的方向向量n,想要跟随拍摄物体节点的位置p,再有一个摄像节点与拍摄物体节点的距离L,那么向量运算摄像机位置cp = p-n*L。(注意:3D向量要用到vec3对象以及相关运算,且要同一个坐标系内作运算)
感谢提醒,用这个方法解决了。
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。