[過去ログ] DXライブラリ 総合スレッド その5 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
876: 2010/02/14(日)21:14 ID:9DOaOyQ2(1/5) AAS
半透明処理で

ClearDrawScreen()
SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・
DrawGraph(・・・
ScreenFlip()

って書いたら、1箇所使っただけなのにかなり処理が重くなる

DrawGraphが悪い?
省1
877
(2): 2010/02/14(日)21:20 ID:lH/o5bwf(1) AAS
いや、俺普通に何箇所も使うけど重くなんないよ?

本当にその四行だけで試してみた?
878
(1): 2010/02/14(日)21:21 ID:I7ZtRrpB(1/2) AAS
フレームスキップは基本過ぎるだろ
879
(2): 2010/02/14(日)21:24 ID:9DOaOyQ2(2/5) AAS
>>877

ClearDrawScreen()
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
DrawGraph(・・・ // 普通の画像
SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・
DrawGraph(・・・ // 半透明させるの画像
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
省6
880
(1): 2010/02/14(日)21:26 ID:9DOaOyQ2(3/5) AAS
>>877
フレームスキップってどうやればいいでしょうか?
画面処理を別スレッドにして、処理時間オーバーしたら放棄、
でいいの?
881: 2010/02/14(日)21:27 ID:9DOaOyQ2(4/5) AAS
すみません
880 は >>878へのレスです
882: 2010/02/14(日)21:32 ID:r2nQlTSv(1) AAS
>>879
いちいち戻さない方が速いかも
883
(1): 2010/02/14(日)21:34 ID:I7ZtRrpB(2/2) AAS
>>880
ググれば幾らかサンプルコードが出てくる。確か龍神録でも触れてたと思うし。
PC上で動くゲームを作るのなら秒間60回更新するように調整するのは基本中の基本。
DXLIBに限った話じゃない。CPU使用率が異常に高かったりしたら間違いなくこっちの問題でしょ。
884: 879 2010/02/14(日)21:58 ID:9DOaOyQ2(5/5) AAS
3番目の↓
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
DrawGraph(・・・ // 普通の画像
が処理を重くしてる原因だったので、これを削ることにしました
ありがとうございます

龍神録というサイトを初めて知ったので、質問してよかった
>>883 ありがとうございます
885: 2010/02/15(月)08:08 ID:BUryD20y(1/5) AAS
何故そこだけ問題があったんだろう。気になる。

>873だが、色々な変形に対応させようと思うと結構面倒だな。引数も増えるし。
回転と拡縮だけにしてしまうか。

……とここまで書いて、
画像クラスを作ってしまえば簡単だということに気づいた。
886
(1): 2010/02/15(月)20:26 ID:ccjc3ij8(1/2) AAS
平面だけでいいなら2*2行列に行列演算を繰り返して
最後にその4点にあわせてDrawModiGraphするってのが汎用的で記述もわかりやすくていいんじゃね?
どっかからできの良い数学ライブラリ持ってきてもいいし
回転拡大スライド程度なら簡単な行列計算だけに絞れるから自分で作ってもいい
887: 2010/02/15(月)20:55 ID:BUryD20y(2/5) AAS
AA省
888
(1): 2010/02/15(月)21:00 ID:K58uOKXK(1) AAS
・画像内での基準点の位置
・上の基準点が実際に描画される位置
・基準点を中心としたスケール
・基準点を中心とした回転角度
で十分だと思うけど
889: 2010/02/15(月)21:57 ID:BUryD20y(3/5) AAS
>>888
それだけで引数7つあるぜ?

各変形の優先度を決める(もしくは同じ変形を複数回行う)とか、
回転と拡縮以外の変形も出来るようにするなら、どれだけ増えるんだ。
890
(1): 2010/02/15(月)22:01 ID:8F/ucvej(1/3) AAS
回転と拡大縮小って別に順不同じゃね
基点となる座標が変われば別だが
891
(1): 2010/02/15(月)22:17 ID:BUryD20y(4/5) AAS
>>890
ゲームの都合上、縦横で別々に拡大率を設定できるようにする必要があった。

正方形を、90度回転させてから、横に2倍
□□ → ■□ → ■■□□
■■ → ■□ → ■■□□

横に2倍にしてから、90度回転
                ■□
省4
892
(1): 2010/02/15(月)22:23 ID:8F/ucvej(2/3) AAS
>>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
(1): 2010/02/15(月)22:29 ID:BUryD20y(5/5) AAS
>>892
質問、90度以外でも渡し方次第で出来る?
894: 2010/02/15(月)22:31 ID:8F/ucvej(3/3) AAS
>>893
出来るんじゃね
895: 2010/02/15(月)22:57 ID:ccjc3ij8(2/2) AAS
引数が多いと見苦しいし、書く順番でちょっと混乱しそう
それに回転と伸縮どっちが優先か見た目に明らかじゃないのも気になる
896
(1): 2010/02/16(火)00:28 ID:ytIVItbu(1) AAS
なんに使うのかがそもそも想像できない俺……。
897
(4): 2010/02/16(火)03:07 ID:JDL3KQO6(1/4) AAS
>>896
こんな感じでどう?
外部リンク[html]:gamdev4.hp.infoseek.co.jp
898
(1): 2010/02/16(火)04:51 ID:iDbvu+FE(1) AAS
>>897
( ゚д゚)ポカーン
899: 2010/02/16(火)05:23 ID:g5MLEwas(1) AAS
ようやく理解できた
900: 2010/02/16(火)06:40 ID:OQUeahIO(1) AAS
3Dでやれば簡単だぜ
901: 2010/02/16(火)09:20 ID:aK6xRRB6(1) AAS
把握。
そういう力技、嫌いじゃないぜw
902: 898 2010/02/16(火)10:16 ID:JDL3KQO6(2/4) AAS
すまん、いい例えが思い浮かばなかったんだw
903: 2010/02/16(火)10:17 ID:JDL3KQO6(3/4) AAS
名前間違えた、897だ
904
(1): 2010/02/16(火)11:28 ID:iwCPzVGw(1/2) AAS
GetDrawStringWidthの第二引数StrLenはどういう意味があるのでしょうか?
マニュアルには
> StrLen として文字列の長さをわざわざ指定する ようにしたのは色々な側面から見て文字列の長さを指定できるよう にしたほうが良いと思ったからです。
と書いてありますが、どういうケースで指定が必要になるのか想像がつきません。
905
(1): 2010/02/16(火)12:41 ID:ghUeZnk+(1) AAS
>>904
DXライブラリの作者さんがそう考えただけで、別に必要なければ使わなければいいだけでは?
例を挙げておくとこんな感じ。第二引数は指定できなくても書けるけど複雑になってしまう。

char Str[] = "今日もいい天気だ";
int MaxWidth = 50; // この幅に収まるように描画したい
int MaxChar = 0; // MaxWidthに収まる最大文字数
for( int i = 0; i < strlen(Str); i++ )
省9
906: 2010/02/16(火)12:56 ID:iwCPzVGw(2/2) AAS
>>905
なるほど、理解しました。
907: 2010/02/16(火)13:02 ID:JDL3KQO6(4/4) AAS
辛うじて一度だけ使った記憶があるな。
メニュー画面だったかな。文字列をセンタリングして表示するのに利用した。

文字列の前後に空白や記号がある場合、
それらも含めた文字数で横の長さを決めると、ちょっとズレて見えることがある。

……ぶっちゃけた話、
他にも方法は色々あるだろうとか、メニュー画面くらい画像にしろよとか思うので
使う機会はあんまり無い気がする。
908: 2010/02/16(火)17:38 ID:S7mGVY2n(1) AAS
C/C++以外からDLL経由で使おうとするとnull文字で終わってない文字列とか渡すのに便利です
909: 2010/02/16(火)21:28 ID:QXMNjoNk(1/2) AAS
>>873
DrawModiGraph()とアフィン変換
アフィン変換 クラスでググるといいかもしれない
910: 2010/02/16(火)22:33 ID:7n/4grgh(1) AAS
逆に文字列の長さよりもStrLenの方が短い場合とかに使うんじゃね?
デバッグ文表示で最後まで表示しないで途中で切ることとかよくあるんじゃね?
911: 2010/02/16(火)23:25 ID:b96KcuEj(1) AAS
アフィン変換か・・・左右反転と拡大縮小って同時にできるもんなんだな、しらなかった
でもこれってソースになる元画像を読んでからやるの?格納してからメモリ上の画像をハンドルで指定して操作したりできるんだろうか
912
(2): 2010/02/16(火)23:50 ID:QXMNjoNk(2/2) AAS
あ、左右反転もなのか
DrawModiBillboard3Dのがいいと思う
913: 2010/02/17(水)00:19 ID:BMwZx7QF(1/2) AAS
>>912
いや自分は873ではないんだけれども、参考になったので書かせてもらった。横槍すまんね
DrawModiBillboard3Dって左右反転できるのか。x1を右上の座標、x2を左上の座標、x3とx4も同様に交換ってやれば反転するのかな?
914: 2010/02/17(水)02:18 ID:V7zWpnOB(1/2) AAS
ゲームで銃の連射中の音を作りたい
例えば 「ドッギュウン」て音声のファイルがあったとする。
そのファイルを使って単発発射で「ドッギュウン」、連射で「ドッドッドッドッドッギュウン」ってなカンジにしたいんだけど
音声の再生中かを CheckSoundMemで調べて、再生してなかったら再生してもヨシってすると案の定
「ドッギュウン・ドッギュウン・ドッギュウン・ドッギュウン」ってカンジになってしまう。
なので、ソレをナシにすると1ループごとに再生するんであまりにも早くて
「ドドドドドドドドドドッギュウン」ってカンジになる。
省4
915
(1): 2010/02/17(水)02:32 ID:ccv1Zplj(1) AAS
ボタン押してる間「ドッ」をループ
離したら「ッギュウン」でいいんじゃねーの?
916
(2): 2010/02/17(水)05:47 ID:9a0E55gk(1) AAS
そんなめんどくさいことしなくても
弾の発射間隔を広げるか、数発ごとに発射音を鳴らすようにすればいいじゃん
917
(1): 2010/02/17(水)06:26 ID:CMLdNZJw(1) AAS
弾を撃つと開始されるカウンタを作って
そのカウンタが条件を満たしたとき音を鳴らせばいいんじゃないの?
1ループごとだと早すぎるんなら1おきにするとかもできる。
918
(1): 2010/02/17(水)08:34 ID:MHINozGj(1/2) AAS
>>912
自前で変形させるなら、2Dでも3D(ビルボード)でも大差なくない?
919: 2010/02/17(水)13:16 ID:WoQHqNki(1) AAS
>一般的なゲームの場合ってこういう時どうしてるの?
FFのデータ見たら、あらかじめ重なった時の効果音も
組み合わせごとにいっぱい入ってて、意外だった
とかいう話を、どこかのスレで見たような、見なかったような。
手間と配布方式とかによって変わってきそう。
920: 2010/02/17(水)19:53 ID:b05sIrPr(1) AAS
>>918
カメラ使って視点操作で楽できるからじゃね?
921: 2010/02/17(水)21:17 ID:MHINozGj(2/2) AAS
ああ、なるほど。

カメラで視点操作ってことは、一括だよな。
メリットでもあるしデメリットでもあるという感じか。
922: 2010/02/17(水)22:06 ID:BMwZx7QF(2/2) AAS
DrawModiBillboard3Dって描画位置が変にならない?
前にDrawBillboard3DをDrawModiBillboard3Dにそのまま置き換えてみたら同じ位置に描画されなかったから使うのやめちゃったんだけど
923: 2010/02/17(水)22:17 ID:V7zWpnOB(2/2) AAS
>>915-917
多彩な案サンクス!やってみるよ俺
924: 2010/02/18(木)02:17 ID:artpUogb(1) AAS
アフィン変換ってのとDrawModiGraphでよくね?
DrawModiGraphで左右反転は入れ替えで普通にできたよ。
アフィン変換の使いやすそうなクラス公開してたりするし、よくわからんまま使えそうだ。
925
(1): 2010/02/18(木)16:24 ID:wXmsheL/(1/2) AAS
スクリーンではなくバッファに描画するにはどうすればいいのでしょうか?
例えば、画像描画や文字列描画を組み合わせて描画する物である「メニューウインドウ」をバッファに描画して、
それを透過やら拡大縮小してスクリーンに描画したいです。
926
(1): 2010/02/18(木)16:47 ID:S5tbEoCa(1/3) AAS
>>925
外部リンク[cgi]:hpcgi2.nifty.com
これでどう?
927: 2010/02/18(木)17:21 ID:wXmsheL/(2/2) AAS
>>926
まさに求めていたものはこれです。
ありがとうございました。
928: 2010/02/18(木)18:10 ID:UX2j7dSO(1/4) AAS
dxlibで書き込める画像って作れるのか・・・
レイヤーシステムどうやって作るのか悩んでたところだよ
929: 2010/02/18(木)18:19 ID:sI5JnKeC(1/2) AAS
BaseImageでもやろうと思えば出来るんじゃない?
SoftImageにも転送付いてたような
930: 2010/02/18(木)18:37 ID:UX2j7dSO(2/4) AAS
SoftImageは変形とかブレンドを自前でやんないといけなくて面倒だった気がする
931
(3): 2010/02/18(木)18:41 ID:yr41/JmB(1/2) AAS
>>897
の右側の魔法陣みたいな斜めにして回転、みたいな変換・表示するのにはどうすればいいかわからない・・・。
というか、アフィン変換した画像というか、DXライブラリでどうアフィン変換利用すれば良いかわからないんだけど、
誰か分かる人頼む・・・。
932: 873=897 2010/02/18(木)19:07 ID:7/BIGMNa(1/5) AAS
結局アフィン変換がよくわからずに、三角関数で画像を変形させた俺。

おかしいな、大学は理系だったはずなんだけどなー。
行列なんて普通に使ってたはずなのに…… orz
933: 2010/02/18(木)19:28 ID:wsPY0Q5n(1) AAS
>>931
斜めにして回転って2Dでやるほうが難しいんじゃないかな。
DrawModiBillboard3Dってカメラ関数使って斜めから見れるん?
>>897の魔方陣のように傾けて見れるならなんとかなりそうだけど。
934: 2010/02/18(木)19:30 ID:sI5JnKeC(2/2) AAS
いわゆる「習う」数学は公式を持ってきた後に「解く」からいけない。そこが重要だと思ってしまう
解くのは別にコンピュータがやればいい。大切なのは解き方
935: 2010/02/18(木)19:40 ID:UX2j7dSO(3/4) AAS
ひょっとして3Dつかって2Dゲーム作る方が楽なのかな
最近はそういうゲームも結構あるよね
936: 2010/02/18(木)19:43 ID:cSNnQmS/(1/2) AAS
DXライブラリ使ってるならまさにその方式を使ってることになるけど
937
(3): 2010/02/18(木)20:41 ID:S5tbEoCa(2/3) AAS
>>931
つまり、画像を2回回転させて描画したいっていうことだよね?
DrawModiBillboard3D関数の引数x1, y1〜x4, y4に各頂点を2回回転させた座標を指定すればいけると思う。
ビルボードじゃなくてモデルとして扱った方が簡単なような気もするけど・・・
938: 2010/02/18(木)20:49 ID:7/BIGMNa(2/5) AAS
>>937
自分みたいに3Dサッパリな人間には、モデルデータを用意するだけでハードルが高いからなあ。
そうなると、従来の画像で扱えるビルボードの方が良さそう。
あとは動的に画像を生成するような場合(スクリーンショットとか)にも向いているかもしれない。

モデルデータを使わずにやるなら、素直に2Dでも良いわけだが。
939: 937 2010/02/18(木)20:57 ID:S5tbEoCa(3/3) AAS
すみません、>>937に書いた方法はウソでしたorz..
引数x1, y1〜x4, y4は2次元の変形しか指定できないし、DrawBillboard3D関数にはある引数Angleも無いので3次元の回転は無理そうです・・・
モデルにすればMV1SetMatrix関数で自由に変形できるんだけど・・・
>>931の作ってるゲームは2Dなの?
それなら斜めに傾いている画像を使って下さいw
940: 2010/02/18(木)21:04 ID:UX2j7dSO(4/4) AAS
2Dだとやっぱり事前に描いて置いておくのが一番なのかな
941: 2010/02/18(木)21:07 ID:cSNnQmS/(2/2) AAS
>>897みたいな効果を多用するならともかく
一部でしか使わないならそのために複雑な仕組み作りたくないでしょ
942: 2010/02/18(木)21:07 ID:7/BIGMNa(3/5) AAS
2Dゲームなら、それこそ>937の方法で良いような気がするけどなー。
943: 2010/02/18(木)21:43 ID:6a8jaVSb(1) AAS
俺もblederで即死したけど
メタセコなら普通に使えた
944
(2): 2010/02/18(木)22:34 ID:7/BIGMNa(4/5) AAS
少ない脳みそ絞って書いてみた。
3Dとかアフィン変換とかサッパリなので2Dで。
外部リンク[html]:gamdev4.hp.infoseek.co.jp
945: 2010/02/18(木)23:17 ID:yr41/JmB(2/2) AAS
>>944
マジ感謝・・・なんだが、サンプルコードなくて使い方を迷う
946: 2010/02/18(木)23:44 ID:7/BIGMNa(5/5) AAS
すまん、付け忘れた

extRate_xとextRate_yに1、hImgにグラフィックハンドル、残りの引数には0でも入れてくれれば
とりあえず動くと思う。
947
(1): 2010/02/19(金)00:27 ID:u7/N0T5p(1/4) AAS
俺がいつも使ってる拡張画像表示はこれ

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} };
省11
948: 2010/02/19(金)00:28 ID:u7/N0T5p(2/4) AAS
あ、VECTOR2Dはオリジナルだった
/* 2D用行列 */
typedef struct VECTOR2D {
float x,y;
} VECTOR2D;
まあ使わなくても二次元配列なりで出来るけどね
949
(1): 944 2010/02/19(金)00:43 ID:zmDX76mU(1/6) AAS
2Dの描画関数群を見てると、Zバッファ版なるものがあるんだけれど
これって何か上手く使えないかな。

公式BBSだと、マスク処理に使うって話があったけれど…

>>947
やってることは自分と同じ…かな? たぶん。
そっちの方がシンプルなコードだがw
950
(1): 2010/02/19(金)01:11 ID:u7/N0T5p(3/4) AAS
>>949
同じだね
縮小拡大前に回転するかしないかってのは入れる値を変えれば出来るし、縦の反転は180度回転させた後に左右反転すれば再現可能
自分はこれをよく使うので最低限のものだけを入れて、必要に応じてラッパー関数を使えばいい(まあこれ自体もmodiのラッパーだけど)
951: 2010/02/19(金)01:32 ID:zmDX76mU(2/6) AAS
>>950
回転させてから拡大(縦横別倍率)ってどうやるの?
952: 2010/02/19(金)01:36 ID:u7/N0T5p(4/4) AAS
拡大率を予めsincosにぶち込めばいい 「回転を見越して拡大縮小する」
953: 2010/02/19(金)02:17 ID:zmDX76mU(3/6) AAS
先生、その見越し方が分かりません
954
(1): 2010/02/19(金)10:00 ID:vzeC0aMv(1) AAS
つかそういういくつもの変換を同時に適用するために
行列があるんだと思うが・・・行列を使わないなんて無駄に複雑になるだけだよ。
955: 2010/02/19(金)12:10 ID:zmDX76mU(4/6) AAS
>>954
計算部分を自前でやってるだけで、やってることそのものは変わらない気がする
956: 2010/02/19(金)13:25 ID:zmDX76mU(5/6) AAS
チラ裏で申し訳ない。
画像処理の入門書を読んでるんだが

(1)自前で行列(回転用行列、拡大用行列など)を用意
(2)それらを掛け合わせて、最終的な変形用の行列を作る
(3)変形用行列を関数に渡す

…みたいな感じだった。
行列をクラスにして、演算子のオーバーロードで簡単に加算や乗算が出来るようにするとか
省3
1-
あと 45 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.022s