プレイ日記
yuy(α) studio-reader
3dゲームを作るにはまず自前でワイヤフレームを作ることだなと思い、作り始めてみる。 だが、やはり中三の頭脳では難しい。 詳しくはコメントで。
6そうだね
プレイ済み
返信[1]
親投稿
yuy(α) studio-reader
平山尚著の「ゲームプログラマになる前に覚えておきたい技術」によると、3d空間の点を3dsの画面に出るようにするためには、 ワールド座標変換 (3d空間の物体の座標を3d空間全体の座標に変換する) ↓ ビュー変換 (3d空間全体の座標をカメラから見た3d空間の座標に変換する) ↓ 透視変換 (ビュー変換で求めた3次元の座標を2次元の座標に変換する) ↓ 描画 (ようやく描画) という聞くだけでも面倒な工程を踏まなければいけないのだ。しかもこれでもまだ3dcg序の口と考えるとぞっとする。 だが、それが楽しみだったりするのがプログラミング。
0そうだね
プレイ済み
返信[2]
親投稿
yuy(α) studio-reader
ここでベーマガ世代に聞きたいのだが、3dcgの知識はやはり常識的なものなのだろうか?ポリゴンとまではいかなくてもワイヤーフレームとか。 プチコンシリーズで3dcgのプログラムを実装させた人はベーマガ世代が多いので。過去シリーズだとTINY野郎さんだったり、おちゃめさんだったり、最近ではbug太郎さんだったり。
0そうだね
プレイ済み
返信[3]
親投稿
すぎ field2050
当時は速度が遅くて、BASICだけだとワイヤーフレームで表示するぐらいで精一杯だった気がします。常識的ではないでしょう。今でも使っている人はごく一部、苦労して身につけたと思います。 中3だとまだ三角関数を学んでいないので回転移動の理解が難しいのではないでしょうか? 他の言語だとopenGLとかいう便利なものが使えたりして、数学の知識あまり必要でなかったりします。 一応参考まで https://miiverse.nintendo.net/posts/AYMHAAACAAADVHkooQTJjg
0そうだね
プレイ済み
返信[4]
親投稿
yuy(α) studio-reader
この投稿をした後に、もしかしてそうじゃないのかなと思ってしまいましたが、やっぱりでしたか。実現させた人に対する羨ましさのあまりこう書いてしまいました…。 私は三角関数以上に4列にもわたる行列がややこしく感じています。上記で挙げた本はC++用なので、ソースコードをそのままひっぱることは出来ないので、本に書いてある内容を頼りに自分でソース化しなければなりません。
0そうだね
プレイ済み
返信[5]
親投稿
MIKI ifconfig
そういえば今って高校でも行列教えないんだっけ?? 基本は x' = a * x + b * y + c * z y' = d * x + e * y + f * z z' = g * x + h * y + i * z という 3 つの式を表すのに [x'] [a b c] [x] [y'] = [d e f] [y] [z'] [g h i] [z] と一つの式で書けるという便利な表記法ね。 3DCG の場合は奥行きとか表す都合で 4 次元になってしまうというだけのはなし。 理解済みでしたら失礼しました。
0そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
計算が大変だったら xmaxima というフリーの数式処理ソフトがあります。 X : matrix([x],[y],[z],[t]); 行列 X の定義 A : matrix([a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p]); 行列 A の定義 A . X; 行列の掛け算 [ c z + b y + a x + d t ] [ ] [ g z + f y + e x + h t ] [ ] [ k z + j y + i x + l t ] [ ] [ o z + n y + m x + p t ]
1そうだね
プレイ済み
返信[7]
親投稿
yuy(α) studio-reader
そうなのか!でも中学で三平方の定理やりましたし、私達が高校になったとき、やるんじゃないですかね。三角関数と関係ありますし。 まぁそれはともかく、行列は分からなかったので父親に聞いて、行列計算の仕方を少し教わりました。 今日の勉強を終わらせたら、パソコン借りて上記の本のサンプルソースを覗いてみますね。
0そうだね
プレイ済み
返信[8]
親投稿
yuy(α) studio-reader
あ、ソースコードを見る理由はちょっと本だけでは理解が追い付かない部分があるからです。 他の本もあったのでそちらも参考に。こっちはpc88シリーズのbasic用の本なので、ソースコードに関しては再現性が高いですね。 ただ、古さ故にリアルタイムでの描画は想定されてなく、解説図が当てにならず、説明がややこしい…
0そうだね
プレイ済み
返信[9]
親投稿
yuy(α) studio-reader
タイトルは「PC8801/mkII/SR 3Dスーパーグラフィックス」(1985年/秀和システム)。参考文献が海外だったり、雑誌(?)だったりするあたり、当時は珍しいジャンルだったみたいだ。 そういやさっき挙げた本も秀和システムだこれ!
0そうだね
プレイ済み
返信[10]
親投稿
すぎ field2050
今はネット環境があるので、回転移動、投影変換で画像検索をかけて参考になりそうな絵のサイトを見てみるのもいいかもしれません。
0そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
私がポケコンでワイヤーフレームに挑戦した80年代は何の情報もなくすべて自力のみ作りました。 幸いにして中学の時点ですでに高校数学の全教育課程を自力で終了させていたため特に困ることは無かったのですが手探り状態で作ったため結構完成までは長い時間がかかったしポケコンでは立方体1つ表示するのに数秒も時間がかかりリアルタイム表示は無理でした。 プチコンmkIIで作ったポリゴン表示プログラムはネットでの情報によってポリゴン初挑戦だったものの1日でできちゃいました。完成まではもう少しかかっているのですがかかった時間のほとんどが最適化処理の時間とUIを作るための時間です。mkIIならば立方体がワイヤーフレームで120fps程度、ポリゴンで20ps程度と十分なリアルタイム表示が可能ですね。(さすがに152ポリゴンのアンドアジェネシスは重いですが)
0そうだね
プレイ済み
返信[12]
親投稿
yuy(α) studio-reader
なんと自力でしたか。 実は私がこのようなことに興味を持ったのは、上記の古い3dcgの本と、おちゃめさんがポリゴン表示プログラムを組んだからなのです。そのプログラムに実装されていないテクスチャ機能を実装しようとして、そのためにおちゃめさんに質問したり、色々やり方を調べたものです。結局できませんでしたが、3dcgに興味をもつきっかけとなりました。 しかし、やはり壁は高い。
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
テクスチャの実装方法にはいくつかありますが、最も単純なのは画面の座標を元にテクスチャ座標を計算してその部分をスキャンしてドット表示という流れです。端的に言えば逆行列を演算すれば良いです。三角形表示プログラムではラインごとでしたが、それをドットごとに行う感じです。 mkII版でも実装を試みようと考えましたがあくまで「リアルタイム表示」がウリなので立方体表示でさえ1fpsにも満たなくなるのでやめました。 プチコン3号ならば十分リアルタイム表示(ボタンやタッチ操作にある程度追従するレベル)ができるでしょう。 私が放置しているポリゴン表示プログラムは表示のみだとテクスチャ対応で9000ポリゴン/秒程度なので立方体では最大800fpsくらいで表示が可能だと思います。(あくまで理論値) ポリゴンが難しければまずは正方形の画像をパース変形して台形にしてみることから始めてはどうでしょうか。
0そうだね
プレイ済み
返信[14]
親投稿
yuy(α) studio-reader
>おちゃめさんへ すいません、私が言いたかったのはそう言うことではなくて…
0そうだね
プレイ済み
返信[15]
親投稿
yuy(α) studio-reader
(もしくは感謝するには早すぎるということなのか) まあ、とりあえず完成を目指します。 後、「ゲームプログラマ」のソースコードや書籍を読んでいるうちに、私は重大な事に気がつきました。 この解説はGPUの機能を利用することを考慮に入れた解説だったのです。 当然プチコンはそんな大層な物を使ってポリゴンを表示することなどできません。GPUを使わないとなると、結構な変更になりますね…
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
GPUの機能を使わずに「テクスチャの実装」というのは要するに表示したい形状に合わせて元画像(テクスチャ画像)を「パース変形」すればいいだけのことなんです。 「正方形の画像を台形にパース変形する」というのは非常に多くの選択肢があるし、正方形から台形に変形する時点でカメラ位置が確定するので三角形から別の三角形に貼り付けるよりも容易であるためです。 また、マインクラフトのようなゲームを作るならば三角形のテクスチャを三角形に貼り付けて表示するよりも合理的です。
0そうだね
プレイ済み
返信[17]
親投稿
yuy(α) studio-reader
三里の道も一歩からということで、一本プログラムを打ってみました。 公開キー【Y34KQDZ6】 スクリーン座標に変換する元々の座標を変換後の座標に書き換えて表示がおかしくなったことに気づかず作り直したことは内緒。 この処理だけならあまり行数かからない。スペースハリアーもこんな感じなのかな。
0そうだね
プレイ済み
返信[18]
親投稿
yuy(α) studio-reader
>おちゃめさんへ 解説ありがとうございます。テクスチャについては後々、そうですね、生のポリゴン表示を実装できた後でも全然遅くないですね。 まあDOOMとかSeena2とかの3dゲーム見ると昔のpcでどうやって!?プログラマすげぇ!とは思いますが、あまり突っ走っても、事故るだけですし。 それとも私ら若者は事故る位がちょうどいいのかしら。
0そうだね
プレイ済み