Playanimationコマンドで3D Renderer!

スポンサーリンク

まずこちらを見てください!
これは主にPlayanimationコマンドを使った3D Rendererです!

コマンドの解説
このコマンドは、狐を使ったPlayanimationモデリングと、Molangを使っています。
Playanimationモデリングの説明は省きます。
Playanimationコマンドのstop_expressionの欄でMolangを使うことで、variableという変数を変更でき、それによって3D Rendererが動いています。
このコマンドではアマスタにcoreという名前を付け、そのcoreにPlayanimationコマンドを実行させています。計算はすべてPlayanimation(Molang)コマンド内で行っており、それを狐モデリングで可視化させています。

1つの線はstartPositionとendPositionの2つの点を持っています。CameraはPosとRot、Fovがあり、それらを使って3Dを2Dに変換しています。
3D→2Dに変換するにあたって、次の操作が必要になります。

辺(点)をカメラの相対位置、回転に変換 → 辺をそれぞれのZ座標から2D座標に変換 → 描画

1つ目の操作ついて説明します。
ある点を回転させるとき、2つの回転方法があります。オイラー角回転と、クォータニオン回転です。オイラー角はジンバルロックという、特定の角度で自由度が失われてしまう現象が発生するので、今回はクォータニオン回転を使っていきます。ですが、クォータニオンを人力で設定などをするのは難しいので、オイラー角をクォータニオンに変換することでそれらの問題を防いでいます。
点をカメラからの相対位置に変換します。これは普通に点の座標からカメラ座標を引けばいいのです。変換した相対位置を回転させるときにクォータニオンを使います。計算は難しいので説明は省きます。変換されたもののZ座標はカメラ回転に合わせられているので、そのまま奥行きになります。これをすべての辺(点)に実行します。これで1つ目の操作は完了です。

2つ目の操作について説明します。
2つ目の操作は簡単で、1つ目の操作を終えた点を使います。3D座標の点を2D座標に変換する式は以下の通りです。

(スクリーンX)=X/Z
(スクリーンY)=Y/Z

これをすべての点に実行すると3Dの座標が2Dの座標に変換され、2つ目の操作は完了です。

3つ目の操作について説明します。
今の段階で、3Dが2Dの座標に変換されました。変換されたものを描画するには、狐モデリングを使います。簡単に狐モデリングを説明すると、Playanimationの重ね掛けでスケールやポジション、回転を適応させるもので、狐はブロックを持てるので、ディスプレイとして使えます。この狐に線のデータを渡し、そこから角度や位置を割り出して描画させます。これですべての操作が完了しました。

このような操作で、3Dを2Dに変換し、描画させています。難しいところはあったと思いますが、少しでも理解して、興味があると思っていただければ幸いです。

※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

  1. このコマンドを最初に実行してください。

    scoreboard objectives add edge dummy
    scoreboard objectives add playanimation dummy
    kill @e[type=fox,tag=canvas]
    kill @e[type=armor_stand,name=core]
    summon fox canvas_0 0 -60 0
    summon fox canvas_1 0 -60 0
    summon fox canvas_2 0 -60 0
    summon fox canvas_3 0 -60 0
    summon fox canvas_4 0 -60 0
    summon fox canvas_5 0 -60 0
    summon fox canvas_6 0 -60 0
    summon fox canvas_7 0 -60 0
    summon armor_stand core 0 -60 0
    tag @e[type=fox,name=canvas_0] add canvas
    scoreboard players set @e[type=fox,name=canvas_0] edge 0
    tag @e[type=fox,name=canvas_1] add canvas
    scoreboard players set @e[type=fox,name=canvas_1] edge 1
    tag @e[type=fox,name=canvas_2] add canvas
    scoreboard players set @e[type=fox,name=canvas_2] edge 2
    tag @e[type=fox,name=canvas_3] add canvas
    scoreboard players set @e[type=fox,name=canvas_3] edge 3
    tag @e[type=fox,name=canvas_4] add canvas
    scoreboard players set @e[type=fox,name=canvas_4] edge 4
    tag @e[type=fox,name=canvas_5] add canvas
    scoreboard players set @e[type=fox,name=canvas_5] edge 5
    tag @e[type=fox,name=canvas_6] add canvas
    scoreboard players set @e[type=fox,name=canvas_6] edge 6
    tag @e[type=fox,name=canvas_7] add canvas
    scoreboard players set @e[type=fox,name=canvas_7] edge 7

コメント通報