ゲームプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG0002名無しさん@お腹いっぱい。
NGNGフルスクリーンでダブルバッファを用いたゲームを作っているのですが、
環境によってリフレッシュレートが変わり、ゲーム速度が変わるために困っております。
これを解決するために、まずゲーム開始時にリフレッシュレートを取得して
1フレームごとの移動量を計算しようと思っているのですが
肝心のリフレッシュレートを調べる方法がわかりません。
知っている方が居れば教えてください。
0003名無しさん@お腹いっぱい。
NGNG>1フレームごとの移動量を計算しようと思っているのですが
ここら辺がよく分からんけど
FlipのかわりにBltを使いタイマーでタイミングを取るってのじゃ駄目なのか?
0004名無しさん@お腹いっぱい。
NGNG難しく考えすぎ、タイマかパフォーマンスカウンタで制御すればいい
そういう資料もってないなら上記のキーワードで検索してくれ
0005名無しさん@お腹いっぱい。
NGNGメインループの中にカウンタを作って通過するたびに+1
タイマーを使って1秒過ぎるたびにカウンタの値を取って0に初期化
を繰り返せばOK
00062
NGNGタイマを使う方法も以前に試して見ましたが、どうもカクカクして使い物になりませんでした。
上の移動量を計算〜…ですが、仮にFPS=60のときxが1ずつ進むなら、
FPS=75の場合はxは0.8ずつ進むようにしたいということです。
00072>5
NGNGデバイスから現在のリフレッシュレートを取得するといった感じで。
0008名無しさん@お腹いっぱい。
NGNG最近はマトモになったのか?
>>6
キャラクターの座標を256倍とかして管理するんだよ
60FPSの時は +256、 75FPSの時は +256*60/75
で表示する時は 内部座標/256ね。これでスムーズに動くよ
0009名無しさん@お腹いっぱい。
NGNGy += vy * dy;
サンプルのDonutsのソース見てみるといいんでないかい。
方法の1つに過ぎないけどね。
>リフレッシュレートって昔はドライバーによって嘘返してきたりつかえなかったけど
>最近はマトモになったのか?
なってません。うちのGeForce2MXも返してこないし
Forced Refresh Rateすらちゃんと効きません。てめーNVIDIA!!!!
00109
NGNG鬱だ死のう。
0011名無しさん@お腹いっぱい。
NGNGどうせWindowsモードではSYNCできねーんだからさ。
無理するこたーねぇ、意外とティアリングなんて気になんねーぜ。
0012名無しさん@お腹いっぱい。
NGNG0013名無しさん@お腹いっぱい。
NGNGえっと、こちらとか↓
http://www1.odn.ne.jp/synsyr/prog_t1.html
0014名無しさん@お腹いっぱい。
NGNGDEVMODE devmode;
devmoce.dmBitsPerPel = 16;
devmoce.dmPelsWidth = 640;
devmoce.dmPelsHeight = 480;
devmoce.dmDisplayFrequency = 60;
devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
ChangeDisplaySettings( &devmode, 0 );
001514
NGNG逝ってきます。
0016名無しさん@お腹いっぱい。
NGNGそれってどの環境でも動作するんですか?
ChangeDisplaySettings()は動作が不安定だって聞いたことあるんですけど。
(2ちゃんで聞いたから、もしかすると嘘かもしれない)
0017名称未設定
NGNGみんなで動作試験してみるってのはどうだ?
0018名称未設定
NGNGDirectXできちんとリフレッシュレート変更できるようにしやがれ!
0019名無しさん@お腹いっぱい。
NGNGモニターの相性によっては画面うつらなくなることもある
そのへん考慮するのも良いプログラムの条件だろ
それとなんでリフレッシュレートにこだわるかな
0020名無しさん@お腹いっぱい。
NGNG確認用のexeを作って、どっかにUPして。
0021>19
NGNGそりゃ、同期映像と非同期映像は明らかに品質が違いすぎ、
完全な(時間軸の誤差ゼロの)同期映像を得る現実的な手段は
リフレッシュレートの変更しかないからです。
実は2、3ほど他の解法も考えてるけど、研究中なのでしばし待たれぃ。
#VSyncMAME萌え〜
0022名無しさん@お腹いっぱい。
NGNGゲームの映像は、アニメやCGと同様に1フレーム単位の芸術だから(3DCGもフレーム単位でいじくったりしてるのだ)その1フレームの時間がバラバラだと困るんスよ。
�冲を掛けるやり方は、実はある程度日常的な物理法則が働く場面にしか使えないんだけど、見過ごされがちなんだよなあ。
002322
NGNG0024名無しさん@お腹いっぱい。
NGNG0025名無しさん@お腹いっぱい。
NGNG2が質問でリフレッシュレートの設定でDirectXのVSyncの頻度が
変わるからゲームの速度がたもてないよーって質問があったんですよ
それならばタイマかパフォーマンスカウンタを使えば
前回の更新からどのくらいの「時間」が経過したかを計算できますから
モニターのリフレッシュレートにわずらわされることもなく
ゲームのフレームレートもウェイトをかけて調節可能ですし
3Dならば時間単位での計算をすればいいんでないかということ
だったんですが
リフレッシュレートとアニメーションのフレームは同一の単語だとは
知りませんでした
モニターのリフレッシュレートを無視した映像更新はノイズがでるから
だめってことでVSync待ちして更新するんだとおもってましたが
違いましたか
0026名無しさん@お腹いっぱい。
NGNGきょうび、プログラムが意識する必要は無いとおもうけど。
0027名無しさん@お腹いっぱい。
NGNG作るのにかかる時間が何十倍も違っちゃうからねぇ…
0028>26
NGNGていうか、Windowsユーザーが垂直同期取ってない映像に
慣れてしまっただけでしょう。
ゲーム機やアーケードのゲーマーには、
PCのゲーム動きがカクカクしていや〜んって嫌ってる人結構見かけますよ。
弾幕系2Dシューティングに至っては非同期だと完全にプレイに支障が出るし。
0029>27
NGNGまあ、確かにブラウン管が画面を1回走査する間に
フレームを1回確実に更新しないと
単なるティアリング防止にしかならないわけだけど。
0030名無しさん@お腹いっぱい。
NGNG意味通じてんじゃん(藁
0031名無しさん@お腹いっぱい。
NGNGFlip()使えばいいんでないの?
003231は >28 だ。
NGNG0033名無しさん@お腹いっぱい。
NGNGPCではVSyncの頻度は変更できるからVSyncはモニターの更新同期に使えってことで
ゲームのフレームレートなんかはタイマー使えってことです
ゲームの画像生成とモニターへの映像更新は別ってことで
それとタイマーにGetTickCountやSetTimerは使ってはだめです
0034名無しさん@お腹いっぱい。
NGNG論点は1つだと思ってない?
リフレッシュレートをフレームレートに一致させる話も出てるんだよ。
VSYNCを変える話はここでも出てるから関係無いわけないだろ。
あと、フレームレートが保証できる場合の話と保証できない場合の話も出てるし。
0035名無しさん@お腹いっぱい。
NGNGそうでしたか、すみません
0036名無しさん@お腹いっぱい。
NGNGなんで?
Windowsのメッセージループを通るたびにtimeGetTimeで時間を調べて
今すべきイベントをメッセージキューに投げる、ってわかりやすくて
よくない?
っていうか私の作ったゲームは全部これを使ってるよ。
0037名無しさん@お腹いっぱい。
NGNG003836
NGNG鬱だ。
0039名無しさん@お腹いっぱい。
NGNG……というところまではいいッスか? 分かります?>たぶんWindowsオンリーな方々
0040>31
NGNG/* ゲームループ */ while (true) { ... Flip(); }
はダメなんですよ。
0041名無しさん@お腹いっぱい。
NGNG>弾幕系2Dシューティングに至っては非同期だと完全にプレイに支障が出るし。
はっきり言って、VSYNCに同期してるゲームの方が支障おおアリ。
60Hzでスピード調整してるから85Hzのモードでは速くなっちゃったり、
逆に極端に遅くなっちゃったり、スピードは変わらないけど85Hzで
60回だけ更新するからカクカクしちゃったり。
VSYNCをON/OFFできる設定が付いてるゲームでは、絶対OFFに
した方がプレイしやすいもの。
004231>40
NGNGの回帰中に切り替えてくれる話なのだ。
0043>41
NGNG慣れてるんでいいけど。全部クソゲイツのせいだし。
>はっきり言って、VSYNCに同期してるゲームの方が支障おおアリ。
>60Hzでスピード調整してるから85Hzのモードでは速くなっちゃったり、
あたしは同じ60fpsで同期の場合と非同期の場合を比較してるのであって、
実行速度が変わっちゃっちゃあそりゃ問題外です。
>逆に極端に遅くなっちゃったり、スピードは変わらないけど85Hzで
>60回だけ更新するからカクカクしちゃったり。
そう。それは非同期なせいで支障が起きてるわけでしょ?
>VSYNCをON/OFFできる設定が付いてるゲームでは、絶対OFFに
>した方がプレイしやすいもの。
そのかわりティアリングが起きてますがな(これも非同期の支障)。
そこで、リフレッシュレートを60Hzにしてフレームの更新と同期できれば
すべて解決するわけでしょ? 理論的にも最高品質の映像が得られます。
0044>42
NGNGデモやリプレイなんかの問題やら、難題山ほど抱え込むことになると思う。
それこそDirectXのサンプルのDonutsのようなゲームにしか
通用しないでしょう。
結局ティアリング無視して60fpsくらいしか方策ないのかもね。
0045名無しさん@お腹いっぱい。
NGNGちなみに60と75と85の最小公倍数だ。
リフレッシュレート70Hzとか80Hzの人は死んでくれ(w
0046名無しさん@お腹いっぱい。
NGNG0047魁!名無しさん
NGNG・・・5100じゃないのか?>最小公倍数
0048名無しさん@お腹いっぱい。
NGNG間に合わなかった場合、そのままコマ落ちするんじゃないの?
プレイヤーからはゲームの進行が遅くなったように見えるように。
特に最近のネットゲームの場合、1/60secでデータの交換が終わる
わけはないので、どうしても非同期にせざるを得ないような気がする。
俺は素人なんで間違ってたらつっこんで。
0049名無しさん@お腹いっぱい。
NGNG>>60回だけ更新するからカクカクしちゃったり。
>
>そう。それは非同期なせいで支障が起きてるわけでしょ?
こういうのって、やっぱ、見ててわかるもんなんですか?
005049
NGNGたとえば、リフレッシュが80Hzで、フレームレートが最高60fps
までしか出せないような場合、リフレッシュ4サイクルに3フレーム
切りかえるくらいなら、リフレッシュを60Hzに落とすとか、じゃ
なかったら、フレームレート40fpsに落としてでも、2サイクル
に1フレームとした方が見てて気持悪くないヨ、っていうような
話ですか??
0051名無しさん@お腹いっぱい。
NGNG細かく言えば、いまのゲーム映像文法では絶対に分かる。
解決のためには、やっぱ、Vシンク60hz決め打ち法案を可決するか、
あらたなゲーム文法を開発するしかないね。
とにかく、ソフト内部のフレーム更新周波数とディスプレイの周波数が違う場合、
なれてくれば絶対にわかってしまう。
この辺が理解できないのは、やっぱ、Winゲーマーが洗脳されてるんだろうな。
0052名無しさん@お腹いっぱい。
NGNGゲーム映像文法というか、認知心理学の領域というか。(^^;
人間の目って時間が均等に割られていない動きにはかなり敏感です。
特に3D CGのような輪郭のはっきりした画像はね。
逆にいうと均等になっていて、blurがかかっている画像だったりすると
フレーム数が少なくても割とごまかせたりするんですけどね。
0053名無しさん@お腹いっぱい。
NGNG2001リンクエラーがどわーっと出てきます。
プロパティの設定で.libの設定はしたし、SDKへのパスは通しました。
VC++6.0 SP4
Win98
DirectX7.0a
タコな質問で住みません。
0054名称未設定
NGNG使えないのか?
0055名無しさん@お腹いっぱい。
NGNG使えないというか、絶対使っちゃダメ。(マジレス!)
0056名無しさん@お腹いっぱい。
NGNG>そこで、リフレッシュレートを60Hzにしてフレームの更新と同期できれば
>すべて解決するわけでしょ? 理論的にも最高品質の映像が得られます。
PCではVSYNC固定が不可能だから議論してるんじゃ〜ん。
今は120Hzとかが主流みたいだけど、今後はこの数値もどんどん
大きくなっていくだろうし、とにかくVSYNCに依存するような
アルゴリズムは危険なのだ。
0057名無しさん@お腹いっぱい。
NGNGVSyncとれないハードだったらどうすんだこいつら
「VSyncとれないんでこんなハードじゃゲームつくれませーん」て上司に泣き付くのか
こんなやつらばっかりか最近のプログラマって。理屈ばっかりならべて。
0058名無しさん@お腹いっぱい。
NGNG0059pipi
NGNGDirectXは使ってないのですが、フルスクリーンで表示することは
可能でしょうか?
006059>
NGNG006160
NGNG0062名無しさん@お腹いっぱい。
NGNGデフォルトのリフレッシュ・レート60.1Hzが保証されている模様。
さすがだぜメディアOS。
>>57,58
そりゃその通りだけどさ、これってはっきり言って
まともなリアルタイムゲーム作るには致命的な問題だぜ。
今日ゲーセンで改めてマーベルvsカプコン2とか見て確信したよオイラは。
皆でゲイツに訴えるという手もある気がするんだが、その辺どうなんかな。
0063名無しさん@お腹いっぱい。
NGNG今のモニタがタコな気がしてきたんだが、どうよ?
リフレッシュレートレスなモニタとか作れないのか?
毎秒n回画面を上から下に電子ビームで走査して……って、
冷静に考えてみると、これで動画として見えてるらしいのが不思議だ。
0064名無しさん@お腹いっぱい。
NGNG方法を教えてください。(土下座)
006545
NGNGかたじけない。その通りだ。
嗚呼嗚呼嗚呼最小公倍数の求め方忘れてるなんて鬱だ死のう
0066名無しさん@お腹いっぱい。
NGNG本気で言ってんの?
0067Be名無しさん
NGNGChangeDisplaySettingsで目的の解像度に変更して画面を覆うサイズの
ウインドウを作れば可能です
上の方で使うなって言われてますが 解像度変更だけならOK
ただしこの場合は DirectX みたいにかってに元の解像度に戻してくれないので
プログラム終了時に同じくChangeDisplaySettingsでもとに戻してね
0068名無しさん@お腹いっぱい。
NGNGあ、「フルスクリーン」か。
解像度変更と勘違いした。土下座損。
0069名無しさん@お腹いっぱい。
NGNGちゃんとtimeGetTime()使って調整しているよね?
0070>69
NGNG0071名無しさん@お腹いっぱい。
NGNG0072名無しさん@お腹いっぱい。
NGNG0073名無しさん@お腹いっぱい。
NGNG0074名無しさん@お腹いっぱい。
NGNG・CRTを使う限りVSYNC以外のタイミングでの
flipは映像にうねりが生じる。
PCの場合はこのVSYNCの間隔がハードウェア、
解像度によりまちまち。逆に専用機は固定に
できる。
例えばVSYNC間隔を1/60sec固定にし、全ての
描画が1/60secに間に合うのであれば問題は
ないはず。が、実際問題それはありえない。
格闘ゲームの場合、描画対象がほとんど固定の
ため、fpsの低下は少ないがもっと一般化された
3D空間の描画にはシーンによりかなりのfpsの
変動が発生する。描画対象が少ないときは
100fps、多いときは20〜30fpsってことはよく
ある。
0075名無しさん@お腹いっぱい。
NGNGなのでPC環境ではdt間隔をVSYNCと別のタイマー
で用意してflipをVSYNCのタイミングで行うことが
多いはず。(もちろんVSYNCのタイミングを外して
行うことも可能)ただし、この場合人間が見て
不自然さがないかどうかってことが問題になるの
かも。(十分速いPCであればそう問題は無いはず)
あと、FPS系(1人称シューティング)のゲームでは
少しでもfpsをかせぐ方がよいので、画面がうねって
でもfpsを上げるセッティングにするのが普通。
0076名無しさん@お腹いっぱい。
NGNGChangeDisplaySettingsについては吾輩も分からんので誰か調べてちょ。他の周波数ならともかく、勝手に60Hzに設定して問題のある環境があるとは思えないんだが、なんせWindowsだからね。結構恐い。
0077名無しさん@お腹いっぱい。
NGNG困ったちゃんなのは、ビデオカードの性能を云々する以前の段階で映像品質を大幅に向上させる手段が存在するのに、それが思いっきり見過ごされてることでしょう。ゲームだけでなく、DVDのフルスクリーン再生なんかも、モニタと非同期やったら全然意味ないやんって感じなんだけれども。
0078名無しさん@お腹いっぱい。
NGNG同期映像見たことないんちゃうかって危惧はありますね。エミュレータの話でアレですが、NESticleを動かせる人は、Settings>Vsyncをチェックして、FrameskipをAUTOではなく1に設定してみて下され。それで完全な同期60fpsが体験できるはず。
とりあえず、ゲームプログラミングスレの幕開けにふさわしい話題ではあった。
0079名無しさん@お腹いっぱい。
NGNGだれもタイマー使うときにVSync無視するっていってねーじゃん ちゃんと読めよ
>78
>同期映像見たことないんちゃうかって危惧はありますね。エミュレータの話でアレですが、NESticleを動かせる人は、Settings>Vsyncをチェックして、FrameskipをAUTOではなく1に設定してみて下され。それで完全な同期60fpsが体験できるはず。
>とりあえず、ゲームプログラミングスレの幕開けにふさわしい話題ではあった。
おまえが一番わかっていない
0080名無しさん@お腹いっぱい。
NGNG0081名称未設定
NGNG>ビデオカードの割り込み
PROGRAMMER'S GUIDE PC&PS/2 VIDEO SYSTEMSによると、
PC/AT互換機の仕様としては必須ではないようです。
VSYNCの検出はできないとまずいみたいですが。
0082名無しさん@お腹いっぱい。
NGNGんで結局どうやって計るのですか?
0083>79
NGNG0084>82
NGNG数秒間Flipのループを回して実測するしかないんじゃないかな。
メーカーロゴでも表示してる間にやりますかね。
Win環境だと59Hzとか61Hzとかはないわけだから、
ある程度判定に遊びを持たせといて。
0085名無しさん@お腹いっぱい。
NGNG>Forced Refresh RateかDirectX診断ツール>DirectDrawのリフレッシュ・レート上書き
ちなみにそこの設定、レジストリの
HKEY_LOCAL_MACHINE\Software\Microsoft\DirectDraw\ForceRefreshRate
に保存されてるぞ。こんなこと書いたらまだ潔癖なPC主義者に怒られそうだが(w
いや、当然のことながらユーザーに無断で書き換えたりはしないがね。
008676>>79,83
NGNG・パフォーマンスカウンタ→マルチメディアタイマ
・ティアリング無視で→(削除)
>>85
なんだ、それなら60Hzにする方法あるんじゃん(もちジョークよ)。
008779
NGNGパフォーマンスカウンタは存在しますし使われていますので気にしないで
QueryPerformanceCounterとQueryPerformanceFrequencyのセットを使って
マルチメディアタイマよりも高精度の時間計測が可能です
悪いのはすべて私 私が馬鹿でした♥
みんなリフレッシュレートを60Hzに設定すればなにも問題はないんだよね
60Hz以外に設定してるユーザーなんて糞 無視無視 ゲーム遊ぶ資格なし
ユーザーの用意された環境なんて糞くらえだ
もしゲーム中にリフレッシュレートの変更なんかしやがったら
ハードディスククラッシュの刑に決定
CPUに俺のゲーム以外の無用な負荷かけるアプリはプロセスkillだ
みんなこれからは安心して60Hz固定でゲームつくろうぜ
0088名無しさん@お腹いっぱい。
NGNGなんのために金突っ込んでCPUとビデオしょっ中
アップグレードしてると思ってんのよ。
0089名無しさん@お腹いっぱい。
NGNGどんなFPSでもいいんだけど、
まず、デザイン段階から、とにかくFPSを決め打ちしなきゃ
ダメなのよ。
でもって、ソフトの内部FPSと、ディスプレイ側のFPSが
一致しなきゃダメなのよ。
まあ、80Hz決め打ち、なんて奇特なゲームメーカーが現れる
ことを祈ったら?
0090名無しさん@お腹いっぱい。
NGNG0091名無しさん@お腹いっぱい。
NGNGべつに内部の更新回数とディスプレイに表示する回数が一致しなくてもいい
内部で10回更新して1回表示でもかまわない
そのときそれが必要でありそう決めておけばね ゲームにもよるけど
0092名無しさん@お腹いっぱい。
NGNG何のためにあるのか、なんでこいつが事実上使用不能なのか
DirectX開発者チームに詰問してみたい気はする。
009392
NGNG本当は問題あるのは分かってるけどハードベンダに強制できない……
なんてことはないよなあ。MSの政治力を考えれば。
0094名称未設定
NGNGやはりガイジンはティアリングとかあまり気にしないんだろうな。
Macゲーム開発者はリフレッシュレートにはうるさいぞ。
OS X公開ベータではVSYNC割り込みがまともにかからないらしくて騒いでるし。
0095名無しさん@お腹いっぱい。
NGNG0096名称未設定
NGNG>95
ありますよ。
でもiMacのおかげで、いまいち使えなくなっちゃいましたけど。
iMac以外は、CRTに問題なければ640*480*60Hzに設定できるんですけど
iMacの640*480モードは117Hz固定なんですわ・・・・・。
0097名無しさん@お腹いっぱい。
NGNGほら。こうゆう事があるから、リフレッシュレートに頼れないのよ。
今後発売される新ハードでまともに動かないかもしれないゲームなんて
作りたくないでしょ?
0098名無しさん@お腹いっぱい。
NGNG>リフレッシュレートレスなモニタとか作れないのか?
液晶モニタ。
0099名無しさん@お腹いっぱい。
NGNG>まず、デザイン段階から、とにかくFPSを決め打ちしなきゃダメなのよ。
2D時代の話ね。
3Dゲーはマシンのスピードに合わせてfpsが変化できるような
アルゴリズムにしましょう。
0100名無しさん@お腹いっぱい。
NGNGそうそうPC98のノートとかで初めて知ったときは
「いや〜んVSyncウェイトがきいてなーい」とかで人前で恥かいちゃったよ おぢさんは
0101名無しさん@お腹いっぱい。
NGNG117/2=58.5なんで、それほど問題なかったりします。
ちょっと遅くなる程度。
厳しいゲーマーの方ならわかるかも。
Apple、というかジョブズはゲームなんてどうでもいいと考えてるんで
先の事を考えてもどうしょうもないです。
PCでの話に戻しましょう。
■ このスレッドは過去ログ倉庫に格納されています