トップページgamedev
158コメント52KB

ゲームのグラフィックスプログラミング

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/07 00:30ID:MUorfDi0
グラフィックに関するプログラミング、
データ作成ツール、プラグインに関するスレッド。
00948505/01/16 12:09:11ID:l1qZrVG+
>>92
16ビットだとアルファチャンネルいれると4bitづつしか使えないからなぁ…
>>93
速度=描画速度のことです。コードは長いので書きませんが、流れ的には、
[画像データ(DIBではない)]→[DIB]⇒[ウィンドウのDC]
(→で単純なメモリコピー、⇒でBitBlt)
この処理を640x480x32の画像で→2回、⇒1回行うとFPSが最大でも60ぐらいしか出ない。
ちなみにループの処理は、PeekMessage()でメッセージが無ければ描画をするといった感じです。
環境はOS:WinXP、CPU1.6Gz(FSB400MHz)、RAM:PC2100DDR512MB、チップセット:SiS645、ビデオボードはGeForce4MX。
オレが期待している速度は、この環境で上記の処理をFPS100以上、500MHz程度のCPUかつ非DDRメモリの環境でも、
FPS30程度を確保したい(FPSが30切るとゲームとしてはキツい)。
無謀なのかもしれないが、HSPとか吉里吉里見てると余裕で出してるように見えます。
手ほどきおながいします。
0095名前は開発中のものです。05/01/16 13:16:55ID:/nYnDXlR
VGA*2か。
512*512だと、毎回メモリ転送を繰り返してもPentum3の800MHz/32ビットで
100FPS位出る(Pentium2-400MHzで50-70)みたいだね。ビット数による差
はそれほどないみたい。

http://www.sm.rim.or.jp/~shishido/vdib.html

ただ、DIB/DirectXのようなフレームバッファはビデオ環境に依存する面
が大きいから、CPU/メモリで判断するのは難しい。
0096名前は開発中のものです。05/01/16 14:27:11ID:E/5FuOt0
640*480の32ビットカラーだと、一枚約1MBある。
これを100FPSにすると、バスに対して秒間100MBオーバー転送が発生する。
VRAMを作業領域として使わず、全てをメインメモリから転送するのは阿呆としかいいようがない。
0097名前は開発中のものです。05/01/16 14:30:29ID:8IvX1yU+
DirectDrawをなぜ使わない
透明処理ってカラーキーのことか?
0098名前は開発中のものです。05/01/16 16:24:30ID:cJAj482a
>>97
いちいち大げさだし、落ちた時怖いし。
テトリス程度ならBitBltでも充分過ぎる。
00998505/01/16 16:58:39ID:l1qZrVG+
>>95のヤツを640x480に改造してみたらFPS160〜200!?
値が不安定だったんで、FPSの算出の精度を上げてみたらFPS110くらいでしたorz
>>96
VRAMを使うと演算に時間がかかってしまうので。
アルファ合成などをしたいときに困る。
ただ、無演算の転送時はVRAMを使うとかは考えたんだが、
VRAMをDDraw使わずに利用する方法が分からないorz
>>97
DirectX使わずにゲーム作ってみたかったんです。
透明処理はアルファ合成やブレンド処理のことでつ。

やっぱ無理があるっぽいんで、FPSが低くてもごまかせるようにゲーム側を調整することにします。
みなさんレスしてくれてありがとです。
01009705/01/16 17:17:23ID:8IvX1yU+
>>99
DirectXを使いたくないという、その意義がちょっとわからないな。
自分でdibsectionでやったとこで結局メモリ帯域の壁にぶち当たって終了なだけなんだけど。

全画面に対して半透明をかけるなどするのでなければ、
基本的にDirectDrawでハードウェアブリットを使用して、
適宜、システムメモリに確保したサーフェスで自分でアルファブレンド演算して
それをbltfastするだけでも十二分に問題ないよ

さらに言えば、Direct3Dでビルボード使うのが昨今の流行だよね
アルファブレンドも拡大縮小・回転・変形なんでもやりまくり
01019705/01/16 17:21:44ID:8IvX1yU+
>システムメモリに確保したサーフェスで自分でアルファブレンド演算して

なんか変だな。VRAMをLockして自前で書き込む
01028505/01/16 17:48:13ID:l1qZrVG+
>>97
オレもDDraw使ってた時はそうしてた。
だけど、出力先がVRAMサーフェィスだと元画像がシステムRAMサーフェイス演算処理が非常に遅くなってしまう。
で、これを解決するにはVRAMから一旦システムRAMにブリットして、そこに半透明の物を描画、
最終的にこれをVRAMに戻す。
こうすればいいんだが、透明オブジェクトごとにこれをやってると大変なことになってしまう。
雲やフェードなどで、半透明処理を画面全体に使いたいので結局ボツになってしまった。
もっと効率のよいやり方があると思うんで、教えてもらえるとうれしいです。

ちなみにDirectGraphicsのさわりを1年以上前にかじったが、受験やら何やらで記憶から飛んでしまった…
SDKとかもどっか消えちゃってるっぽいし…
0103名前は開発中のものです。05/01/16 17:48:18ID:+Q5c9pKE
>>99
MMXとか使うと良いよー
http://www.cyborg.ne.jp/~xelf/developer/MemoryCopy.html
これはメモリコピーの例だけど、アルファブレンドも高速化できるよ
01048505/01/16 17:53:17ID:l1qZrVG+
>>103
ありがd!
MMXはアルファブレンドで既に使ってるけど、メモリコピーでは使ってないんで試してみるわ。
0105名前は開発中のものです。05/01/16 18:33:27ID:iFAGXXNG
>>102
画面全体に使いたいなら、答えは解像度を落とすか、Direct3Dを使うしかない。
D3Dでの2D描画はお勧め。最初、とっつき悪いけど。
0106名前は開発中のものです。05/01/16 20:36:58ID:kmBS/1gg
GDIでゲーム作るってのはバスでレースに出るようなもんだ。
0107名前は開発中のものです。05/01/17 04:52:15ID:EGIYB8/W
たとえスピードが出なくても、
バスで安全運転したいんじゃなかろうか?
0108名前は開発中のものです。05/01/17 06:54:24ID:OybtQj5h
街乗りにレース仕様を求める輩は(ry
0109名前は開発中のものです。05/01/17 16:45:47ID:5rsoc+Sh
>>94
吉里吉里は鬼のような更新エリア管理(変化があったところしか描画しない)で
あの速度を出していると聞いたことがある。ADVのような画面変化の少ない
ゲームにはすごく有効なんだろうな。常時画面が動いてるようなSTGとかでは
ほとんど意味がないだろうけど。
0110名前は開発中のものです。05/01/17 22:41:16ID:NidjJtgD
縦STGなら、画面幅狭くして誤魔化せる♪
0111名前は開発中のものです。05/01/18 10:57:50ID:mhTx1P2X
>109
>たとえば完全に不透明なレイヤの奥にあるレイヤは描画しないくてよいとか、
>CPUキャッシュを効率的に使用するために画像をキャッシュに収まるぐらいの
>分量で演算して順次画面に転送したりとか、変更のない領域は演算しないとか、
>いろいろあります。
サクーシャの日記より
0112名前は開発中のものです。05/01/19 23:05:34ID:UpNya3dG
エメドラとかでやってた差分更新スクロールを思い出しちゃった
0113名前は開発中のものです。05/01/19 23:12:31ID:aRH3B+4H
タムリン回復してくれ!
いやレーザー出してないで回復してくれ。
おいハスラムお前は下がってろ、死ぬぞ。
だからダムリン、レーザーじゃなくて回復だって。
おいハスラム下がれよ。
あ、死んだ。
0114名前は開発中のものです。05/01/25 03:39:41ID:e91Gc3r5
>>112
それをいうならテグザー。って歳がばれるな。。。orz
0115名前は開発中のものです。05/01/29 13:40:17ID:mEtNLycX
だいぶ下がってるみたいだが、誰もいないのか?
誰かいたらageてくれ
0116名前は開発中のものです。05/01/29 15:31:10ID:YU0Z0PBF
おらおら
0117名前は開発中のものです。05/01/29 15:42:10ID:0G2VwVCk
オラオラ
0118名前は開発中のものです。05/01/29 18:04:40ID:YhpGkHYl
>>88
フレーム管理の処理は入れたか?
0119名前は開発中のものです。05/01/30 00:33:55ID:f7U2kOiV
>>118
88だが、そのやつはウェイト無しでやったからフレーム管理はしてない。
実際に使う時は、MMタイマー使ってFPSを保つけど。
0120名前は開発中のものです。05/01/30 22:28:15ID:uoXF1H/p
>>115出てこいや
0121名前は開発中のものです。05/01/31 21:26:15ID:0o9LrN7x
DirectXに逃げずに未だにGDIでふんばってる香具師ってどのくらいいるんだ?
0122名前は開発中のものです。05/01/31 22:32:35ID:jmz8AnbI
テーブルゲームとかパズルゲームの作者なら
ふんばってるかも。
0123名前は開発中のものです。05/01/31 22:53:10ID:Yi5Y8AvB
GDIに逃げずにDirectXに移行してる香具師ってどのくらいいるんだ?
0124名前は開発中のものです。05/02/12 00:21:36ID:eeqsTIaL
誰か画像の任意角回転方法教えてください!
0125名前は開発中のものです。05/02/12 01:36:56ID:f0t6Ydo5
>>124
2Dか?
3D機能を使うのか?
ピクセルをゴリゴリしたいのか?
0126名前は開発中のものです。05/02/12 02:11:38ID:eeqsTIaL
ピクセルゴリゴリキボンヌ
0127名前は開発中のものです。05/02/12 15:55:12ID:f0t6Ydo5
擬似コードで書くとこんな漢字だろ?
for (int y=-16;y<17;++y) {
 for (int x=-16;x<17;++x) {
  int xx=x*cos(r);
  int yy=y*sin(r);
  PutPixel( Surface1, x,y, GetPixel(Surface2,xx,yy) );
 }
}
コードをお最適化したいならネットで調べてくれ
0128名前は開発中のものです。05/02/12 18:15:31ID:eeqsTIaL
>>127
そのくらいは既に作ってあるんだけど、画像がデカくなると鈍くてぬるぽ。
もちろんsinやcosは最初の一回だけ演算で、固定小数で座標変換するくらいの工夫はしてるが。
0129名前は開発中のものです。05/02/15 12:36:06ID:/Km3SJ1p
今時のCPUなら余裕だろ
つーか計算以外のところが重いんじゃないの?

今時でないCPUならこの辺が参考になるかも
ttp://homepage3.nifty.com/taka7646/taka/
0130名前は開発中のものです。05/02/16 19:47:28ID:OolR/sC8
よく見れば
>>127
ってなんか間違ってる気が…
>>129
回転マトリクス使うわけだが、この乗算を640x480でやったら結構大変だと思うが…
0131名前は開発中のものです。2005/03/23(水) 10:05:46ID:BEkGnVxI
ttp://www.yashok.com/~yashok/oth/pro/win/win_eff01.shtml
要はrotozoomerだろ?
コモドールとかamigaでOldschoolメガデモでタイルぐるぐる回すやつ。
DirectXのラッパか何か使ってるの?
俺はmallocで確保した背景(回転エフェクト)用の領域をQWORD整合して、
描画した後、プライオリティ考慮しながらoffscreenに流し込む方法とってる。
800*600とかでも十分に速度出る。1024*768はさすがにやばいけど。
あとはURLで紹介されているけど、sincosをテーブルにするとか、
テクスチャのサイズを2のべき乗にして剰余演算をANDで置き換える等々。
0132名前は開発中のものです。2005/05/03(火) 23:52:47ID:Ez3eLyuc
移転に気づいて久しぶりに来てみたらレス付いてたわ…

>>131
とりあえずmallocでメモリ確保してGDIで出力してる。
演算は固定点小数でやってるが、タイル状のものを回転させてたいわけじゃないんで、
範囲内か外かの判定もドット毎にやってる。
それとαチャンネルも考慮してるせいか、320*240以上の回転だと無理を感じる。
0133名前は開発中のものです。2005/07/04(月) 13:12:22ID:DCOrN9qA
あげ
0134名前は開発中のものです。2005/07/10(日) 23:14:05ID:XW0Y5gBB
>>範囲内か外かの判定もドット毎にやってる。
エッジスキャンとか使えばちょっとは楽になるはず。
0135名前は開発中のものです。2006/10/18(水) 21:23:30ID:kr96y9vb
過疎ってるなみんな順調なのか
0136名前は開発中のものです。2007/10/08(月) 05:35:01ID:Cw+Y3bqy
       ???  ←買い犬
  ?  ???〓▲?              ? ? ?????■??〓?? ? ? … .
 ? ▼     ??▼        .??■? ? ? ?¨ ∵? ? ・
  ?? ??     ? ??   ?? ???? ¨???????■■〓????
    ?  ? ?■     ? ? ?????????■〓?? ?? ∴ ? .
  ?   ?   ?? ??????????? ? ∴ ….? ?  ??
   ???  ????????????????  ? ??????
     ???????   ?  ¨ ???■??? ? ? ∴‥
0137名前は開発中のものです。2007/12/24(月) 22:22:57ID:vSGEO8zs
あげます
0138名前は開発中のものです。2008/07/28(月) 16:28:06ID:oDAbic6p
アニメーションデータをコンバートするフリーツールってないですか?
0139名前は開発中のものです。2008/07/28(月) 17:15:45ID:TZcaIn12
>>138
形式が何から何にかぐらい書けよ…
01401382008/08/02(土) 00:45:13ID:2Dggsi0/
あ、すいません。
2Dのアニメーションコンバートツールをさがしています。
flashとかを通して変換するのでもいいですが、
素材はphotoshopなんで座標の動きなどの抽出ができれば
特に形式はといません。てか、2Dの形式はあんま知らないんですよね。。
データに落とし込めれば何でもいいです。
調べながらやろうという感じですが、あんま検索してもでてこないんですよね。。
0141名前は開発中のものです。2008/08/02(土) 01:11:02ID:ffxR51b5
>>140
俺の場合、画像データの変換(コンバート)と言えば
拡張子○○のファイルを拡張子○○に変換するというのを思い浮かべるんだけれど、そういう意味では無いのか。

3Dの分野はよくわからないや。
それこそ、Photoshopならたいていの形式に変換して保存できると思うんだけど。
アニメーションならgif形式が一般的。(俺の中では)
0142名前は開発中のものです。2008/08/02(土) 02:54:35ID:ggW8zOrR
>>140 に書いてあることが俺にはさっぱり理解できない。
素材がフォトショップなの?座標の動きが抽出できる2Dフォーマット?

エスパーを呼べ。
0143名前は開発中のものです。2008/08/02(土) 09:24:27ID:SuHxSoje
ひょっとして、2Dアニメってピクセルの色が固定で
そのピクセル座標を移動してるとおもってる?
3Dのシェーダーでいうバンプマップや、旗、水面の表現みたいに。

01441402008/08/02(土) 14:11:42ID:2Dggsi0/
すまん、よくわからん説明かいた。
飲み過ぎて、よくわからんはしょりかたしているかも。

>141
どうもサンクス。お話はよくわかります。ただ、2Dっす。

>142

photoshopのデータをflashやAEに持ってきて、
アニメーションを作成。
そのデータをコンバートして
テキストなりバイナリなりのデータに落とし込みたい。
そのコンバートツールをさがしている。
まだアニメーションはつけていない。

これでエスパー呼ばなくても大丈夫かしら?

>143
ピクセルアニメじゃないっす。わかりづらくてすいませんね。
0145名前は開発中のものです。2008/08/02(土) 14:19:36ID:ggW8zOrR
>>144

AEやフラッシュからキーフレームの情報を書き出すツールは知らないな。
そういうアニメーションの汎用フォーマットがあることも聞いたことがない。

うちでも2Dのアニメーションの作成&再生ってやってるけど、
専用のオーサリングツールを作ってそれでやってる。
そんなに大変じゃないから作った方が早いかも。
PC で再生するんだったら、PS とかも使えるしね。
0146名前は開発中のものです。2008/08/02(土) 18:17:29ID:F2Ze1FHS
テキストの汎用フォーマットというとSVGか?
0147名前は開発中のものです。2008/08/02(土) 19:52:17ID:ffxR51b5
>>144
あらゆるマルチメディアファイルを相互変換するフリーソフト SUPER C
http://gigazine.net/index.php?/news/20060901_super_c/

なんか凄く嘘臭いけど
使ったことある人いる?
0148名前は開発中のものです。2008/08/03(日) 06:03:44ID:Fm7SEmEs
>>147
ちょっとは>>144の内容を読んでやれよw
01491442008/08/04(月) 00:16:04ID:elwsxQFE
145-148
サンクスです。
結論としては、145のいうとおり、
自分で作った方がよさそうじゃないか、になりました。
でも、知らないこともあったので、参考になりました。

英語圏とかに知らんもんがあるかもしれないので、
もしなんか知っている方いましたら書いといてくれるとありがたいです。。
そのうち様子見にくるかもしれませんので。では。
0150名前は開発中のものです。2010/09/12(日) 21:39:42ID:V8hxTE2+
;;;
0151tor-exit-1.lab.net2011/02/21(月) 22:39:13.07ID:7/H3XPu/
hoshu
0152 忍法帖【Lv=3,xxxP】 2011/06/10(金) 15:19:06.81ID:POh44ONj
test
0153 忍法帖【Lv=7,xxxP】 2011/06/20(月) 12:24:58.39ID:RoWTlHDo
test
0154 忍法帖【Lv=5,xxxP】 2011/08/11(木) 06:13:36.29ID:cu8bmYg7
test
0155 忍法帖【Lv=2,xxxP】 2011/08/16(火) 16:30:55.03ID:fXlSZN6Y
INTEL
0156名前は開発中のものです。2012/04/22(日) 00:35:06.18ID:1esUa6zf
0157名前は開発中のものです。2012/04/24(火) 10:37:13.81ID:wzzo7GXM
http://toro.2ch.net/test/read.cgi/gamedev/1330137413/
0158電脳プリオン 忍法帖【Lv=40,xxxPT】(1+0:5) 【38.9m】 2013/05/04(土) 22:31:06.30ID:uzKq655r?PLT(12080)

  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>128
 (_フ彡        /
■ このスレッドは過去ログ倉庫に格納されています