コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
Ryou Tanpo ◆AI5iRr9FjmkJ
2018/12/16 12:26
質問
GRP 2軸回転を ARYOP で実装する
任意のページのグラフィック面を、2軸回転して 3D 風に表示するプログラムを ARYOP で作っているのですが行き詰まってしまいました……
そこでアドバイスをいただきたいのです…!
プログラムの仕組みと、実装したい内容と場所をプログラム上に示しているので、だいたいこんな感じというのを教えてください。

公開キー【8J5VW3Z4】

コメント

アバター
Ryou Tanpo 2019/1/1 5:49 ◆AI5iRr9FjmkJ
あれっ通知によると誰かがコメントしたはずだが確認してみたら消えてた
アバター
ツララ 2019/1/1 12:40 ◆ArUdBYOYME1V
DLして中身見てみましたけど、仕組みの解説なんてどこにも無いじゃないかー
変数名が長すぎて何やってるのかワケワカメだったんで
多分こういうことをやりたいんだろうなと想像しつつ弄ってみましたけど
どですかドン?
【DVDRX7D】

GSAVEとGLOADの仕様を理解してないと、Ryou Tanpoさんのプログラムを見たとしてもサッパリなので
その辺をコメントで書くなりしないと、どこで詰まってるのかさえ見当つかないですな。

GSAVEは、指定した矩形領域を左から右・上から下への順で走査して
ピックアップした色情報を1次元配列にドット単位で格納して行く。
(定義した配列の要素数が足りなければ自動追加)
一方GSAVEは、指定した領域へ1次元配列の色情報を元にグラフィック画面を描画するけれど
引数にパレット配列を指定した場合は、画像配列の要素は色情報とでは無く
パレット配列の添字番号を参照するよう扱われて、パレット配列の色情報を元に描画するので
パレット配列にGSAVEで取り込んだ配列を使うと、画像配列は座標情報に置き換え可能・・・
っていうのがやりたいことで
レンダリング関数の中のARYOP命令の使い所さんで詰まってるんですよね?
まず一つの点の座標で考えてみて、どの点でも当てはまる式が出来上がったら
最終的に積和で1次元配列に整形してGLOAD命令に渡すようにしてみたらいいんじゃないんです?
(当方追加コンテンツ未購入組なので動作確認できず相すみません)

あとGSAVE・GLOADほとんど使ったこと無くて検証してたら年明けちゃったんで あけおめ
アバター
たんじぇ 2019/1/1 14:08 ◆WDmFkVwZ4yMl
コード見てみた。

GLOAD/GSAVEの仕様ではなくて、3次元の数学を知らないとサッパリだけど、数学を知っていれば仕組み自体は理解できるコード。

変数が長かったり読みづらかったりするのはBASIC的にしょうがなくて、区切りが分かりづらいのは大文字小文字を使うと少しは見やすくなるけど、そういうのはもう個人の書き方と読み方とスタイルなのでしょうがないところ。


やりたいことは「3次元アフィン変換」と「射影変換」だと思うので、その辺を調べてみるといいかもです。

さすがにこの辺はソラで説明できるほど書き慣れてはいないのでいつも資料参考にしています。

プチコンで3次元処理するときにオススメ本だとこの辺。

「BASICによる図形処理テキスト」
https://www.amazon.co.jp/dp/4990064011/

初版は1986年で大昔のBASICの書き方なのでプチコン用にちょっと書き換えたりとか、定数定義を先にしたりとかした方が良いです。

大昔のBASIC時代の3Dグラフィックがまだ発展していない頃の本なので、3Dを構築する仕組みの基礎が分かるのもオススメです。
アバター
Ryou Tanpo 2019/1/2 10:56 ◆AI5iRr9FjmkJ
まあ……なんか自分でも訳が分からなくなりそうですが
GLOAD や GSAVE 、 ARYOP の使い方は理解してます。

例えば 2軸回転して表示したい元の画像を I[]
GLOAD する出力配列を例えば O[] として
それぞれの画素 ( 必ずしも 1x1 ではない ) 、つまり O の各要素について、( 今のところは知識不足なので分からないけど ) 何かしらの 3D の変換を行って I[] のインデックスを計算したい、という感じです。
インデックスは X と Y で分けて計算して、あとで1次元配列になるように X+Y*W とすれば表示できるかな……
と思ったけどやはり説明できてない……
アバター
Ryou Tanpo 2019/1/2 10:59 ◆AI5iRr9FjmkJ
コメントありがとうございます。今も色々試行錯誤? してます。
アバター
たんじぇ 2019/1/2 18:06 ◆WDmFkVwZ4yMl
座標変換系がちゃんと動いてないけど途中版
[Y34N3381]

前に紹介した本のコードをベースに、3軸回転処理を実装してみたけど、配列要素がview座標(画面のドットに対する座標)になっていて、計算結果が resource座標を表すので、単純にARYOPで resource座標を回転させるだけだと、回転しているようでなんかおかしいって状態になります。

たとえば座標(50,30,0)がX軸72度ほど回転して(50,10,-28)になったときに、view座標の(50,30)がresourse座標の(50,10)を参照してしまうので、
これをview座標の(50,10)がresource座標の(50,30)を参照しないようにしないといけないです。

変換処理はARYOPを使わずに配列1回のループで書いているけど、ARYOPの回転処理だけだとBIGで 40fps なのに、変換処理を入れると 6fpsまで落ちます。
(IF 0 THEN を入れているので 1 にして確認できます)

このへんをARYOPで実現するには、回転の計算式に埋め込んであげるか、別のやりかたを考える必要があるかもしれません。

ちなみに回転処理はいろいろ調べればでてくるけど、この辺も参考になるかもです
http://www.f.waseda.jp/moriya/PUBLIC_HTML/education/classes/infomath6/applet/fractal/coord/

(図形処理テキストの本のほうにはBASICコードで書いてあるのでわかりやすいかもです)
アバター
ツララ 2019/1/3 10:58 ◆ArUdBYOYME1V
うぉ!これスゲェ!
試しに2重FORループでZ軸回転させてみただけでもメチャ速い!
GSAVEとGLOADとARYOPって、こういう使い方を最初から想定して実装してた命令なんじゃないかと思えてきた。
公式にサンプルコード配布とかすれば追加コンテンツ購入する人増えそう。
あ、もう公開キー消してOKです?

>たんじぇさん
確かに変数名の設定は人それぞれでしょうけど
碌な解説コメントも無しにコード見て察してってレベルじゃないでしょうアレ
だったら理数系の人以外お断りって書いてて欲しいですよ。
見てすぐ分かるんなら
何で分からないなりに一緒に分かろうとする人がコメントするくらいまで放置なんですか。
それにいきなり欲張って3軸とかやらなくても
各軸でのルーチンを完成させてから、処理する順番を考えるようにすればいいだけなんじゃないんです?
参考情報だけポンッっと置いて、置いてけぼりはどうかと思いますけど。
アバター
たんじぇ 2019/1/3 14:37 ◆WDmFkVwZ4yMl
>ツララさん
あれ?追加コンテンツ購入してないからARYOP動かないって言ってた気がしたけどBIGで確認?それとも独自にZ軸回転コードを書いてる?

そしてその後のコメントは 要約するとアルゴリズム分かってない僕をかまってよにしか見えないんですがそれでいいです?

まず、今回の質問は「2軸回転して 3D 風に表示するプログラムを ARYOP で作っている」って時点でプチコン命令のみの話ではなくてアルゴリズムの話であるし、その質問の回答について「3次元アフィン変換」と「射影変換」というキーワードを返しているわけです。

ここでアルゴリズムをいちから詳しく説明してください、っていうのは、プチコン始めたばかりなので全部おしえてください、っていうのって同じなんです。

アルゴリズムのプチコンも知らなくちゃ行けない前提がたくさんあってここじゃ説明しきれないので、キーワードや説明サイトで調べてもらうしか無いんです。
それをアルゴリズム分からないからここでちゃんといちから教えてくれって言ってるんですけどそれでいいです?

ちなみにコードには、配列に色ではなくて座標が入っていること、ARYOPの部分を直したいこと、2倍しているだけのサンプルコードがちゃんと書いてあって、それを踏まえてコードを読むと、こういうことをしているんだということが分かるコードになっています。

ツララさんはお題があればコードを書く人なんだから、アルゴリズム解析も投げ出さずに調べてみると良いですよ。


ちなみにZ軸回転ならすでにSPROT, BGROT という命令があるので、X軸Y軸回転の2軸という意味ではあると思うけど、回転ロジックとしてはどれも似たようなモノ(最適化すれば関数化は出来る)なので、欲張ってといわれてもアルゴリズムがそういうモノなのす。
アバター
Ryou Tanpo 2019/1/3 16:55 ◆AI5iRr9FjmkJ
両方ともダウンロードしました、ありがとうございます!
ソースコードやサイトなど色々参考にしています。
実は一度おちゃめさんの2軸回転プログラムを ARYOP 化して成功したんですが……プロジェクトごと消してしまったのですorz
アバター
Ryou Tanpo 2019/1/3 16:57 ◆AI5iRr9FjmkJ
ダウンロードしたので公開キーは消して大丈夫です。ありがとうございます!

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -