呃...15年開篇~
去年想寫一個有關默認相機轉VR相機的腳本,當時沒寫完,今天不小心翻到并寫完了,而且思路也和原來完全不一樣了,增加了是否刪除原相機與是否轉換所選相機的選項.
由于國內VR版本比較混亂,中間加了個中英文版本的適配.
fn cam_to_vrcam sel:#off del:#on =
(
local sel_cam
=
#()
local del_cam
=
#()
case
sel of
(
#off : cams
=
cameras
#on : cams
= sel_cam +
selection
)
case
of
(
(VRayPhysicalCamera
!= undefined) : YY_vrcam =
VRayPhysicalCamera isSelected:on
(VR物理攝影機
!= undefined) : YY_vrcam =
VR物理攝影機 isSelected:on
(VR_物理攝影機
!= undefined) : YY_vrcam =
VR_物理攝影機 isSelected:on
--
default
:
)
for
c=
1
to cams.count
do
(
if
(classof cams[c] == Freecamera) or (classof cams[c] == Targetcamera)
do
(
YY_new_cam
=
copy YY_vrcam
try
cams[c].type = #free
catch
()
YY_new_cam.rotation
=
cams[c].rotation
YY_new_cam.pos
=
cams[c].pos
append del_cam cams[c]
)
)
delete YY_vrcam
case
del of
(
#on :
for
d
in
del_cam
do
delete d
#off : ()
)
)
--
將默認相機轉化為VR物理相機
cam_to_vrcam sel:#on del:#on
?
找到更簡單的方法再繼續修改~
----------------------------------------------------------------------------
在測試中發現一些問題:try cams[c].type = #free catch()
當將目標相機轉換為自由相機時,目標點就不存在了,原來?selection 的物體會發生變化.
后來發現更簡單的方法?baseobject 可以獲得節點的原始對象的類別.而不像? classOf()?函數返回的是對象類的最終狀態(堆棧的頂部).
fn cam_to_vrcam sel:#off =
(
case
sel of
(
#off : cams
=
cameras
#on : cams
=
selection
)
case
of
(
(VRayPhysicalCamera
!= undefined) : YY_vrcam =
VRayPhysicalCamera()
(VR物理攝影機
!= undefined) : YY_vrcam =
VR物理攝影機()
(VR_物理攝影機
!= undefined) : YY_vrcam =
VR_物理攝影機()
default
: messagebox
"
V-Ray版本不支持!
"
)
for
c=
1
to cams.count
do
(
if
(classof cams[c] == Freecamera) or (classof cams[c] == Targetcamera)
do
(
try
cams[c].baseobject = YY_vrcam
catch
()
)
)
delete YY_vrcam
)
--
將默認相機轉化為VR物理相機
cam_to_vrcam sel:#on
不過這個方法轉換的相機都是關聯的,以后在修改.
2015-01-30 今天找到了解除物體關聯的方法了: 連接地址
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

