タグ付けされた質問 「graphics-programming」

コンピュータ画面上の情報の視覚的表現に関連するプログラミング。


1
quadrilinearテクスチャサンプリングハードウェアはサポートされていますか?
ミップマップを含むボリュームテクスチャがある場合、GL_LINEAR_MIPMAP_LINEARテクスチャサンプリングは四次線形テクスチャサンプリングを実行します。 バイリニアテクスチャサンプリングのようなハードウェアに実装されていますか?または、ドライバーは2つのトライリニアテクスチャサンプルを実行し、それらの結果を補間するだけですか? トリリニアサンプリングはハードウェアでもサポートされていますか?

1
OpenGLで頂点を描画する最も効率的な方法
私はOpenGL 3Dゲームを書いています。地形や使用中のオブジェクト用の多数の三角形があります。 私はOpenGL公式ガイドから勉強していて、最初に提示された方法は、描画したい各頂点のglVertex後に関数を呼び出すglBeginことです。 ただし、何千もの三角形を描く必要がある場合、この方法はかなり古くて非効率的です。各フレームで変化しない情報をグラフィックカードのメモリに保存する方法があるので、各フレームをレンダリングすると、その情報はすでにそこにあります。より「不安定な」情報については、おそらくフレームごとに新しい頂点データを送信する必要があるため、別の手法の方が効率的かもしれません。 私の質問に来ます:頂点情報をハードウェアに送信し、レンダリングするための指示を与えるために使用される最も近代的で効率的なOpenGL関数と技術の明確な説明をお願いします。 フレーム中にめったに変化しない頂点データをレンダリングするための順序を送信するための最良の方法とOpenGLツールは何ですか(私は地形とオブジェクトについて考えます)、フレーム中に大きく変化する頂点データを送信するための最良の方法は何ですか?

1
多くの種類のプリミティブを描画できるレンダラーを実装するにはどうすればよいですか?
これは、インデックス付きプリミティブの描画に関して以前に私が尋ねた質問にいくぶん関連しています。 私の問題は、たくさんを描きたかったのに、1つの立方体しか描いていなかったことです。問題は、それぞれの新しいインスタンス化で頂点バッファーとインデックスバッファーを上書きするCubeことであり、代わりに原点に1つ作成してから多数を描画し、変換マトリックスを介してシェーダーに渡し、異なるように見えるようにする必要があるということです。場所。これは美しく機能しました。 しかし、今は新しい問題があります。どのようにして多くの異なるタイプのプリミティブを描画するのでしょうか。 これが前の質問からの私のコードです: Cube::Cube(D3DXCOLOR colour, D3DXVECTOR3 min, D3DXVECTOR3 max) { // create eight vertices to represent the corners of the cube VERTEX OurVertices[] = { {D3DXVECTOR3(min.x, max.y, max.z), colour}, {D3DXVECTOR3(min.x, max.y, min.z), colour}, {D3DXVECTOR3(min.x, min.y, max.z), colour}, {min, colour}, {max, colour}, {D3DXVECTOR3(max.x, max.y, min.z), colour}, {D3DXVECTOR3(max.x, min.y, max.z), colour}, …

2
Openglでオブジェクトの周りに輪郭を描く
3D空間で2Dオブジェクトの周りに輪郭を描く必要があります。オブジェクトの周りに線を引いてみましたが(ギャップを埋めるためのポイント)、線の幅のため、その一部(〜50%)がオブジェクトを覆っていました。この問題を解消するためにステンシルバッファーを使用しようとしましたが、次のようになりました(輪郭は緑です)。 http://goo.gl/OI5uc(評判のため、画像を投稿できません) 線の一部がオブジェクトの背後にあり、一部が上にあることが(矢印が指しているところ)わかります。これはカメラを動かすと変化しますが、常にそれを覆っている部分があります。これが、オブジェクトの描画に使用するコードです。 glColorMask(1,1,1,1); std::list<CObjectOnScene*>::iterator objIter=ptr->objects.begin(),objEnd=ptr->objects.end(); int countStencilBit=1; while(objIter!=objEnd) { glColorMask(1,1,1,1); glStencilFunc(GL_ALWAYS,countStencilBit,countStencilBit); glStencilOp(GL_REPLACE,GL_KEEP,GL_REPLACE ); (*objIter)->DrawYourVertices(); glStencilFunc(GL_NOTEQUAL,countStencilBit,countStencilBit); glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE); (*objIter)->DrawYourBorder(); ++objIter; ++countStencilBit; } 私はステンシルバッファーのさまざまな設定を試しましたが、常にそのようなsthを取得していました。ここに質問があります: 1.ステンシルバッファを間違って設定していますか? 2.そのようなオブジェクトに輪郭を作成する他の簡単な方法はありますか? 前もって感謝します。 編集: 1.オブジェクトの法線がありません。 2.物体は凹面である可能性があります。 3.シェーダーを使用できません(以下の理由を参照してください)。

5
非常に大きなゆっくり回転する惑星を描く
ゆっくりと回転する惑星の非常に大きな(500ピクセル以下)グラフィックを描画したいと思います。これらのグラフィックは印象的なものです。これを行う最良の方法は何ですか?私は特定の3Dエンジンの経験がなく、このゲームがどのプラットフォームで動作するかさえわかりません。 各フレームを事前にレンダリングすることもできましたが、500pxで10秒の回転周期で、これは惑星ごとに途方もない量のデータです。 3Dエンジンを使用して、惑星のテクスチャを球に近づくメッシュにマッピングすることができますが、500pxでは、見栄えをよくするためにポリゴン数が膨大になる必要があるのではないかと心配しています。 各ビューピクセルのx / y座標を球のテクスチャの座標空間に変換することで、テクスチャ球を効率的にレンダリングするだけの一種のカスタム3Dエンジンを書くことができますが、これは複雑であり、メリットを得ることができませんでしたグラフィックアクセラレーション。 私が考えていない他の何か? ここに私が何を意味するかのアニメーションGIFの例があります。(100x100 pxと60フレームで、それはすでにかなり巨大です、申し訳ありません。)これだけ、非常に大きく、非常にゆっくり回転し、よりスムーズにアニメートされることを想像してください。 ただし、これが500x500ピクセルで10 x 25 = 250フレームの場合、数百MBのデータについて話しているため、この単純なアプローチは機能しません。

2
太りなど、特定の機能を制御する機能をプレイヤーに与えるには、どのようなテクニックを使用できますか?
私はキャラクターのカスタマイズツール(たとえば、基本モデルから始めて、プレイヤーが自分の太りをコントロールできる)に取り組んでいるので、このトピックに関するアイデア、テクニックなどを探しています。 いくつかの調査の後、私はこの手法を考えました:2つのモデル(1つの標準的な人間と1つの太った人間、両方とも頂点と三角形のような同じデータを持つ)から始めて、2つの元のメッシュに関するデータを格納することによって新しいモデルを作成します(例:ストア) 2番目のメッシュの頂点データをカラーデータとして)、シェーダーを使用してそれらの補間を制御します。 このアイデアについてどう思いますか?提案?

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
OpenGL 2以降と3以降:2Dグラフィックの主な違いは何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 OpenGL 3.0の前後のOpenGLコンテキストはかなり異なります。これまでのところ、私はどちらにしても実際にはどちらか一方のバッファでのみ作業してきましたが、最も顕著な違いはイミディエイトモードがないことです。 イミディエイトモードの考慮事項をまとめて捨てる場合、特に2Dグラフィックエンジンで低レベルの2次元操作をコーディングする場合に注意すべき重要な違いは何ですか?

2
OpenGL ES 2.0:VBOを使用していますか?
OpenGL VBO(頂点バッファーオブジェクト)は、OpenGL(私の場合はOpenGL ES 2.0)のパフォーマンスを向上させるために開発されました。ロジックは、VBOの助けを借りて、データをフレームごとにクライアントメモリからグラフィックスカードにコピーする必要がないことです。 しかし、私が見ると、ゲームシーンは絶えず変化しています。オブジェクトの位置が変化し、スケーリングと回転が変化し、アニメーション化され、爆発し、スポーンまたは消滅します。 コンピュータゲームシーンなどの非常に動的な環境で、VBOをフレームごとに構築する必要がある場合、VBO を使用する意味は何ですか。 コンピュータゲームでVBOを実際に活用する方法を理解するのを手伝っていただけませんか。より多くの頂点ベースのVBO(たとえば、1つのオブジェクトに1つ)があるか、または各描画サイクルに対して常に1つだけのVBOが存在している必要がありますか?

2
OpenGLまたはOpenGL ES
私は何を学ぶべきですか?OpenGL 4.1またはOpenGL ES 2.0? Qtを使用してデスクトップアプリケーションを開発する予定ですが、モバイルアプリケーションの開発も数か月以内に開始する可能性があります。3Dや3Dの数学などについては何も知りません。1週間のWebサイトの調査と試行錯誤よりも、100ドルをいい本に費やしたいと思っています。 OpenGL 4.1で私が目にする問題の1つは、OpenGL ES 2.0に関する本はありますが、まだ本がないことです(最新のものはOpenGL 3.3または4.0用です)。 一方、私の素朴な観点から見ると、OpenGL 4.1はOpenGL ES 2.0 +追加機能のように見えるため、最初にOpenGL ES 2.0を学習してから、シェーダー言語などに進む方が簡単/優れているようです。 NeHe(悪い/古い慣習でいっぱいであると一般に同意されている)、Durianチュートリアルなどを使用するように言わないでください。 ありがとう

6
ゲームプログラミングでソートアルゴリズムをプログラムする方法を知る必要がある重要なケースはありますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 まあ、私はウィキペディアでアルゴリズムをソートすることについて少し読んだことがありますが、特にアルゴが他のアルゴよりも速いいくつかのケースを扱う場合、主題は広大に見えます。 簡単に要約する必要があるかもしれませんが、その前に、並べ替えが必要なゲームプログラミングの主題があるかどうか誰かに教えてもらえますか?(またはオプションで、実行時間は重要です)。 たぶん深度バッファにあるのでしょうか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.