[Papervision3D]chara

Papervision3Dでキャラクタ。
humanとあまり変わりないですが楽しいですねぇPapervision3D。
ときどきブラウザが止まるかもですがしばらく待ってれば動き出します。

スクリーンショット1

chara

[Papervision3D]human

Papervision3Dで人。
人がちょこちょこするものは色々作ってきたのですが
ついにというかやっとというかPapervisionで作ることができました。本当にありがとうございました。
え?何の役に立つのかですって? そんなことはどーでもいーんです(`・ω・´)おもしろければ

スクリーンショット1

human

[Papervision3D]リボン

Papervision3Dでリボンです。
やり方としてはPlane内のTriangle3Dの頂点を操作してPlane同士をつながっているように見せています。
異常に面倒臭いわりに見た目、実用性などいまいちでした。(´・ω・`)
異常に面倒臭い過程は↓
・ABCD…のPlaneを用意
・Aの左端をワールド座標へ変換※1
・Bの左端をワールド座標へ変換
・AとBの座標の差を求める
・得られた座標をAのローカル座標A’へ変換
・Aの右端のTriangle3Dの頂点をA’へ移動
・対象Planeを変えて※1へ
以上です。

何か他に良い方法は無いだろうか・・・。

スクリーンショット1

リボン

[3Dプロッタver2]

Papervision3Dを使うほどではないが、3Dな表現をしたいなぁというときには3Dプロッタを使っています。
前回のコードはカメラが動かない条件下で使えるものだったのですが
カメラを動かす必要が出てきたので作ってみました。Papervision3Dと同じ演出をすることができます。
スクリーンショット1

3Dプロッタ2

焦点距離:camera.focus
拡大率:camera.zoom
対象オブジェクト:target_mc
対象オブジェクト3D座標:_x, _y, _z

scale=(camera.focus)/(camera.focus+(target_mc._z-camera.z-camera.focus)) * camera.zoom;
xpos=(target_mc._x-camera.x)*scale;
ypos=-(target_mc._y-camera.y)*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;

[3Dプロッタ]

Papervision3Dを使うほどではないが、3Dな表現をしたいなぁというときには3Dプロッタを使っています。
下記のコードは昔からある古典的3D計算だそうです。よく忘れるのでメモ

焦点距離:camera_f
対象オブジェクト:target_mc
3D座標:x3d, y3d, z3d

var scale=camera_f/(camera_f+target_mc.z3d);
var xpos=target_mc.x3d*scale;
var ypos=target_mc.y3d*scale;

target_mc.scaleX=target_mc.scaleY=scale;
target_mc.x=xpos;
target_mc.y=ypos;