1 名前:名前は開発中のものです。 mailto:sage [2009/12/04(金) 16:49:13 ID:7SKA4I5z] Cを習得した程度のスキルでも、 GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 【公式】 homepage2.nifty.com/natupaji/DxLib/ 【過去スレ】 DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/ DXライブラリ 総合スレッド 2008 pc11.2ch.net/test/read.cgi/gamedev/1224923873/ DXライブラリ 総合スレッド その3 pc11.2ch.net/test/read.cgi/gamedev/1238429676/ DXライブラリ 総合スレッド その4 pc11.2ch.net/test/read.cgi/gamedev/1249822550/
856 名前:名前は開発中のものです。 mailto:sage [2010/02/06(土) 15:27:53 ID:hilmmGtE] 静止画1枚だとフリーズしてんのかな?って不安になる
857 名前:名前は開発中のものです。 mailto:sage [2010/02/06(土) 16:16:36 ID:+7JZw7l0] カクカクでもいいならマルチスレッド必要ないよな
858 名前:名前は開発中のものです。 mailto:sage [2010/02/06(土) 16:21:12 ID:AjOTNEN+] せめてNowLoading... [ ココ ] で何かのアニメーションはさせたいよね
859 名前:名前は開発中のものです。 [2010/02/06(土) 22:28:44 ID:fMJ0B1gK] そこは操気弾のアニメを
860 名前:名前は開発中のものです。 [2010/02/06(土) 23:38:51 ID:cCb1U7aq] これって3dもつくれるんだよね? Blenderにも対応してる?
861 名前:名前は開発中のものです。 mailto:sage [2010/02/07(日) 07:39:53 ID:cnkJTmx7] >>860 >これって3dもつくれるんだよね? 作れるよ。 >Blenderにも対応してる? モデリングソフトの対応状況は過去レスを見てみて。 BlenderはFBXが使えるみたい。
862 名前:名前は開発中のものです。 mailto:sage [2010/02/11(木) 23:41:27 ID:AgKonL0C] メタセコで武器だけ作って、それを3Dのキャラモデルに持たせるのはどうやるんだろう。 DXライブラリの範疇ではないのかな。 なにか調べる取っ掛かりはない?
863 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 02:48:39 ID:iGppiI+j] 位置とか角度の親子関係を作れればいいんじゃないかな
864 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 04:35:23 ID:Z51oc7q7] >>862 DXライブラリは知らんけどリアルタイムレンダリングがデフォじゃない?
865 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 07:46:33 ID:gSVuHgsF] >>862 「コンストレイント」で検索してみるといいよ。 やり方は簡単で>>863 の言う通り、「手」の移動と回転を「武器」に加えるだけ。
866 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 15:42:11 ID:9oJmNhGP] DrawChipMapってどうやって使うの
867 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 21:24:07 ID:m/RgGbdM] GetNowHiPerformanceCount()の内容をprintfしたいんですが%dの部分を何に変えたらいいですか
868 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 21:53:10 ID:5g1bekrX] g
869 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 22:17:37 ID:gSVuHgsF] >>867 試してないけど戻り値がLONGLONG型なので「%I64d」か「%lld」じゃないかな。
870 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 22:39:37 ID:3A3ijQ60] >>863-865 サンクス! やり方、納得です。 取り敢えず手の回転並進行列とって、そのまま武器に適用させてみる。
871 名前:名前は開発中のものです。 mailto:sage [2010/02/12(金) 23:19:30 ID:gSVuHgsF] >>866 チップグラフィックを使ったマップ描画 int MapWidth, MapHeight : マップデータ全体の幅と高さ int *MapData : マップデータが格納されたアドレス int ChipTypeNum : マップに使うチップの種類の数 int *ChipGrHandle : チップのグラフィック配列のアドレス int TransFlag : 透過色処理の有無 int MapDrawX, MapDrawY : 描画するマップの起点となる左上座標 int MapDrawWidth, MapDrawHeight : 起点座標から描画するマップの幅と高さ int ScreenX, ScreenY : マップを描画する画面上の座標 (2004/02/08) 2.11 DrawChipMap 関数を非公開関数に変更。
872 名前:名前は開発中のものです。 mailto:sage [2010/02/13(土) 00:47:58 ID:lykIm1Dn] >>868-869 サンクス! lldでいけました。
873 名前:名前は開発中のものです。 mailto:sage [2010/02/13(土) 18:36:09 ID:nVI35ftX] 1つの画像に対して、縦横で別倍率の拡縮、および回転を同時に行うとき、 何か簡単な方法って無いものかな? 拡縮してから回転させたときと、回転させてから拡縮するときとで結果が異なるけどさ。 無いなら無いで、自前で座標を計算してDrawModiGraph()に投げるつもりだけれど。
874 名前:名前は開発中のものです。 mailto:sage [2010/02/13(土) 19:30:01 ID:pV6Ocbxc] ないので俺は自分で関数作った
875 名前:名前は開発中のものです。 mailto:sage [2010/02/13(土) 22:38:54 ID:nVI35ftX] そっか、ありがと。
876 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:14:56 ID:9DOaOyQ2] 半透明処理で ClearDrawScreen() SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・ DrawGraph(・・・ ScreenFlip() って書いたら、1箇所使っただけなのにかなり処理が重くなる DrawGraphが悪い? フレームスキップするしかない?
877 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:20:54 ID:lH/o5bwf] いや、俺普通に何箇所も使うけど重くなんないよ? 本当にその四行だけで試してみた?
878 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:21:28 ID:I7ZtRrpB] フレームスキップは基本過ぎるだろ
879 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:24:26 ID:9DOaOyQ2] >>877 ClearDrawScreen() SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) DrawGraph(・・・ // 普通の画像 SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・ DrawGraph(・・・ // 半透明させるの画像 SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) DrawGraph(・・・ // 普通の画像 ScreenFlip() こうやってます 画像を重ねる都合上、 SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) を2回やってます もっと効率よい方法があるんでしょうか?
880 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:26:43 ID:9DOaOyQ2] >>877 フレームスキップってどうやればいいでしょうか? 画面処理を別スレッドにして、処理時間オーバーしたら放棄、 でいいの?
881 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:27:36 ID:9DOaOyQ2] すみません 880 は >>878 へのレスです
882 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:32:50 ID:r2nQlTSv] >>879 いちいち戻さない方が速いかも
883 名前:名前は開発中のものです。 mailto:sage [2010/02/14(日) 21:34:14 ID:I7ZtRrpB] >>880 ググれば幾らかサンプルコードが出てくる。確か龍神録でも触れてたと思うし。 PC上で動くゲームを作るのなら秒間60回更新するように調整するのは基本中の基本。 DXLIBに限った話じゃない。CPU使用率が異常に高かったりしたら間違いなくこっちの問題でしょ。
884 名前:879 mailto:sage [2010/02/14(日) 21:58:05 ID:9DOaOyQ2] 3番目の↓ SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) DrawGraph(・・・ // 普通の画像 が処理を重くしてる原因だったので、これを削ることにしました ありがとうございます 龍神録というサイトを初めて知ったので、質問してよかった >>883 ありがとうございます
885 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 08:08:26 ID:BUryD20y] 何故そこだけ問題があったんだろう。気になる。 >873だが、色々な変形に対応させようと思うと結構面倒だな。引数も増えるし。 回転と拡縮だけにしてしまうか。 ……とここまで書いて、 画像クラスを作ってしまえば簡単だということに気づいた。
886 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 20:26:12 ID:ccjc3ij8] 平面だけでいいなら2*2行列に行列演算を繰り返して 最後にその4点にあわせてDrawModiGraphするってのが汎用的で記述もわかりやすくていいんじゃね? どっかからできの良い数学ライブラリ持ってきてもいいし 回転拡大スライド程度なら簡単な行列計算だけに絞れるから自分で作ってもいい
887 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 20:55:41 ID:BUryD20y] 行列とか完全に忘れてて愕然とした orz >>886 結局のところ、妥協して回転、拡縮、左右/上下反転の3つだけ関数にしたんだが、 どっちかっていうと、コーディングよりも設計に悩んでた。 変形する順番によって最終的な結果が変わる場合があるから、 それらに対応しようとすると、その分だけ引数も増えるわけで、結果として使いにくい関数になっちゃうのよね。 で、画像をクラスにして ImageClass img; //中略 img.rotate(3.14); //180度回転 img.extend(1.0,2.0); //縦2倍 img.rotate(1.57); //90度回転 img.draw(0,0); //0,0に描画 とかでも良かったかな、と思った。
888 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 21:00:03 ID:K58uOKXK] ・画像内での基準点の位置 ・上の基準点が実際に描画される位置 ・基準点を中心としたスケール ・基準点を中心とした回転角度 で十分だと思うけど
889 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 21:57:09 ID:BUryD20y] >>888 それだけで引数7つあるぜ? 各変形の優先度を決める(もしくは同じ変形を複数回行う)とか、 回転と拡縮以外の変形も出来るようにするなら、どれだけ増えるんだ。
890 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:01:20 ID:8F/ucvej] 回転と拡大縮小って別に順不同じゃね 基点となる座標が変われば別だが
891 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:17:52 ID:BUryD20y] >>890 ゲームの都合上、縦横で別々に拡大率を設定できるようにする必要があった。 正方形を、90度回転させてから、横に2倍 □□ → ■□ → ■■□□ ■■ → ■□ → ■■□□ 横に2倍にしてから、90度回転 ■□ □□ → □□□□ → ■□ ■■ → ■■■■ → ■□ ■□ みたいに変わる。
892 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:23:00 ID:8F/ucvej] >>891 それって渡す引数のほうを工夫すればいいんでねーの 二つ目は90度回転してから縦に二倍しても同じものを得られるわけだし DrawExRotaGraph2(int x,int y,int cx,int cy,double ExtRateX,double ExtRateY,double Angle,int GrHandle,int TransFlag,int TurnFlag); 10個だな
893 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:29:12 ID:BUryD20y] >>892 質問、90度以外でも渡し方次第で出来る?
894 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:31:47 ID:8F/ucvej] >>893 出来るんじゃね
895 名前:名前は開発中のものです。 mailto:sage [2010/02/15(月) 22:57:23 ID:ccjc3ij8] 引数が多いと見苦しいし、書く順番でちょっと混乱しそう それに回転と伸縮どっちが優先か見た目に明らかじゃないのも気になる
896 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 00:28:56 ID:ytIVItbu] なんに使うのかがそもそも想像できない俺……。
897 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 03:07:21 ID:JDL3KQO6] >>896 こんな感じでどう? gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0079jpg.html
898 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 04:51:49 ID:iDbvu+FE] >>897 ( ゚д゚)ポカーン
899 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 05:23:23 ID:g5MLEwas] ようやく理解できた
900 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 06:40:46 ID:OQUeahIO] 3Dでやれば簡単だぜ
901 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 09:20:21 ID:aK6xRRB6] 把握。 そういう力技、嫌いじゃないぜw
902 名前:898 mailto:sage [2010/02/16(火) 10:16:29 ID:JDL3KQO6] すまん、いい例えが思い浮かばなかったんだw
903 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 10:17:15 ID:JDL3KQO6] 名前間違えた、897だ
904 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 11:28:24 ID:iwCPzVGw] GetDrawStringWidthの第二引数StrLenはどういう意味があるのでしょうか? マニュアルには > StrLen として文字列の長さをわざわざ指定する ようにしたのは色々な側面から見て文字列の長さを指定できるよう にしたほうが良いと思ったからです。 と書いてありますが、どういうケースで指定が必要になるのか想像がつきません。
905 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 12:41:35 ID:ghUeZnk+] >>904 DXライブラリの作者さんがそう考えただけで、別に必要なければ使わなければいいだけでは? 例を挙げておくとこんな感じ。第二引数は指定できなくても書けるけど複雑になってしまう。 char Str[] = "今日もいい天気だ"; int MaxWidth = 50; // この幅に収まるように描画したい int MaxChar = 0; // MaxWidthに収まる最大文字数 for( int i = 0; i < strlen(Str); i++ ) { StrWidth = GetDrawStringWidth( Str , i ) ; if(StrWidth < MaxWidth) { MaxChar = i ; } } Str[MaxChar] = '\0' ; DrawString( 0 , 0 , Str , GetColor( 255 , 255 , 255 ) ) ;
906 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 12:56:47 ID:iwCPzVGw] >>905 なるほど、理解しました。
907 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 13:02:27 ID:JDL3KQO6] 辛うじて一度だけ使った記憶があるな。 メニュー画面だったかな。文字列をセンタリングして表示するのに利用した。 文字列の前後に空白や記号がある場合、 それらも含めた文字数で横の長さを決めると、ちょっとズレて見えることがある。 ……ぶっちゃけた話、 他にも方法は色々あるだろうとか、メニュー画面くらい画像にしろよとか思うので 使う機会はあんまり無い気がする。
908 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 17:38:15 ID:S7mGVY2n] C/C++以外からDLL経由で使おうとするとnull文字で終わってない文字列とか渡すのに便利です
909 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 21:28:56 ID:QXMNjoNk] >>873 DrawModiGraph()とアフィン変換 アフィン変換 クラスでググるといいかもしれない
910 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 22:33:22 ID:7n/4grgh] 逆に文字列の長さよりもStrLenの方が短い場合とかに使うんじゃね? デバッグ文表示で最後まで表示しないで途中で切ることとかよくあるんじゃね?
911 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 23:25:40 ID:b96KcuEj] アフィン変換か・・・左右反転と拡大縮小って同時にできるもんなんだな、しらなかった でもこれってソースになる元画像を読んでからやるの?格納してからメモリ上の画像をハンドルで指定して操作したりできるんだろうか
912 名前:名前は開発中のものです。 mailto:sage [2010/02/16(火) 23:50:46 ID:QXMNjoNk] あ、左右反転もなのか DrawModiBillboard3Dのがいいと思う
913 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 00:19:59 ID:BMwZx7QF] >>912 いや自分は873ではないんだけれども、参考になったので書かせてもらった。横槍すまんね DrawModiBillboard3Dって左右反転できるのか。x1を右上の座標、x2を左上の座標、x3とx4も同様に交換ってやれば反転するのかな?
914 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 02:18:28 ID:V7zWpnOB] ゲームで銃の連射中の音を作りたい 例えば 「ドッギュウン」て音声のファイルがあったとする。 そのファイルを使って単発発射で「ドッギュウン」、連射で「ドッドッドッドッドッギュウン」ってなカンジにしたいんだけど 音声の再生中かを CheckSoundMemで調べて、再生してなかったら再生してもヨシってすると案の定 「ドッギュウン・ドッギュウン・ドッギュウン・ドッギュウン」ってカンジになってしまう。 なので、ソレをナシにすると1ループごとに再生するんであまりにも早くて 「ドドドドドドドドドドッギュウン」ってカンジになる。 音声の再生位置を調べて、ある程度達してたら再生ってやろうと思ったけどそんな関数は無かった。 だから適当に変数用意して3ループ目ごとに再生ってカンジにしようとしているんだけど…(ゴチャゴチャする気もするが) 一般的なゲームの場合ってこういう時どうしてるの? 音声を二つ「ドッドッドッド」「ドッギュウン」用意して、ボタン押しっぱなし時は「ドッドッド」、離す・もしくは一押しの時は「ドッギュウン」とか?
915 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 02:32:31 ID:ccv1Zplj] ボタン押してる間「ドッ」をループ 離したら「ッギュウン」でいいんじゃねーの?
916 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 05:47:58 ID:9a0E55gk] そんなめんどくさいことしなくても 弾の発射間隔を広げるか、数発ごとに発射音を鳴らすようにすればいいじゃん
917 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 06:26:15 ID:CMLdNZJw] 弾を撃つと開始されるカウンタを作って そのカウンタが条件を満たしたとき音を鳴らせばいいんじゃないの? 1ループごとだと早すぎるんなら1おきにするとかもできる。
918 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 08:34:48 ID:MHINozGj] >>912 自前で変形させるなら、2Dでも3D(ビルボード)でも大差なくない?
919 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 13:16:50 ID:WoQHqNki] >一般的なゲームの場合ってこういう時どうしてるの? FFのデータ見たら、あらかじめ重なった時の効果音も 組み合わせごとにいっぱい入ってて、意外だった とかいう話を、どこかのスレで見たような、見なかったような。 手間と配布方式とかによって変わってきそう。
920 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 19:53:18 ID:b05sIrPr] >>918 カメラ使って視点操作で楽できるからじゃね?
921 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 21:17:38 ID:MHINozGj] ああ、なるほど。 カメラで視点操作ってことは、一括だよな。 メリットでもあるしデメリットでもあるという感じか。
922 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 22:06:32 ID:BMwZx7QF] DrawModiBillboard3Dって描画位置が変にならない? 前にDrawBillboard3DをDrawModiBillboard3Dにそのまま置き換えてみたら同じ位置に描画されなかったから使うのやめちゃったんだけど
923 名前:名前は開発中のものです。 mailto:sage [2010/02/17(水) 22:17:31 ID:V7zWpnOB] >>915-917 多彩な案サンクス!やってみるよ俺
924 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 02:17:33 ID:artpUogb] アフィン変換ってのとDrawModiGraphでよくね? DrawModiGraphで左右反転は入れ替えで普通にできたよ。 アフィン変換の使いやすそうなクラス公開してたりするし、よくわからんまま使えそうだ。
925 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 16:24:17 ID:wXmsheL/] スクリーンではなくバッファに描画するにはどうすればいいのでしょうか? 例えば、画像描画や文字列描画を組み合わせて描画する物である「メニューウインドウ」をバッファに描画して、 それを透過やら拡大縮小してスクリーンに描画したいです。
926 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 16:47:24 ID:S5tbEoCa] >>925 hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1533 これでどう?
927 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 17:21:51 ID:wXmsheL/] >>926 まさに求めていたものはこれです。 ありがとうございました。
928 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 18:10:44 ID:UX2j7dSO] dxlibで書き込める画像って作れるのか・・・ レイヤーシステムどうやって作るのか悩んでたところだよ
929 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 18:19:30 ID:sI5JnKeC] BaseImageでもやろうと思えば出来るんじゃない? SoftImageにも転送付いてたような
930 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 18:37:31 ID:UX2j7dSO] SoftImageは変形とかブレンドを自前でやんないといけなくて面倒だった気がする
931 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 18:41:04 ID:yr41/JmB] >>897 の右側の魔法陣みたいな斜めにして回転、みたいな変換・表示するのにはどうすればいいかわからない・・・。 というか、アフィン変換した画像というか、DXライブラリでどうアフィン変換利用すれば良いかわからないんだけど、 誰か分かる人頼む・・・。
932 名前:873=897 mailto:sage [2010/02/18(木) 19:07:00 ID:7/BIGMNa] 結局アフィン変換がよくわからずに、三角関数で画像を変形させた俺。 おかしいな、大学は理系だったはずなんだけどなー。 行列なんて普通に使ってたはずなのに…… orz
933 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 19:28:11 ID:wsPY0Q5n] >>931 斜めにして回転って2Dでやるほうが難しいんじゃないかな。 DrawModiBillboard3Dってカメラ関数使って斜めから見れるん? >>897 の魔方陣のように傾けて見れるならなんとかなりそうだけど。
934 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 19:30:18 ID:sI5JnKeC] いわゆる「習う」数学は公式を持ってきた後に「解く」からいけない。そこが重要だと思ってしまう 解くのは別にコンピュータがやればいい。大切なのは解き方
935 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 19:40:26 ID:UX2j7dSO] ひょっとして3Dつかって2Dゲーム作る方が楽なのかな 最近はそういうゲームも結構あるよね
936 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 19:43:40 ID:cSNnQmS/] DXライブラリ使ってるならまさにその方式を使ってることになるけど
937 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 20:41:03 ID:S5tbEoCa] >>931 つまり、画像を2回回転させて描画したいっていうことだよね? DrawModiBillboard3D関数の引数x1, y1〜x4, y4に各頂点を2回回転させた座標を指定すればいけると思う。 ビルボードじゃなくてモデルとして扱った方が簡単なような気もするけど・・・
938 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 20:49:00 ID:7/BIGMNa] >>937 自分みたいに3Dサッパリな人間には、モデルデータを用意するだけでハードルが高いからなあ。 そうなると、従来の画像で扱えるビルボードの方が良さそう。 あとは動的に画像を生成するような場合(スクリーンショットとか)にも向いているかもしれない。 モデルデータを使わずにやるなら、素直に2Dでも良いわけだが。
939 名前:937 mailto:sage [2010/02/18(木) 20:57:50 ID:S5tbEoCa] すみません、>>937 に書いた方法はウソでしたorz.. 引数x1, y1〜x4, y4は2次元の変形しか指定できないし、DrawBillboard3D関数にはある引数Angleも無いので3次元の回転は無理そうです・・・ モデルにすればMV1SetMatrix関数で自由に変形できるんだけど・・・ >>931 の作ってるゲームは2Dなの? それなら斜めに傾いている画像を使って下さいw
940 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 21:04:10 ID:UX2j7dSO] 2Dだとやっぱり事前に描いて置いておくのが一番なのかな
941 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 21:07:33 ID:cSNnQmS/] >>897 みたいな効果を多用するならともかく 一部でしか使わないならそのために複雑な仕組み作りたくないでしょ
942 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 21:07:35 ID:7/BIGMNa] 2Dゲームなら、それこそ>937の方法で良いような気がするけどなー。
943 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 21:43:03 ID:6a8jaVSb] 俺もblederで即死したけど メタセコなら普通に使えた
944 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 22:34:17 ID:7/BIGMNa] 少ない脳みそ絞って書いてみた。 3Dとかアフィン変換とかサッパリなので2Dで。 gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0080zip.html
945 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 23:17:57 ID:yr41/JmB] >>944 マジ感謝・・・なんだが、サンプルコードなくて使い方を迷う
946 名前:名前は開発中のものです。 mailto:sage [2010/02/18(木) 23:44:29 ID:7/BIGMNa] すまん、付け忘れた extRate_xとextRate_yに1、hImgにグラフィックハンドル、残りの引数には0でも入れてくれれば とりあえず動くと思う。
947 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 00:27:45 ID:u7/N0T5p] 俺がいつも使ってる拡張画像表示はこれ void DrawExRotaGraphF(float ex, float ey, float xScale, float yScale, float Angle, int GrHandle, int TransFlag, int TurnFlag) { int gx,gy; float ix,iy,ca=cos(Angle),sa=sin(Angle); GetGraphSize(GrHandle,&gx,&gy); gx*=xScale/2; gy*=yScale/2; VECTOR2D pos[4] = { { -gx, -gy}, { +gx, -gy}, { +gx, +gy}, { -gx, +gy} }; for (int i=0;i<4;i++) { ix = pos[i].x*ca - pos[i].y*sa; iy = pos[i].x*sa + pos[i].y*ca; pos[i].x=ix+ex; pos[i].y=iy+ey; } if (!TurnFlag) DrawModiGraph((int)pos[0].x, (int)pos[0].y, (int)pos[1].x, (int)pos[1].y, (int)pos[2].x, (int)pos[2].y, (int)pos[3].x, (int)pos[3].y, GrHandle, TransFlag); else DrawModiGraph((int)pos[1].x, (int)pos[1].y, (int)pos[0].x, (int)pos[0].y, (int)pos[3].x, (int)pos[3].y, (int)pos[2].x, (int)pos[2].y, GrHandle, TransFlag); } ていうかこのくらいDXライブラリも用意して欲しいところだが
948 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 00:28:54 ID:u7/N0T5p] あ、VECTOR2Dはオリジナルだった /* 2D用行列 */ typedef struct VECTOR2D { float x,y; } VECTOR2D; まあ使わなくても二次元配列なりで出来るけどね
949 名前:944 mailto:sage [2010/02/19(金) 00:43:49 ID:zmDX76mU] 2Dの描画関数群を見てると、Zバッファ版なるものがあるんだけれど これって何か上手く使えないかな。 公式BBSだと、マスク処理に使うって話があったけれど… >>947 やってることは自分と同じ…かな? たぶん。 そっちの方がシンプルなコードだがw
950 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 01:11:24 ID:u7/N0T5p] >>949 同じだね 縮小拡大前に回転するかしないかってのは入れる値を変えれば出来るし、縦の反転は180度回転させた後に左右反転すれば再現可能 自分はこれをよく使うので最低限のものだけを入れて、必要に応じてラッパー関数を使えばいい(まあこれ自体もmodiのラッパーだけど)
951 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 01:32:26 ID:zmDX76mU] >>950 回転させてから拡大(縦横別倍率)ってどうやるの?
952 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 01:36:21 ID:u7/N0T5p] 拡大率を予めsincosにぶち込めばいい 「回転を見越して拡大縮小する」
953 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 02:17:39 ID:zmDX76mU] 先生、その見越し方が分かりません
954 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 10:00:47 ID:vzeC0aMv] つかそういういくつもの変換を同時に適用するために 行列があるんだと思うが・・・行列を使わないなんて無駄に複雑になるだけだよ。
955 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 12:10:45 ID:zmDX76mU] >>954 計算部分を自前でやってるだけで、やってることそのものは変わらない気がする
956 名前:名前は開発中のものです。 mailto:sage [2010/02/19(金) 13:25:42 ID:zmDX76mU] チラ裏で申し訳ない。 画像処理の入門書を読んでるんだが (1)自前で行列(回転用行列、拡大用行列など)を用意 (2)それらを掛け合わせて、最終的な変形用の行列を作る (3)変形用行列を関数に渡す …みたいな感じだった。 行列をクラスにして、演算子のオーバーロードで簡単に加算や乗算が出来るようにするとか そういう工夫がされているようだ。 あと、公式BBSでこんなの見つけた hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1033