トピック
ボーネン gurigura2003

2軸回転プログラムについて教えてください><

おちゃめさんなどの方々が作成 した2軸回転プログラムの 計算方法が解読できません>< 仕組みなど教えてください m(_ _)m
2そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
私の2軸回転プログラムは大半が私の独自の方法で行っていますが、表示原理をごく簡単に説明すれば画面上のドットが元となるGRP画像のどのピクセルと対応しているかを計算によって求めれば良いだけです。 普通に考えるならば回転行列を用いてZ軸回転(ワールド変換)してそれをカメラアングルに応じてビュー変換を行い透視変換(射影変換)でパースが付くようにすれば良いですが、それだとめちゃくちゃ遅いし回転行列でピクセルが1対1で対応しているわけではないため隙間が空いてしまうという問題点があります。
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
そこで、Z軸回転は回転行列を使わず別の方法で行います。その方法は「画像 回転 アルゴリズム」などで検索すれば見つかると思いますが要するに元画像を回転させるのではなく読み取る段階でX座標、Y座標の角度をずらした座標を読み出すだけです。 角度というのは1ドットごと変わるものではなく一定であるためループ内は加減算処理のみで済むため高速化ができるというわけです。 ビュー変換は私は行列を使わず空間図形の方程式から求めました。GRP画像を地面に描かれているものとするとカメラの角度が斜め方向ではなく地面に対して水平だったらビュー変換そのものが不要であるため省略可能です。 ただし、X軸回転を無くしたら「2軸回転」と呼んでいいか微妙になるため私は多少速度は落ちても自由に回転できる方を優先しています。 とはいえ、普通にビュー変換を行うよりは圧倒的に高速だと思います。
1そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
透視変換はZ軸回転の際に同時に行うことによって高速化を行っています。 2軸回転は比較的難度が高めであるためワイヤーフレーム等で3Dの基礎的なプログラムを作ってから行えば理解が早いと思います。 私が作った2軸回転プログラムは仕組みを理解せずとも誰でも使えるものになっているはずなので2軸回転をしたいというだけならばそのまま使えば問題ないです。 私は「自分で考える前に作り方をネット等で調べる」ということをせずに作ったあとで調べただけなのでプログラムの仕組みはほとんど私の独自のものです。 したがって、これがベストな方法かと言われると微妙な部分もあるため参考程度に止めてもらえると幸いです。
1そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
自サイトで詳しく説明しているものをかなり簡略化して図も省略しているためこれで理解してもらえるかどうかは微妙です。 私はプチコンmkIIにおいてポリゴンと2軸回転プログラムを公開していますが、正直言ってポリゴンプログラムの方が簡単にできました。(基本部分は一晩で完成) シェーディング処理による速度ダウンを改善すべく高速化処理を行ったのとUI作成に手間取った程度です。しかし、2軸回転は基本部分を作るだけで数日かかってしまいました。
1そうだね
プレイ済み
返信[5]
親投稿
ボーネン gurigura2003
おちゃめさんわざわざ長文ありがとうございますm(_ _)m 自分の分かりやすいようにまとめると 回転はX.Y軸1ドットずつ動くわけではなく 加算変数?のように動く。 その計算をGRPを読み取る段階で行い 他にも隙間を埋める…
0そうだね
プレイ済み
返信[6]
親投稿
ボーネン gurigura2003
そして計算部分を解読してみましたが SIN.COSは一応3dの基礎として 使ってポリゴンを回転させてるのを作り わかるのですが TANなどの仕組みに触れたことがないのでまず自分に3d関数系の使い方を理解した上でもう一度2軸回転プログラムに挑戦してみます。 長々と自分のために時間をさいて くださりありがとうございました m(_ _)m
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
私が作った2軸回転プログラムはマリオカートやF-ZEROのようなゲームを作りやすくするため自キャラ(図の赤点)を中心に回転しています。(カメラは常に自キャラの方を向いていてキャラから見てどの角度、どの距離にカメラを置くかを自在に設定できる) カメラから見るとピンクの線は遠くのものほど間隔が空いていますがこれは計算によって画面上では等間隔になります。 カメラが画面のX軸に対してθラジアン回転した方向に向いている時、ピンクの線はすべてθラジアン回転しています。 このピンクの直線上にあるピクセルをGSPOITで読み出して画面に表示すれば2軸回転が完成する(便宜上ピンクの線は8本しかないですが、実際は画面の縦のドット数の分だけ高密度にある)というわけですが、ピンクの線は直線であるためX方向の増分もY方向の増分もループ内では固定であり増分量をループ内で計算する必要はないということです。
1そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
私が作った当時プチコンで2軸回転プログラムを作った人は誰もおらずこの方法を自力で考え出すのに数日かかってしまいました。 とはいえ、すでにポリゴンプログラムを作っていたこともあって原理が分かれば計算そのものはそれほど難しいものではありませんでした。 ちなみにポリゴンプログラムは大昔にポケコンでワイヤーフレームプログラムを作った経験があり、プチコンではGTRIに相当する三角形描画プログラムをすでに自前で作っていたこともあり、苦労したのはポリゴンの前後関係くらいです。 2軸回転が難しければ回転軸をZ軸に限定してカメラはキャラの方ではなく地面に水平に向けると私が行っているような特別なビュー変換処理が不要でピンクの線はカメラからの距離に反比例するだけになるため難易度がかなり下がると思います。 やっていること自体は単純なのでぜひ挑戦してみてください。
1そうだね
プレイ済み
返信[9]
親投稿
ボーネン gurigura2003
難しい>< またまた長文ありがとうございます m(_ _)m けど流れはまずは3d基礎を勉強しろということですね!少しずつそれなら希望が見えてきました!ありがとうございます! わからないとき、質問させてもらいます。m(_ _)m 一件ありがとうございました!
0そうだね
プレイ済み
返信[10]
親投稿
ΖΕΧ ZEX256
いきなり2軸回転を理解するのは難度が高いきがするので、 1軸回転からやってみてはどうですか
0そうだね
プレイ済み
返信[11]
親投稿
ΖΕΧ ZEX256
ROTATE.BAS【9K38QJ4S】 参考になりそうなページ 座標回転 http://1st.geocities.jp/shift486909/program/spin.html 回転行列 - Wikipedia https://ja.wikipedia.org/wiki/%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97
0そうだね
プレイ済み