日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

摄像机旋转

發布時間:2024/4/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 摄像机旋转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三維場景中的旋轉,是攝像機本身在世界坐標系中繞Y軸進行旋轉,從而改變位置,而其他的姿態不變,也就是攝像機的Position向量繞著世界坐標系的Y軸進行旋轉。

三種方式:

1,采用角度(不通用),此方法適合目標點是世界坐標系原點。

?

private float angleFirst = 0; private void RotateYFirst(float paAngle) { //通過角度 angleFirst += paAngle; if (angle > 6.28f) { angle -= 6.28f; } camPosition = new Vector3(4 * (float)Math.Cos(angleFirst), 0, 4 * (float)Math.Sin(angleFirst)); Matrix view = Matrix.LookAtLH(camPosition, camTarget, camUp); device.SetTransform(TransformType.View, view); }

2,采用Matrix.RotationY方法對Position向量進行旋轉(較為通用)

//通過世界矩陣的Transform private void RotateYSecond(float paAngle) { //攝像機繞世界坐標系的Y軸進行旋轉,攝像機本身的姿態不進行任何改變 Vector4 tempRotate = Vector3.Transform( camPosition, Matrix.RotationY(paAngle)); camPosition = new Vector3(tempRotate.X, tempRotate.Y, tempRotate.Z); ? Matrix view = Matrix.LookAtLH( camPosition, camTarget, camUp); device.SetTransform(TransformType.View, view); }

3,原理和2中一樣,不過在旋轉計算時,采用四元素數進行處理

//通過四元素數進行旋轉變換(同樣繞著世界坐標系的Y軸) private void RotateYThree(float paAngle) { Vector4 tempRotate = Vector3.Transform( camPosition, Matrix.RotationQuaternion(Quaternion.RotationAxis(new Vector3(0, 1, 0), paAngle))); camPosition = new Vector3(tempRotate.X, tempRotate.Y, tempRotate.Z); ? Matrix view = Matrix.LookAtLH(camPosition, camTarget, camUp); device.SetTransform(TransformType.View, view); }

轉載于:https://www.cnblogs.com/sharpfeng/archive/2011/03/30/1999593.html

總結

以上是生活随笔為你收集整理的摄像机旋转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。