トップページgamedev
1001コメント354KB

DXライブラリ 総合スレッド その16

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2013/06/30(日) 23:57:05.06ID:j62MvD3e
Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
http://homepage2.nifty.com/natupaji/DxLib/

【関連スレ】
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
ゲームプログラムなら俺に聞け(プログラム技術板)
http://toro.2ch.net/test/read.cgi/tech/1366526476/

●DXライブラリではなくDirectXの質問ならこっちへ
【C++】DirectX初心者質問スレ【C】(プログラム技術板)
http://toro.2ch.net/test/read.cgi/tech/1370015791/
0002名前は開発中のものです。2013/06/30(日) 23:57:43.41ID:j62MvD3e
【前スレ】
DXライブラリ 総合スレッド その15
http://toro.2ch.net/test/read.cgi/gamedev/1364900066/
【過去スレ】
01 http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
02 http://pc11.2ch.net/test/read.cgi/gamedev/1224923873/
03 http://pc11.2ch.net/test/read.cgi/gamedev/1238429676/
04 http://pc11.2ch.net/test/read.cgi/gamedev/1249822550/
05 http://pc11.2ch.net/test/read.cgi/gamedev/1259912953/
06 http://hibari.2ch.net/test/read.cgi/gamedev/1267108154/
07 http://hibari.2ch.net/test/read.cgi/gamedev/1286180687/
08 http://hibari.2ch.net/test/read.cgi/gamedev/1301818631/
09 http://hibari.2ch.net/test/read.cgi/gamedev/1310904069/
10 http://hibari.2ch.net/test/read.cgi/gamedev/1313655495/
11 http://toro.2ch.net/test/read.cgi/gamedev/1322844235/
12 http://toro.2ch.net/test/read.cgi/gamedev/1330000532/
13 http://toro.2ch.net/test/read.cgi/gamedev/1339368894/
14 http://toro.2ch.net/test/read.cgi/gamedev/1350618178/
0003名前は開発中のものです。2013/07/01(月) NY:AN:NY.ANID:+3YeETHh
>>1
すまないけどもう一度
モデルの手足とかのフレーム位置ってどうやって設定するんですか?
MV1SetMatrixで設定しても足元の位置を取得してるみたいです
モデルが悪いのかモーションが悪いのか…
デフォルトで付いてるモデルを見るとちゃんと手とかのフレームごとに座標がセットされてるなぁ
0004名前は開発中のものです。2013/07/01(月) NY:AN:NY.ANID:j62MvD3e
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/

ごめん、ここだけ更新確認するの忘れてた…
あと、改行おおすぎって怒られたから分けてみた
0005名前は開発中のものです。2013/07/01(月) NY:AN:NY.ANID:uf9a8men
前スレの984だけど
>>985
1を避けるのが無理となったら毎フレームVertexやIndexに代入して渡す以上、
それはただのDrawPolygonIndexed3Dと変わらないしボトルネックになってる代入処理も負荷軽減すら出来ない
1が出来ないなら実装は諦めるしか無いんだよね
せめて前フレームまでに生成されたパーティクルは触らず、今フレームで生成されたパーティクルのデータだけを追加することでも出来れば大きな力になるんだけど

2は別のセマンティクスを無理やり利用するとしても
管理人さん曰くfloat3がpos、norm、tan、binorm、float4がsposらしいからとても理想通りには足りない
これが実現できないなら単純な動きの数稼ぎのパーティクルを個別に新しく作るって方法もあるけど出来れば理想通り実装できるように試行錯誤したい
頂点数を6つから描画に使わない頂点を増やして、シェーダ中で別の頂点から参照するみたいなことってできないよね

以前に2年ほど市販のゲームのバイナリをひたすら弄ってた事があるんだけど
そのゲームのパーティクルがこれぐらいは拡張性に富んでたんだよね
ちゃんと内部メモリ書き換えたら思い通りにエフェクトも書き換えれたし先に挙げたパラのどれを書き換えてもフリーズとかは起こらなかった
当時はハードが非力で思い通りの事はできなかったけど今時のPCならやりたい放題だから思う存分パーティクル使ったエフェクトを作りたいんだ
0006名前は開発中のものです。2013/07/03(水) NY:AN:NY.ANID:UI8e9E/d
久しぶりに新しいバージョン出てたんだな
0007名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:VvE/Zlks
なんか過疎過ぎない?
>>3
亀だけど手足とかのフレーム位置を取得したいのか
それとも回転とか並進移動してフレームの位置を設定したいのか
どっちにしてもMV1SetMatrixは関係なくね?
前者ならMV1GetFramePositionとか後者ならアニメーション関数かMV1SetFrameUserLocalMatrixあたりが出てきそうなもんだけど
とか言って初心者が話題作りに口出ししてみる
0008名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:crrvNibG
BGM流す処理で悩んでいるんだけど
現状専用の関数に(bgmname,loop)でtitleからパス渡して都度読み込ませてるんだけど
起動時なりにあらかじめ全部読み込ませて番号で指定したほうがスマートなのかな?

使用数は20曲程度を想定してるけど、メモリの占有とか考えるとどうなのかなーと
使用頻度の高いものだけ読み込ませるとか色々考えたけどなかなかどうするのが一番いいのか思いつかない
0009名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:i01s1Y7Z
>>8
作っている物の設計次第じゃね
つまり、ロードして再生でいいものと、オンメモリで即時切り替えしたい物って用途によってあるのがわかってると思うので、
この曲はこっち、これはこっちと分けて考える感じ

割りとノープランで作ってるときは全部同じ方法で統一したくなるけど、
実際に作るものが見えてる状態で設計するなら、自然と一次切り分けとしてそうなるかと
0010名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:crrvNibG
>>9
やっぱりそうかぁ
メモリどのくらい食うかとか調べてから決めることにするわさんくす
0011名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:eMzLzLvI
でもストリーミングでディスクアクセスだけは絶対やりたくないな・・・
圧縮済み曲データなら数MBですむし最低そこだけでもメモリには置いておきたい
0012名前は開発中のものです。2013/07/04(木) NY:AN:NY.ANID:bYjH9N0m
俺は「NOW LOADING....」をやりたくなかったからストリーミングやったなぁ。
まぁそれでも一瞬止まるんだけど。
0013名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:NK+qilQ+
DXライブラリが原因で作ったゲームがPCによって起動するしないということってあるんですか?
現在作っているゲームを、
Windows 7 Home Premium 64bit *3台
Windows 7 Home Premium 32bit *2台
Windows 7 Home Professional 32bit *1台
Windows 8 64bit *1台
で動作確認をしたところ、Windows 7 Home Premium 64bit のうち1台だけがexe起動後のリソースのロード中に応答なしとなり、
タスクマネージャから強制終了させる必要が出てしまいます。windows updateも全て実行してあります。
同じプログラム環境(つまり同じDXライブラリのバージョン)でテストで作った同じ画像を読み込み、動かすプログラムは正常に動作します。
原因が何にあるのかがわからず、DXライブラリの可能性もあるので質問させていただきます。
どなたか心当たりがありましたら返答お願いします。
0014名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:E7AFsXVC
ログうpって貼るくらいはしようよ
エスパーじゃないんだからさ
0015名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:sQV+cUjn
Windows Updateやってても DirectXが最新だとは限らない
アプリ起動時にいきなりダメなんだったら DirectXとかグラボのドライバでも疑え
0016名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:Y41MaDA7
まず真っ先にそこだよな
0017名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:o07ozPmm
質問させてください。フレーム制御についてなんですが、
五枚の画像をじゅんぐりに表示する(アニメさせる)のに自分はこう考えてます。

if(this->count % 5 == 0){画像1の描画処理}
if(this->count % 5 == 1){画像2の描画処理}
if(this->count % 5 == 2){画像3の描画処理}
if(this->count % 5 == 3){画像4の描画処理}
if(this->count % 5 == 4){画像5の描画処理}

しかし、これではものすごいスピードのアニメになってしまいますよね?
一枚一枚の表示時間を長くしたいわけです。
で、自分はそうしたい場合、countを細分化してわざわざ同じ画像を振り分けています
例↓
if(this->count % 10 == 0){画像1の描画処理}
if(this->count % 10 == 1){画像1の描画処理}
if(this->count % 10 == 3){画像2の描画処理}
if(this->count % 10 == 4){画像2の描画処理}
        …以下同じ要領で書き連ねる

賢い方ならわかると思いますが非常に非効率ですよね、、
どうやればスマートな命令になりますか?
知恵をお貸しください。
0018名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:k966eNGC
images[(this->count/2)%10-1].draw();
0019名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:nBoOA7vy
画像[i]の描画処理;
if ( frame_count %= 2 ) { //0:そのまま表示 1:画像更新 2:そのまま表示…
i++;
i %= 画像枚数;
}
0020名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:o07ozPmm
>>18
え、すごくシンプルですね、、、ちょっと意味がわかりません
countを2で割ったものを10で割った余りから1を引く、ということですか?


その場合、表示時間は"/2"のところで考えるんですか?

>>19
すみません、ちょっとわかりません
フレームカウントを2で割った余りが0になるたびに、
iがインクリメントされて、、どういうことでしょうか?
画像枚数が5枚として、i%=5でどういう意味になるのでしょうか
0021名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:nBoOA7vy
>>20
え、まさかそういう返しが来るとは思ってなかったんだけど…
配列って知ってる?
0022名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:o07ozPmm
>>21
もちろん知ってます
配列の添え字を動かしてるんですよね?
ただ、そこの値の変化が見えません
0023名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:o07ozPmm
多分算数が弱いんです、(count/2)%10-1←これは値が
0、1,2,3、、、と変化するんですよね?
−1は0からの添え字に合わすために引いてる。
そういうのはわかるんですよ。
でも、それではものすごいスピードなのは自分が書いたものと
変わりがないような気がするんで、、、、
値の変化をもう少し解説して頂けませんか?
0024名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:o07ozPmm
>>21
あ、人を違えました、すみません。
(でも言いたいことは同じなんですけど、、)
値の動きがわかりません。

if ( frame_count %= 2 ) {
i++;
i %= 画像枚数;
}

if文の中は、「countを2で割って、余りが2になる場合」でよろしいですよね?
で、そのたびに、iをインクリメントする。
そのiを画像枚数で割って、その余りをiに加える??
意図、値の変化、が見えません。。。
0025名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:6PcLzQCR
単純に均等割りで頭に戻るループなら
(count / コマウェイト) % アニメ枚数
だけでいいんじゃね
0026名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:Jwek2QMZ
( this->count / a ) % 5

aは1以上の整数

でいいんじゃないのかな。配列はお好きに。
0027名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:Jwek2QMZ
ああ25さんがすでに言ってた。
0028名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:Y41MaDA7
もうちょっと真面目にやるとステップの進行に使う係数(/2の部分)を、実際のフレーム当たりの実経過時間から計算するよな
0029名前は開発中のものです。2013/07/05(金) NY:AN:NY.ANID:6pY90Lwl
それ最近流行ってるってだけで別に「真面目に」とかつけなくていいからね
■ このスレッドは過去ログ倉庫に格納されています