ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

1
GLSLデフォルトシェーダー
エラーチェックコードでエンジンを準備しています。私はこの状況を最善の能力で説明するつもりです。シェーダーをロードしてエラーが発生したときはいつでも(ファイルが存在しない、コンパイルエラー、問題が発生する可能性があるすべて)シェーダーを削除し、ポインターを0に設定します(これを確認する別の方法は考えられません)誤ってゴミを添付または削除しようとした場合)。これが発生した場合、プログラムを停止したくありません。誰かが誤ってゲームフォルダー内の1つのファイルを削除または変更し、そのためにゲーム全体を使用不可にしたくないからです。 さて、ポインタが0であるプログラムにシェーダをアタッチする場合、デフォルトの動作はありますか? 私のプログラムでは、頂点シェーダーが0に、フラグメントシェーダーが0に接続されている場合、OpenGLはデフォルトのプログラムを使用します(すべてが白で表示されます)。 これは、ディメンションが既にクリップスペースにある回転した立方体であり、透視投影や深度チェックなしでレンダリングされます。.objファイルから読み込まれます。 ここで、適切なフラグメントシェーダーをアタッチしたが、頂点シェーダーが0になると、次のようになります。 これは私が期待することです。フラグメントシェーダーはすべてvec4(1.0、0.3、0.7、1.0)を出力します。頂点シェーダーがないため、OpenGLはデフォルトのシェーダーを使用します(これは正しい仮定ですか?)。 ただし、正しい頂点シェーダーをアタッチしたが、フラグメントシェーダーを0にアタッチした場合(または、フラグメントシェーダーをまったくアタッチしない場合)、次のようになります。 目に見えないのは、このモデルが絶えずさまざまな色でペイントされていることです。そのため、私の画面では、黒い水平線が通る酸性の旅行のように見えます。 私は少し混乱しています。なぜなら、私は立方体がちょうど白いことを期待しているからです。私のシェーダーコードは最低限の骨であり、頂点シェーダーとフラグメントシェーダーの間で変数を交換していないことを指摘しておきます。ポインターが0に等しくないかどうかを確認しても何も変更されません。リンクされたプログラムは、ポインターに0を指定した場合と同じように動作します。私にとって最も奇妙なのは、常にゴミ箱ではなく、適切に網掛けされていることです。 編集:おそらくデフォルトのフラグメントシェーダーは、設定を省略している頂点からのgl_値を期待していますか?これは、表面が適切にシェーディングされる理由を説明するものであり、フラグメントシェーダーはスムーズなインを期待していますが、その値は単なるゴミです。 これは「未定義の振る舞い」ですか、それともどのように機能すると思われますか?

2
変換行列を指定して新しい頂点の位置を計算しますか?
4x4変換行列または単純に9つの浮動小数点(positionX、positionY、positionZ、rotationH、rotationP、rotationR、scaleX、scaleY、scaleZ)を指定して、頂点の新しい位置を取得するにはどうすればよいですか?通常、最終的なメッシュ(または「ノード」、「オブジェクト」、または「ジオメトリ」)にマトリックスを割り当てることができますが、今は手動で行う必要があります。
7 3d  matrix  vertex 

2
ターンベースのエンジンをどのように構成すれば、プレーヤー/ AIと観察に柔軟性を持たせることができますか?
ゲームメーカーのGML言語でターンベースの戦略エンジンを作成し始めたところです...ターンサイクルを処理するときまで、順調に進み、誰がどのプレイヤーを制御しているか、そしてカメラと画面に表示されるもの。 現在、メインゲームループで発生しているメインスイッチの概要は次のとおりです。 switch (GameState) { case BEGIN_TURN: // Start of turn operations/routines break; case MID_TURN: switch (PControlledBy[Turn]) { case HUMAN: switch (MidTurnState) { case MT_SELECT: // No units selected, 'idle' UI state break; case MT_MOVE: // Unit selected and attempting to move break; case MT_ATTACK: break; } break; case COMPUTER: …

5
動くシューターから動くターゲットを導く方法
私はこの質問を見ました:オブジェクトをそのターゲットに導くために敵の位置を予測しました。私の状況は少し異なりますが。 ターゲットが動き、射手が動きます。また、シューターの速度は弾丸の速度に追加されます。つまり、右にスライドしている間に発射された弾丸は、右に向かうほど大きな速度になります。 私がやろうとしていることは、敵に、プレイヤーを攻撃するために撃つ必要がある場所を決定させることです。リンクされたSOソリューションを使用すると、プレイヤーと敵が静止していない限り、速度の違いによりミスが発生します。どうすればそれを防ぐことができますか? スタックオーバーフローの回答から提示されたソリューションは次のとおりです。要約すると、次の形式の2次方程式を解くことになります。 a * sqr(x) + b * x + c == 0 sqr平方根ではなく平方を意味することに注意してください。次の値を使用します。 a := sqr(target.velocityX) + sqr(target.velocityY) - sqr(projectile_speed) b := 2 * (target.velocityX * (target.startX - cannon.X) + target.velocityY * (target.startY - cannon.Y)) c := sqr(target.startX - cannon.X) + sqr(target.startY - cannon.Y) 次に、判別式を調べて、可能な解決策があるかどうかを判断します。 disc := …
7 c++  ai  physics  aiming 

3
Bullet Physicsとの壁の衝突時のジッター:接触/貫通許容度?
私はPanda3dを通じて弾丸物理エンジンを使用しています。 私のシーンはまだ非常にシンプルです。「Wolfenstein3d」を考えてください。タイルベースで、壁は立方体です。 壁がプレイヤーをブロックすることを期待し、通常の発生率でない場合、プレイヤーは壁に沿ってスライドすることを期待します。 私が得るものは、私が期待するものですが、1つの違いがあります。壁に無理に入れようとすると、2つの位置の間でフレームがすばやく点滅します。これらは約0.04単位の距離で異なります。これは私のゲームでは4 cmに相当します。 私は他の場所で4 cmに気づきました。休憩しているとき、私のプレイヤーカプセルの底は地面の下4 cmです。 接触と衝突を区別するために、Bulletエンジンのどこかにデフォルトの0.04単位長の許容誤差があるということですか?もしそうなら、私は何をすべきですか?これらの0.04単位が0.4 cmに対応するようにゲームのスケールを変更して、ジッターを10倍小さくする必要がありますか?または、弾丸の許容値をより小さい値に変更するように要求できますか? 編集する これは私が得るジッタです:6.155-6.118 = 0.036 LPoint3f(0, 6.11694, 0.835) LPoint3f(0, 6.15499, 0.835) LPoint3f(0, 6.11802, 0.835) LPoint3f(0, 6.15545, 0.835) LPoint3f(0, 6.11817, 0.835) LPoint3f(0, 6.15726, 0.835) LPoint3f(0, 6.11876, 0.835) LPoint3f(0, 6.15911, 0.835) LPoint3f(0, 6.11937, 0.835) setMarginメソッドを見つけました。壁のBoxShapeとプレーヤーのCapsuleシェイプの両方で5 mmに設定しました。このログ(11.117-11.082 = 0.035)が示すように、それでも約35 mmジッターします。 LPoint3f(0, 11.0821, 0.905) LPoint3f(0, …

1
骨のアニメーション-行列と計算
プロジェクトの完了に関しては、最終段階にありますが、アニメーションシステムを実装する直前です。 クライアントは「ボーンアニメーション」を選択することにしました。つまり、このアニメーション化されたオブジェクトが持つすべてのフレームとすべてのボーンに対して、各変換マトリックス(matrix4x4 rotation + translation)をエクスポートする必要があります。 ゲーム内のオブジェクトは3DS Max Physiqueモディファイヤでアニメーション化されているため、頂点ごとにボーン/ウェイトデータがあります。しかし、この件について少し理解するために、ここでは説明を簡略化します。 この投稿を2つのポイントに分割します。 すべてのフレームのボーンマトリックスのエクスポート 後のアニメーションの目的でボーンの位置をエクスポートする正しい方法について扱います。この場合、このボーンの影響を受けるすべての頂点をフレームXのボーンの位置に「移動」および「回転」する必要があります。 最終的な頂点位置の計算 フレームXのボーン変換に従って新しい頂点位置を計算するために、適切な行列演算について扱います。 1.フレームごとにボーンマトリックスをエクスポートする アニメーション化されたオブジェクトをエクスポートするときに、次のことを行う必要があることを正しく理解していますか? フレーム0でBONE変換行列を取得し、この行列を反転します FRAMExでBONE変換行列を取得 1 * 2を乗算して、FRAMExでのBONEの変換オフセットを取得します [pseudocode] // Animation export // For each frame, export bone transformation offset for(int iFrame = 0; iFrame < vFrames.size(); iFrame++) { // For every bone in the object for(int iBone …

1
流体シミュレータの移流プログラムの奇妙な問題
2D流体シミュレータを実装しました。ソルバーは完全にGPUで実行されます。すべて正常に動作します...私の仕事用PCで。しかし、自宅のPCではひどい不具合があり、それらを修正する方法を理解できません。経験的に、問題がadvectプログラムのどこかにローカライズされていることを発見しました。これは、私がビデオを統合した仕事で、そして自宅で— NVIDIA GeForce 9800 GTは非常に奇妙な原因です。次に、advectプログラムのGLSLソースを示します(明確にするために一部の行が省略されています)。 #version 130 out vec3 value; uniform sampler2D q; uniform sampler2D velocity; uniform float dt; uniform float inverseSize; void main() { vec2 p = gl_FragCoord.xy * inverseSize; vec2 np = p - dt * texture(velocity, p).xy; value = texture(q, np).xyz; } そしていくつかのスクリーンショット。 仕事用PC: 自宅のPC:
7 opengl  physics  glsl 

2
Windows Phone Performance Analysisは、ゲームの実行を高速化します。考えられる理由は?
私が作成していたXNAゲームは、私のWP7デバイスでゆっくり実行されていました。しかし、Windows Phone Performance Analysisでボトルネックを見つけるためにそれを開始したとき、ゲームは同じデバイスでスムーズに実行されました。 少し後で問題を見つけましたが、これは隣接チェック機能でした。機能を最適化しましたが、ゲームは正常に動作します。 パフォーマンス分析モードでゲームが魔法のようにスピードアップしたのはなぜですか?考えられる説明はありますか? これは、Perf分析モードでは高速に実行されたコードですが、それ以外の場合は低速でした。タワーディフェンスゲームでのダメージ対処機能です。 foreach (Target myTarget in _targets) { for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { if (x == 0 && y == 0) continue; try { Tile adjacent = _tiles[(int)myTarget.CurrentTile.X + x, …

2
ベクトルと三角形の辺の交差
ユーザーがこの三角形の内側の点の周りをドラッグできるiOS用の三角形のタッチサーフェスを作成しようとしています。このページの情報を使用すると、ドラッグしたポイントが三角形の内側にあるか外側にあるかを簡単に判断できます。ただし、ユーザーが三角形の外側をドラッグした場合、ポイントを三角形のエッジにクリップします。 ユーザーの指がこれらのエッジの外側をドラッグする場合は、ベクトルuまたはvをそれぞれゼロに設定する必要があるだけなので、これはサイドABおよびサイドACの場合は簡単です。ただし、BC側のポイントpを見つける方法がわかりません。ユーザーがエッジBCの外に指をドラッグした場合、この交点を見つける必要があります。
7 geometry 

3
ゲームの価格をどのように決定しますか?
これが質問の正しいボードであることを願っています。 私はゲーム、C ++とライセンスエンジンを使用したプログラミングスキルに関するこのアイデアを持っています。私はすでにコンセプトの証明としてゲームのプロトタイプを作成しており、これまでに何人かの友人が気に入っていました。 全部台無しにしたくないのですが、空間に設置されたアリーナのロボトロン風プレシジョンシューターです。 あなたがしているのは、敵の波を打ち負かすことだけです。レベルアップすると、船を強化する特典を選択します。例としては、武器をより強く、より速くし、船をより機敏にし、Smartbombs、Mineなどのさまざまな武器を作成しています。 この種類のゲームで異なるマップを作成することは、空間に障害がないため、非常に困難です。あなたができることは、さまざまな背景や小惑星などを作ることだけです。別のタイプのコンテンツは、ユーザーが仮想のお金を集めてウェーブ1で利用できるグッズをアンロックできるようにすることです。 これまでのところ、私の考えです。さて、これだけですでにゲームに5ドルを要求することは正当化できるでしょうか。たとえば、puppygamesのゲーム「Titan Attacks」と比較すると、機能が少ないので「はい」と答えます。彼らのウェブサイトでは、ゲームは7 $、Steam 4 $です。彼らのUltratronも7ドルで、これも古典的なロボットトロンスタイルのゲームです。しかし、それは特別な機能imho(それでも楽しいですが:D)を生み出しませんが、非常に愛らしいアートスタイルを持っています。 Nation Redは私にとっても刺激的なソース(Robtron Style 3D Zombie Shooter、素晴らしいゲーム)ですが、Steamで10ドルかかりますが、ローカル、オンラインの協力者もいます。 では、あなたが作ったゲームの価格をどのように見積もって、ライセンスの投資を取り戻した後でも人々が騙されずに利益を得られるようにしますか?
7 sales  pricing 


2
ボーンが指定された方向を指すようにクォータニオンを計算する
この質問を解決するために、ソースポーズの各ジョイントの絶対(ワールドスペース)方向を(正規化された単位ベクトルとして)把握し、ターゲットのジョイントを回転させてその方向に合わせることにしました。問題は、ボーン(ジョイントからその子へのベクトル)がワールド空間で指定された方向になるように回転クォータニオンを計算する方法です。 更新:これが私の現在の考えです。ボーンごとに、変換行列は次のようになります。 (1) absolute transform = local rotation * relative transform to parent in bind pose * parent absolute trasform したがって、3つの関節があるとします:肩->肘->手首。肩の絶対変換が既にあり、肘->手首がソースアニメーションと同じ方向になるように肘の回転を計算しようとしています。(1)から、絶対変換は次のようになります。 (2) ELBOW absolute = ELBOW local * SHOULDER to ELBOW relative * SHOULDER absolute (3) WRIST absolute = WRIST local * ELBOW to WRIST relative * ELBOW absolute 代入すると、次のようになります。 …


5
どうすれば.L directlyVEゲームをluaインタープリターから直接実行できますか?
私はLOVEとLUAで始めたばかりです。LOVEに興味があります。私は私のデイジョブ(私はWeb開発者です)とは違うものをいじりたいからです。LUAを使用して解釈されるので、 APIを試すのに最適な方法です。 しかし、私は.LÖVEゲームをluaインタープリターから直接実行する方法を見つけることができませんでしたか?APIで少しテストをするたびにゲームをパッケージ化するのは面倒です。
7 lua  love2d 

1
海底/水中地形の手続き的生成
海抜高度の地形に関しては、手続き型コンテンツの生成に利用できるリソースがたくさんあります。 海軍シミュレーションの場合、海面下の手順で地形を生成する必要があります。私の最初のアイデアは、標準的な手法(フラクタルなど)を使用することでしたが、おそらくこのトピックに関する優れたリソースを誰かが知っていますか? ありがとう。

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