3

アプリケーションでシーンをレンダリングする方法としてNSOpenGLViewusingを設定することができました。CVDisplayLinkSetOutputCallbackすべてが正しく機能しているように見え、コールバック メソッドはかなり適切な速度で起動しています。

これまでのところ、かなり前 (2009 年) のこのフォーラム スレッド (具体的には、この投稿)で見つかったコードに基づいて実装を行ってきました。

スレッドをさらに掘り下げると、物理シミュレーションなどを統合するためNSTimerの方法を呼び出す固定ステップ間隔の設定についての言及があります。update:(NSTimeInterval)durationただし、フレーム間のデルタ時間も表示リンクのコールバック メソッドで計算されているようで、かなり混乱しています。

シーンを更新するための一定のステップ時間間隔をこれまで考えたことがありませんでした。正直なところ、それは私にはあまり適切ではないように思えますが、OpenGL とゲーム開発のより細かいニュアンスをまだ学んでいます。

update メソッドと render メソッドをディスプレイ リンク コールバックで結び付けるのは良い方法ですか、それとも別の場所に置く方が適しているでしょうか?

私はGLKitiOS で使用しましたが、適切なデリゲート メソッドに準拠し、それに応じて update メソッドと render メソッドが呼び出されるという点で、すべてを起動して動作させるのは非常に簡単でした。

これまでのところ、私のコードは次のようになっています: (フォーラムスレッドで見つかったコードに基づく)

static CVReturn displayLinkOutputCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *now, const CVTimeStamp *outputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext)
{
    NSOpenGLView *view = (__bridge NSOpenGLView *)displayLinkContext;

    NSTimeInterval deltaTime = 1.0 / (outputTime->rateScalar * (double)outputTime->videoTimeScale / (double)outputTime->videoRefreshPeriod);

    [view update:deltaTime];

    [view drawRect:[view frame]];

    return kCVReturnSuccess;
}

これは実行可能なアプローチですか?NSTimer代わりにを使用する必要がありますか?または、おそらくより適切な代替方法はありますか?

私はあまり詳しくないCVDisplayLinkので、シーンを更新してレンダリングするメソッドを実装するのにこれが最適な場所かどうかはわかりません。CVDisplayLinkこのように使用する必要があります。つまり、シーンのレンダリングと更新をすべて 1 つにしますか?

さらに詳しい情報をいただければ幸いです。

4

0 に答える 0