初めまして。
率直な疑問で、こちらのフォーラムに投稿するか迷ったのですが、
3D技術体系、いわゆるdirect XやOpenGL等を含むAP Iを利用せず、
フルスクラッチで1から3D描画(擬似3D含)を製作するおとって可能なんでしょうか?
Wikipediaを見ると、ほぼ3Dソフトはプロプライエタリとなっており、
現状、それら(direct X等)を用いる必要がある、とのことですが。
ちょっと疑問に思いましたので、
こちらのフォーラムにて質問させていただきました。
的外れでしたら、申し訳ありません。
3Dグラフィックス技術について。
Re: 3Dグラフィックス技術について。
(全部CPU上でやると処理が厳しいとかそういう話を度外視するならば)可能でしょう.
少なくとも何かしら「絵を表示する手段」が必要ですよね.
で,とりあえず2Dな絵を表示するための何かしら存在するのであれば…
プログラムが扱っているデータの概念が3Dであろうが,最終的な絵というのは2Dなのですから,2Dな絵を(いろんな必要な計算をした結果として)作り出すコードを書けば良いです.
そしたらその作った絵を2Dな絵を表示する手段で表示する.完遂!
…っていう話になるかと.
少なくとも何かしら「絵を表示する手段」が必要ですよね.
で,とりあえず2Dな絵を表示するための何かしら存在するのであれば…
プログラムが扱っているデータの概念が3Dであろうが,最終的な絵というのは2Dなのですから,2Dな絵を(いろんな必要な計算をした結果として)作り出すコードを書けば良いです.
そしたらその作った絵を2Dな絵を表示する手段で表示する.完遂!
…っていう話になるかと.
Re: 3Dグラフィックス技術について。
難易度については,何を実装するか次第でしょうけど
OpenGL みたいなのを使うにしても,3Dな各種事柄を何も知らずに使えるような物ではなくて,そういった素朴な3D描画のコードであれば自前で書けるくらいの知識は必要な気がします.
(ライブラリを使うにしても,シェーダのコードを書くタイプなら,そういった演算そのものをプログラマが書く必要があるのだし)
- 描画できるものは三角形のポリゴンのみ
- 使える光源は1個のみ
- 処理速度はまぁ気にしない方向で
OpenGL みたいなのを使うにしても,3Dな各種事柄を何も知らずに使えるような物ではなくて,そういった素朴な3D描画のコードであれば自前で書けるくらいの知識は必要な気がします.
(ライブラリを使うにしても,シェーダのコードを書くタイプなら,そういった演算そのものをプログラマが書く必要があるのだし)
Re: 3Dグラフィックス技術について。
というわけで,目的は「各ピクセルを何色にするか」っていうのを2Dな絵の全ピクセルについて決定する(計算する)ことですから,それを実際にどうやって計算するのか? という話(アルゴリズム)を実装すればよいです.
「レイトレーシング法」 とか 「Zバッファ法」 とかそういう話をググれば,3Dグラフィクスに関するそのあたりの処理の雰囲気が掴めるのではないでしょうか.
光源を意識した色の決定方法(シェーディング)については「スムーズシェーディング」とかでググれば,フォンとかグーローとかそういうのが見つかるでしょう.
視点の位置だとか遠近感(透視投影)だとかいう話は純粋に 算数/数学 の世界です.
「レイトレーシング法」 とか 「Zバッファ法」 とかそういう話をググれば,3Dグラフィクスに関するそのあたりの処理の雰囲気が掴めるのではないでしょうか.
光源を意識した色の決定方法(シェーディング)については「スムーズシェーディング」とかでググれば,フォンとかグーローとかそういうのが見つかるでしょう.
視点の位置だとか遠近感(透視投影)だとかいう話は純粋に 算数/数学 の世界です.
Re: 3Dグラフィックス技術について。
オフトピック
画像を表示する手段を用意することが厄介な場合,
表示手段自体はprintfとかでもなんとかなるかもしれません.
あるいはてきとーな形式の画像ファイルに出力する(そしてそれを画像を見れるソフトで確認する)といった形に割り切ってしまうならば,表示系も不要.
表示手段自体はprintfとかでもなんとかなるかもしれません.
あるいはてきとーな形式の画像ファイルに出力する(そしてそれを画像を見れるソフトで確認する)といった形に割り切ってしまうならば,表示系も不要.
Re: 3Dグラフィックス技術について。
御返事ありがとうございます。
詳細な御返事、誠に感謝です。
自分の浅はかな知識の範囲ですが、
成程、と思いました。
例えば、フルスクラッチと書きましたが、
Windows APIで、ウィンドウを作成し、
そこに単純な図形を描画、
続いて透視投影等を用いつつ、、、
とやれば、勿論、direct 3DやらOpenGL等のクオリティは、
期待しておりませんが、
可能な気がしてきました。
まあ、だからといって、1から作るよりも、
既存の3Dライブラリや当サイト様のD Xライブラリをお借りしたほうが現実的ですね。
3Dグラフィックスに関心があったので、
質問させていただきました。
ありがとうございます。
詳細な御返事、誠に感謝です。
自分の浅はかな知識の範囲ですが、
成程、と思いました。
例えば、フルスクラッチと書きましたが、
Windows APIで、ウィンドウを作成し、
そこに単純な図形を描画、
続いて透視投影等を用いつつ、、、
とやれば、勿論、direct 3DやらOpenGL等のクオリティは、
期待しておりませんが、
可能な気がしてきました。
まあ、だからといって、1から作るよりも、
既存の3Dライブラリや当サイト様のD Xライブラリをお借りしたほうが現実的ですね。
3Dグラフィックスに関心があったので、
質問させていただきました。
ありがとうございます。
Re: 3Dグラフィックス技術について。
> Windows APIで、ウィンドウを作成し、…(中略)… 可能な気がしてきました。
そういうことを一度はやってみると良いだろう,と思います(何ならワイヤーフレームでも).
実際の(本番の?)3DなAPPを作る際には何かしらのライブラリを使うとしても.
(理由は既述した通り,ライブラリを使うにしてもそのこと自体,行われる演算とかの内容を何も知らない状態でやれる話ではないと個人的に思うから)
そういうことを一度はやってみると良いだろう,と思います(何ならワイヤーフレームでも).
実際の(本番の?)3DなAPPを作る際には何かしらのライブラリを使うとしても.
(理由は既述した通り,ライブラリを使うにしてもそのこと自体,行われる演算とかの内容を何も知らない状態でやれる話ではないと個人的に思うから)
Re: 3Dグラフィックス技術について。
オフトピック
そういや,大昔にこんなのやってましたね.
(そのとき貼ったソースは「zip がどうの」とかで失われているようだが)
(そのとき貼ったソースは「zip がどうの」とかで失われているようだが)
Re: 3Dグラフィックス技術について。
東上☆海美☆「
大昔に、NEC PC-9801 用に、640x400 の内の 512x400 を 256x200 に見立てて、8 bit レジスタを駆使して、
三角形の高速描写を、一生懸命やっていたことがある。まぁ、256x200 からはみ出る三角形になると破綻するわけだが。
暇が出来たら、64 bit 環境で、三角形描写に、また挑戦してみるかのう。画面からはみ出る三角形は、無視して描かない、という方針で。
」
大昔に、NEC PC-9801 用に、640x400 の内の 512x400 を 256x200 に見立てて、8 bit レジスタを駆使して、
三角形の高速描写を、一生懸命やっていたことがある。まぁ、256x200 からはみ出る三角形になると破綻するわけだが。
暇が出来たら、64 bit 環境で、三角形描写に、また挑戦してみるかのう。画面からはみ出る三角形は、無視して描かない、という方針で。
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。