以下SHOP ZEROさんのブログより引用
//
// SHOP ZERO Tips43 CameraControl Script v1.0
//
// Created by Zero2000 Kid 2009/11/21
//
integer handle;
integer input_ch=-43;
list mlist=["Set1","Set2","Set3","Camera1","Camera2","Camera3","Zoom-IN","Zoom-OUT","Release"];
list cameraposlist=["","",""];
list camerarotlist=["","",""];
vector ZoomIN_offset=<5,0,0>;
vector ZoomOUT_offset=<-5,0,0>;
CameraControl(vector camerapos,rotation camerarot) {
vector offset=<0.1,0,0>;
vector cameraview=offset * camerarot + camerapos;
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_POSITION, camerapos,
CAMERA_POSITION_LOCKED, TRUE,
CAMERA_FOCUS, cameraview,
CAMERA_FOCUS_LOCKED, TRUE
]);
}
default
{
state_entry() {
llSetText("CameraControl", <1,1,1>, 1);
llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA | PERMISSION_CONTROL_CAMERA);
}
touch_start(integer t) {
handle = llListen(input_ch, "", llDetectedKey(0), "");
llDialog(llDetectedKey(0), "Please select menu.", mlist, input_ch);
}
listen(integer ch, string name, key id, string message) {
if (message=="Release") {
llClearCameraParams();
llListenRemove(handle);
} else if (llSubStringIndex(message,"Zoom")!=-1) {
vector camerapos=llGetCameraPos();
rotation camerarot=llGetCameraRot();
vector offset;
if (message=="Zoom-IN") offset=ZoomIN_offset;
else if (message=="Zoom-OUT") offset=ZoomOUT_offset;
camerapos=offset * camerarot + camerapos;
if (camerapos) CameraControl(camerapos,camerarot);
llDialog(id, "Please select menu.", mlist, input_ch);
} else if (llSubStringIndex(message,"Camera")!=-1) {
integer number=(integer)llGetSubString(message,-1,-1);
vector camerapos=llList2Vector(cameraposlist,number-1);
rotation camerarot=llList2Rot(camerarotlist,number-1);
if (camerapos) CameraControl(camerapos,camerarot);
llDialog(id, "Please select menu.", mlist, input_ch);
} else if (llSubStringIndex(message,"Set")!=-1) {
integer number=(integer)llGetSubString(message,-1,-1);
vector camerapos=llGetCameraPos();
rotation camerarot=llGetCameraRot();
cameraposlist=llListReplaceList(cameraposlist,[camerapos],number-1,number-1);
camerarotlist=llListReplaceList(camerarotlist,[camerarot],number-1,number-1);
llListenRemove(handle);
}
}
attach(key id){
if (id){
llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA | PERMISSION_CONTROL_CAMERA);
}
}
}
「セットアップ」
1. オブジェクトを1つ作成します。(球でもボックスでも何でも構いません。)
2. オブジェクトにスクリプトをドラッグします。
3. オブジェクトをHUDとして装着します。
以上です。
「使用方法」
1. 登録したいポイントに視点を移動します。
2. HUDをクリックして、青いダイアログからSet1をクリックします。
(視点が登録されます)
3. 追加でCamera2,Camara3を登録する場合は、視点を移動してSet2,Set3をクリックしてください。
4. ESCキーを一度押します。
5. (視点がアバターの位置に戻ります)
6. HUDをクリックして、青いダイアログからCamera1をクリックします。
7. 視点が先ほど登録したポイントに移動します。
8. ズームインやアウトしたい場合は、Zoom-INまたは、Zoom-OUTをクリックします。
9. 視点を戻す場合は、ダイアログからReleaseをクリックします。
* ズームの比率は、5m単位になっています。変更したい場合は、
下記のパラメータを変更して下さい。
vector ZoomIN_offset=<5,0,0>;
vector ZoomOUT_offset=<-5,0,0>;
* カメラは、SIM内どこでも移動可能ですが、アバターからの距離が離れすぎると
正確な映像は表示されません。正確な映像が表示される範囲は、あくまで
手動でカメラを操作可能な範囲内です。スカイに居ながら地上のアバターの
様子を見たりすることはできませんのであしからずw
0 comment:
コメントを投稿