タグ付けされた質問 「c++」

C ++は、静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語です。

2
C ++の乱数
最近、私は、通常はメルセンヌツイスターである、ストックグッドランダムジェネレーターを含む現代言語に慣れました。C ++に戻った今、使用するものを決定する必要があります。 Mersenne Twisterの実装を検索しましたが、非常に多くの実装があることに気付きました。より広く使用されている実装がありますか?
12 c++  random 

4
オブジェクト指向OpenGL
私はしばらくの間OpenGLを使用しており、多数のチュートリアルを読みました。それらの多くがまだ固定パイプラインを使用しているという事実は別として、彼らは通常、すべての初期化、状態変更、および描画を1つのソースファイルにスローします。これは限られた範囲のチュートリアルには適していますが、完全なゲームにスケールアップする方法を見つけるのに苦労しています。 OpenGLの使用をファイル間でどのように分割しますか?概念的には、たとえば、純粋に画面に素材をレンダリングするレンダリングクラスを持つことの利点を見ることができますが、シェーダーやライトのようなものはどのように機能しますか?ライトやシェーダーなどのクラスを個別に用意する必要がありますか?

3
一人称カメラをどのように実装すればよいですか?
私は初心者プログラマーであり、一人称カメラで部屋を歩き回ることができるプロジェクトを作成しています。これまでのところ、建物が描かれていますが、今は立ち往生しており、歩き回るために一人称カメラを作成する方法がわかりません。 誰かが私が使用できるカメラクラス、またはいくつかの有用なコードに私を向けることができますか?
12 c++  directx  camera 

1
トゥームレイダーのような登山システムのプログラミング
墓侵入者/未踏で見られるような登山システムをプログラムする方法を知っている人、または知っている人がいるのだろうかと思いました。 ゲーム世界のすべての登山可能な位置にバウンディングボックスを置いて、衝突をチェックすることを考えていました。プレーヤーが箱の中にいた場合、彼らは端から「ぶら下がっています」。誰より良いアイデア/改善がありますか? 私はすでにdirectx9を使用してレンダリングをセットアップしており、後でアニメーションを心配することになりました。

3
物理エンジンに必要なアドバイス
私は最近、物理エンジンを構築するプロジェクトを開始しました。このためのドキュメントや最高の技術に関連するアドバイスをいただければ幸いです。 まず第一に、当面の課題にはGame-Physics-Engine-Developmentが強く推奨されていることを見てきましたが、セカンドオピニオンを提供できるかどうか疑問に思っていました。また、Amazonをブラウズしているときに、Game Engine Architectureにつまずきました。 ゲーム用の物理エンジンを構築したいので、これも読みやすいと思いました。 第二に、物理シミュレーションの計算は非常に計算集約的であることがわかっているので、CUDAまたはOpenCLのいずれかを使用したいと思いますが、今ではNVIDIAとATIチップセットの両方で動作するため、OpenCLに傾倒しています。 PS:LinuxのC ++でこれを実装します。

8
2D Game Dev(C ++)の使用開始:DirectXまたはOpenGL?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 だから、私はゲーム開発の扉に足を踏み入れようとしている学生で、2Dの何か、おそらくテトリス/スペースインベーダー/小さなマウスインタラクションクローンのようなものを探しています。 私はC ++と2dの方向に検索を向け、最終的にDirectX / OpenGLにつながりました 今、私が理解しているように、これらのパッケージはすべて、画面上に描画するだけです。そして、この時点で私が本当に気にすることはそれだけです。音は必要ありません。入力はおそらくstdlibで処理できます。 C ++で基本的なゲームを作成しようとする初心者にとって、DirectXまたはOpenGLをお勧めしますか?どうして?2つの機能の主な違いは何ですか?どちらがより使いやすいですか?
12 c++  opengl  directx 

9
GUI要素についてはどうすればいいですか?
注:独自のGUIシステムを作成する予定です。学習に便利で、軽量で、必要なビットのみがあり、ゲームと関係があります。 私はそれを行う方法を考えていました。私が意味する要素は次のとおりです。 ラジオボタン ここにテキストを入力してください ボタン スライダー チェックボックス 私はまだそれらを作る方法を探していません。しかし、彼らがどのように行くかについての詳細。 考え ものを必要とするそれぞれの状態があるので、ほとんどすべてに要素のコンテナがあります。各要素はGUIピースです。 これらにはそれぞれ、位置、グラフィックなどがあります。 私がもっと行き詰まっているのは、それらのロジックです。 そのための私の考えは、モジュール性とシンプルさを可能にするために、MainMenuStartButtonを避けることでした。OptionsOneBackButtonなど。代わりにSlider Slider1を実行できます。またはボタン開始;。 代わりに、Gui :: StartButtonClickやGUI :: ColourSliderHoverなどのGUI名前空間の関数へのboost :: functionがあります。 私はこれが非常に遅いかどうか疑問に思っていました。 さらに言えば、ゲーム用のGUIを実行する簡単で簡単な方法はありますか?Qt、wxWidgetsなどはありません。
12 c++  architecture  gui 

1
弾丸の物理演算をゲームに統合するにはどうすればよいですか?
ここにあるリリースファイルをダウンロードしましたが、どこから始めればよいかわかりません。私のゲームでは、長方形と球体がいくつかあるので、これらすべてを互いに衝突させたい。(それらにはすべてメッシュと関連する境界ボリュームがあります) 編集-直方体には実際にAABBが関連付けられていることに気づきました。少なくともそれを変える必要があると思います。 どのような手順に従う必要がありますか?

2
キーを押し始めたときの遅延を取り除く
私は単純なゲームを作成しています。私が遭遇した問題の1つは、キーを押し続けているときの迷惑な遅延です。 つまり、基本的に、たとえば(非常に長い時間)を押すUpと、オブジェクトは1ユニット上に移動し、移動せず(約1秒間)、その後1ユニット上に(遅延なく)連続して移動します。 現在、私はこれを使用してオブジェクト(SDL2)を移動します。 while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_UP: //Move object 1 unit up break; //Other unrelated things omitted } break; //Omitted other cases } } 私が欲しいのは、オブジェクトをすぐUpに素早く移動できるように、遅延を取り除くことです。これを行う方法はありますか?
11 c++  sdl2  keyboard 

4
3Dワールドのナビゲーショングリッドをどのように生成しますか?
この問題の解決策を見つけようとしています。3Dスペースの正方形の形をしたx、yのフロア座標にロックされた頂点のグリッドの形式でナビゲーションメッシュを構築しようとしています。しかし、私はそれを回避する方法を理解しようとして問題を抱えています。 リキャストライブラリを調べてみました。これはかなり堅牢な方法ですが、大きなマップとオープンスペースでは明らかに速度が低下します。また、高さマップを使用してワールドスペースの頂点とエッジを生成する方法もわかりません。 次に考えたのは、Unreal Engine 3が以前行っていた方法を実行することでした。 https://udn.epicgames.com/Three/NavigationMeshReference.html レイキャストを使用してメッシュを生成することでした。レイキャストを停止する方法がわかりませんでした。 だから...私の次のオプションはボックスで、おそらくボックスキャストでした。2の累乗のサイズで細分割されたボリュームを作成します。ボックスをグリッドに合わせ、直角プリズムを下向きに光線として発射します。地面の一部であるジオメトリに着地し、長方形が交差していない場合は、正方形をそのままにします。そして、ボリュームの境界に達するまで下に進みます。エッジをリンクする必要があるかどうかを確認するには、頂点の2つのペアの間の勾配がウォーク可能な勾配内にあるかどうかを確認し、これがtrueの場合はそれらをマージします。 私の主な問題は...これは非常に最適ではないようです。それを考えずに、推定では、プロセスは多層レベルのO(N ^ 3)です。かなり厄介なことができます。 そして最後のビットは、これらの正方形の長方形のグループを自動的に作成するためのものです。これを行う方法は完全にはわかりません。Unrealの実装は、それらをスロープで分離します。ただし、グリッド形式を維持しようとしています。したがって、それは完全に必要なわけではありません。大きな長方形のタイルを作成してパス検索プロセスをタイルごとに分割することに問題は残っています。タイルは大きすぎても小さすぎてもいけません。 だから質問は... このガードされたnavmeshを生成する効率的な方法は何でしょうか?そして、タイルを作成する良い方法は何でしょうか?
11 c++  tiles  navmesh 

2
SDLでデルタ時間を計算する方法は?
SDL_GetPerformanceCounterとSDL_GetPerformanceFrequencyと呼ばれる2つの関数でデルタ時間を計算できると聞きました。完全にどのように機能するかはわかりませんが、SDL_GetTicks()を使用するのと少し似ていると聞きました Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 私はこのコードを持っていますが、deltaTimeを出力するか、それを使用しようとすると、常にいくつかの本当にランダムで非常識な数値に等しくなります。これは正しいです?
11 c++  algorithm  sdl 

2
別々のスレッドで更新してレンダリングする
シンプルな2Dゲームエンジンを作成しています。スプライトをさまざまなスレッドで更新してレンダリングし、その方法を学びたいと思います。 更新スレッドとレンダリングスレッドを同期する必要があります。現在、2つのアトミックフラグを使用しています。ワークフローは次のようになります。 Thread 1 -------------------------- Thread 2 Update obj ------------------------ wait for swap Create queue ---------------------- render the queue Wait for render ------------------- notify render done Swap render queues ---------------- notify swap done この設定では、レンダリングスレッドのFPSを更新スレッドのFPSに制限しています。さらにsleep()、レンダリングと更新の両方のスレッドのFPSを60に制限するために使用するので、2つの待機関数はそれほど待機しません。 問題は: 平均CPU使用率は約0.1%です。場合によっては、25%に達することがあります(クアッドコアPCの場合)。これは、待機関数がテストおよび設定関数を使用したwhileループであり、whileループがすべてのCPUリソースを使用するため、スレッドが他のスレッドを待機していることを意味します。 私の最初の質問は:2つのスレッドを同期する別の方法はありますか?私は気づいたstd::mutex::lock、それは、whileループではないので、リソースをロックするために待っている間、CPUを使用しないでください。どのように機能しますか?std::mutex1つのスレッドでロックし、別のスレッドでロック解除する必要があるため、使用できません。 他の質問です。プログラムは常に60 FPSで実行されるため、CPU使用率が25%に急上昇することがあるのはなぜですか。(2つのスレッドはどちらも60fpsに制限されているため、理想的には多くの同期は必要ありません)。 編集:すべての返信をありがとう。まず、レンダリングのためにフレームごとに新しいスレッドを開始しないようにしたいと思います。最初に、更新とレンダーループの両方を開始します。マルチスレッディングで時間を節約できると思います。FastAlg()とAlg()という関数があります。Alg()は私の更新objとrender objの両方であり、Fastalg()は私の「レンダーキューを「レンダラーに送信」」しています。シングルスレッドでは: Alg() //update FastAgl() Alg() //render 2つのスレッド: Alg() //update while …

3
1より大きい、または0より小さいテクスチャ座標に遭遇する可能性があるのはなぜですか
私がテキストを勉強していますtexture mappingし、中preparing to drawのセッション、私が読んで: テクスチャラッピングパラメータを定義します。これにより、1.0より大きいか0.0より小さいテクスチャ座標が検出された場合の処理​​が制御されます。 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap); wrapは次のとおりです 。GL_REPEAT:0.0未満または1.0より大きい変換されたテクスチャ座標が検出された場合、このパターンが繰り返される(つまり、ラップアラウンド)ことを指定します。 GL_CLAMP:パターンが0.0または1.0の値に「固定」されることを指定します。 しかし、そのようなテクスチャ座標に遭遇する理由が何であるかについての説明はありませんか? たとえば、長方形を描いたばかりで、その上にテクスチャとして画像を適用したい場合、そのような座標に遭遇することは可能ですか?

4
ターンベース、距離ベースの戦略ゲームで可能な動きの範囲を決定する方法は?
私はc ++とSFML-2.0を使用して、2次元のターンベースの戦略ゲームを作成しています。移動はグリッドベースではなく距離ベースであり、いくつかの異なる三角形のピースが所定のターンで所定の位置で回転するか、前方に移動します。 動きは、プレイヤーが駒を移動する場所を選択するように機能します。これにより、駒が進む可能性のあるパスが生成されます。プレーヤーが決定を確認すると、ピースはそのパスに沿って目的の場所に移動します。パスは次の2つの要素によって制限されます。距離、曲がり角を考慮して、ピースが移動できる距離です(カーブがある場合、ポイントからポイントに直接ではなく、カーブに沿った長さになります)。ステアリングアングル、ピースが移動中に任意のポイント(およびすべてのポイント)で回転できる距離(たとえば、-30から30度)。 私の質問は、ピースを移動させるためにプレーヤーが選択できる潜在的な場所の範囲をどのように決定すればよいですか? ここで使用する方程式やアルゴリズムは完全にはわかりません。私の最初の計画は非常に複雑で、実装することはほぼ不可能であり、説明は言うまでもありませんでした。この時点で、プロジェクトが停滞して完全に迷っています。 回転半径を考慮して、ユニットが移動できる範囲をどのように決定できますか? たとえば、次の画像では。赤、青、緑の線はすべて同じ長さになります。紫色の円は、ユニットが移動できる移動範囲を示します。(形状はおそらく不正確であり、ラインはおそらく実際には同じ長さではありませんが、あなたはアイデアを得るでしょう)

2
key_callbackをラッパークラスインスタンスに関連付けるにはどうすればよいですか?
私のGLFW3呼び出しを単一のクラスにラップしようとしています: class WindowManager { private: GLFWwindow* window_; GLFWmonitor* monitor_; Keyboard* keyboard_; ... } そして、実行中に押されたキーを収集するシングルトンキーボードクラスをセットアップしようとしています。GLFWではkey_callback、クラス定義の外にある関数(フリー関数)を設定できます。 WindowManager::WindowManager() { ... glfwSetKeyCallback(window_, key_callback); ... } // not a class function void key_callback(GLFWwindow* window, int key, int scan code, int action, int mods) { ... } オブジェクト値をWindowManager設定できるように、コールバックとインスタンスを関連付けるにはどうすればkeyboard_よいですか?key_callbackそのメンバー関数はWindowManagerWindowManagerクラスのメンバーになるため機能せず、クラスのC ++メンバー関数では名前がぶら下がってしまうため、メンバー関数を作成できません。
11 c++  glfw 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.