No.1ベストアンサー
- 回答日時:
★私も『花火プログラム』には興味があります。
・ただ、どこまで忠実に再現するのかな?
・まず火薬が下のほうから昇っていきますが、物理法則の重力加速度なども計算に入れて、
上に昇るほど速度を遅くします。そして、ある地点で速度がゼロ(無重力)状態になるので
ここで『炸裂』するタイミングになります。
・『炸裂』するときは同心円状に外側に点線で円を描いていきます。でもね、乱数をちょっと
だけ使って拡散します。この『拡散』の仕方で『花火プログラム』の見栄えが決まると思います。
・それから、拡散と同時に重力により『火の粒』が下へ落下する処理もちょっとだけ加えます。
よって、『拡散中』には外側に『火の粒』が広がりますが、しばらくしたら下方向への落下を
取り入れます。→物理法則の重力加速(9.8g)を参考に時間のタイミングを計算します。
・また花火の種類によっては、下から『火の玉』が昇って無重力状態の時に一瞬だけ消えて
一気に『拡散』した円(スプレー状)をちらちらと描画していけば『爽快な花火』を再現できると
思います。
最後に:
・重要なのは『重力』という概念をプログラム上で再現することと、『花火』の種類によって
アルゴリズムを変える必要があることです。物理法則の重力加速度を使わなくても感覚的に
徐々に速度を遅くして打ち上げたり、重力を再現すれば良いのです。
・以上。おわり。→上記のは 2D でのお話です。3D でも考え方は同じだと思います。
ご回答ありがとうございます。
主に炸裂した後の話ですが、火の粉一つ一つについて現在位置、各方向への速度、各方向への加速度、輝きの強さをその都度計算して表示するということですね。
なるほど、これはかなり悩み甲斐のある命題ですね。
ありがとうございました。
No.3
- 回答日時:
面白そうなことをやっていますね。
がんばってください。花火のアルゴリズムなんか全く考えたことはないですが、火の粉の拡散のアルゴリズムは、重力、爆発時の斥力とかを考慮すれば大体うまくいくのではないでしょうか。あとは火の粉がさらに小さい火の粉に拡散したりするので、再帰的なアルゴリズムにしなければならないかもしれませんね。
それはさておきグラフィックのインタフェースは何を使用されるのでしょうか。3次から2次へ変換とか書かれていますし、VBを使うということなので、GDIを使って描画するということでしょうか?GDIは普通に四角形とかを描画するだけでも結構時間がかかるのでお勧めしません。
DirectXがいやなら、OpenGLでも使ってみてはいかがでしょうか。
回答ありがとうございます。
やはり、GUIは標準のAPIだけでは難しいでしょうか?
そうしようと思っていたのですが…
3D→2D変換は、古くから知られている行列の掛算?でしたか、あれを使おうと思っています。内容は忘れているのでこれからなんですが、火の粉の拡散状況を3Dで計算→2Dに座標変換→GDIで描画といった手順で考えてます。
ずいぶん昔、まだWindows3.1だったころ、多重の円をVB2で描画したことがありますが、あの時のように画面がチラチラして使い物にならないでしょうか?
いづれにせよ、まだ頭の中で考えているだけなので、何か具体的な問題が勃発したらまた質問させて頂こうと思っています。
なので、その時はまたよろしくお願いします。
ありがとうございました。
No.2
- 回答日時:
★追記。
・花火以外に『湖』に反射した花火を描画してみるのはどうでしょうか?
『湖』の場合は、上下でミラーのように『上』から『下』に火の玉が昇っていく
タイプになります。また、『湖』の場合は『円』ではなく横長の『楕円』にして
描画すると『光の屈折』などを表現できると思います。
・あと背景にはちょっとした『建築物』などを薄く(半透明)で描くのも良いでしょう。
・さらに打ち上げのときに火の玉の『軌道』を再現して残像のような形で消えるまでを
タイマーなどで遅延処理します。また『炸裂』した『火の粒』も消えるまでの時間を
乱数などでばらつかせて、落下と同時に消えるように工夫すると臨場感が出るかもね。
最後に:
・複数の花火を同時、あるいは左から順番に遅延処理で打ち上げるなどのパターンも
取り入れると良いでしょう。→オプション設定で変更したり、定義ファイルで記述
出来るようなインターフェイスも面白いです。
・それから、手前と奥行を花火の大きさと小ささで表現するとかなり『リアルな花火』
になると思います。
・私も去年の 8 月に簡単な『花火ソフト』を作成しようと思いましたが、上手く仕様が
決まりませんでした。そのため保留になっていましたが、この質問を見てやっぱり今年
『ミニ花火ソフト』を作ろうと思いました。
・以上。おわり。→お互いに頑張りましょう。
度々ありがとうございます。
飛んでゆく火の粉の軌道を残すことは私も考えていました。炸裂して飛んでゆく火の粉も、打ち上げられた花火から残る火の粉も同じ理論で計算できますね。ひとつの花火で数百個の火の粉が出るとして、そんなにたくさん一度に描画できるのかというところが心配です。(DirectXは使いたくないですし…)
何れにせよ、ありがとうございます。やっぱり私は3D空間で計算して描画する方向で考えて見ます。3D⇒2Dの座標変換を勉強しなければいけないですが…
Oh-Orangeさんの創作意欲にも火をつけてしまったようで…
まぁ、ぼちぼち頑張りましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 片思い・告白 高校生の恋愛話聞いてください 2 2022/09/10 16:16
- その他(行事・イベント) 花火イベントでのごみ問題 7 2023/08/14 07:49
- 日本語 百円ライターの分別と再利用について 4 2023/08/02 11:14
- 輸入バイク プラグをボディアースしてセルを回しても火花が飛ばない 5 2022/12/26 00:22
- 工学 スパイ大作戦のテープレコーダから出る火花や煙は、何を示しているでしょうか? 4 2022/12/03 15:19
- 写真 携帯で花火の動画を綺麗に撮りたいです 2 2023/08/07 02:56
- TOEFL・TOEIC・英語検定 2014年に購入した英文法書でTOIEC対策をしてもよいか? 1 2023/01/08 11:41
- 宇宙科学・天文学・天気 『月』 6 2022/11/22 21:13
- 流行・カルチャー 二次創作の二次創作(三次創作)はパクリではないか 3 2023/08/09 16:55
- 分譲マンション 古い分譲マンション・管理組合の初、理事長(女性)です。不明点①~⑥についてご意見をお願いします。 7 2022/11/07 13:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
C++/CLIを用いて画像をクリップ...
-
.NETのPictureBoxでウインドウ...
-
C#で壁の当たり判定と自キャラ...
-
delphi 画面のちらつき
-
線を引くには?
-
VB.netで図形描画ができません^^;
-
for文の実行速度を遅くしたいの...
-
PowerPoint の VBA
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
悩みがあろうと、それなりに幸...
-
ユーザーフォームを表示中にシ...
-
「Columns("A:C")」の列文字を...
-
IF文に時間(何時から何時ま...
-
エクセルエラー13型が一致しま...
-
なぜこんな初歩的なVBAのIf文で...
-
VBA(エクセル)で自動的にボタン...
-
VBA listBoxから
-
マクロで、次のコードへ行く前...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
給紙トレイをダイアログを使わ...
-
Word 描画オブジェクトを削除...
-
VB.NETでグラフィックを描くと...
-
C#を用いて描画する四角形の角...
-
C# DrawImage 物理サイズでな...
-
ビットマップに描画をしてピク...
-
PowerPoint の VBA
-
画面に絵を出す方法
-
DrawLineで引いた線が消えてし...
-
VC++ ドラッグしながらの図の...
-
円の頂点の求め方を知りたいです。
-
MFCでのコンボボックスについて
-
画面の再描画について
-
Windows10のC#のピクチャーボッ...
-
フォームに描画して表示をスク...
-
VB PictureBoxの描画範囲
-
PictureBoxのダブルバッファリ...
-
C#で壁の当たり判定と自キャラ...
おすすめ情報