タグ付けされた質問 「opengl」

OpenGLは、デスクトップおよびワークステーション市場を対象とするグラフィック標準およびAPIです。専用のコンピューターハードウェアで簡単に加速できるように設計されているため、ほとんどの実装では、従来のソフトウェアレンダリングよりもパフォーマンスが大幅に向上しています。現在、OpenGLはCADソフトウェアやコンピューターゲームなどのアプリケーションに使用されています。また、クロスプラットフォームです。OpenGL標準は、OpenGL ESも制御するKhronosグループによって制御されています。

1
メモリが正しく処理されていないかどうかをどのように知ることができますか?
私の(2D)ゲームのメモリフットプリントは、テクスチャをロードするたびに増加するようです。たとえば、ゲームを開始するとき、30 MBのプライベートRAMを使用します。 54 MBのプライベートRAM。 同じことは、同じ距離を移動した後、2つのポイント間を繰り返し往復した後に発生します。 しかし、私の読み出しは、プログラムがテクスチャが画面から消えてから約1秒後にglDeleteTexturesを正しく呼び出していることを示しています。valgrindはリークを検出していません。 これについて心配する必要があるかどうか、またはOSがメモリをページングする方法の単なる癖であるかどうかを知るにはどうすればよいですか?
12 opengl  memory 

1
OpenGLバインディングとエンティティ間の関係
これは主にドキュメントに関する質問です。これが、プログラマやスタックオーバーフローなどではなく、尋ねるのに適切な場所であることを願っています。 私はOpenGL仕様を読みませんでしたが、書籍(Red Book)やさまざまなチュートリアルから、APIのさまざまなオブジェクトと部分がどのように相互作用し、関係するかを正しく把握できません。 たとえば、VAOがバインドされている場合、VBOをバインドして属性を設定すると、VBOがVAOにバインドされます。 しかし、多くのオブジェクトがあり、それらの関係は異なる場合があります。たとえば、VAOは現在のシェーディングプログラムとはまったく関係ありませんが、描画操作の結果は両方に依存する場合があります。 さまざまなOpenGLコンポーネントすべての中に、A-binds-to-BまたはA-and-B-are-used-by-Cのような関係があります。これらすべての関係は、コンテキストの状態を変更する方法、物事を変更する方法、物事を一緒に保存して最適化する方法を決定することに同意します。 これらの関係だけを説明するリソースを探しています。UMLダイアグラム、グラフ、さらにはテキストドキュメントのように、呼び出しに焦点を当てていませんが、さまざまなOpenGLコンポーネントが相互作用し、相互に関連付ける方法を簡潔に説明します。 そのようなリソースの場所を知っていますか?

1
最適なテクスチャサイズは?
私は最近、プロジェクトにテクスチャパッケージャーを追加しました。これは、次のように、一定量のテクスチャを単一のテクスチャにパックします。 たとえば、これは582x1023ピクセルのサイズです。これらのパックされたテクスチャを追加する目的は明らかにパフォーマンスを向上させることだったので、OpenGL(LWJGLを使用)テクスチャの最適なテクスチャサイズを検索したかったのです。私が見つけたものは、広くサポートされている最大テクスチャサイズはによると、1024×1024であると考えられるということでした。この例のために。明らかに、多くのテクスチャだけがそれよりも大きくなるので、これは奇妙に思えます。ほとんどのグラフィックスカードは、それより大きいテクスチャをサポートしていると確信しています。ほとんどのグラフィックスカードは、たとえば4096x4096のテクスチャ(またはそれよりも大きいかもしれません)を処理できると合理的に期待できますか? 2番目の点に来るには(これがまだ1つの質問としてカウントされることを望みますが、本質的には同じ問題に要約されます):テクスチャのサイズを2の累乗にする必要があります(256x256、512x512、1024x1024、2048x2048、..)次の2の累乗よりも小さいテクスチャをパディングしますか?よると、この質問 2011年から、それは必須ではありませんが、性能や回避マイナーなバグを向上させることができ、この1 2012年からは、あなたは間違いなくパッドのテクスチャをすべきと述べています。ですから、これらの質問は以前に尋ねられたことがわかりますが、答えが変更されたと合理的に日付が付けられており、さらにそれぞれが私の質問に部分的にしか答えていません。他のプロジェクトはどのようにこれを処理しますか? TL; DR:ほとんどのグラフィックカードで処理できるテクスチャサイズはどれくらいですか?最適なテクスチャサイズは何ですか(またはありますか)。テクスチャの幅を次の2の累乗でパディングする必要がありますか?

3
固定軸を中心にオブジェクトを回転
私はアプリのユーザーに、画面上で指をドラッグして、画面の中央に描かれた3Dオブジェクトを回転させようとしています。画面上の水平方向の動きは、固定されたY軸の周りの回転を意味し、垂直方向の動きは、X軸の周りの回転を意味します。私が抱えている問題は、1つの軸の周りの回転を許可するだけでオブジェクトが正常に回転するのに、2番目の回転を導入するとすぐにオブジェクトが期待どおりに回転しないことです。 これが何が起こっているかの写真です: 青い軸は固定軸を表します。この固定された青い軸を持つ画面を描きます。これは、オブジェクトに関連して回転させたいものです。何が起こっているのかは赤です。 私が知っていることは次のとおりです。 Y(0、1、0)を中心とした最初の回転により、モデルは青いスペース(このスペースAと呼ばれる)から別のスペース(このスペースBと呼ばれる)に移動します。 ベクトル(1、0、0)を使用して再度回転しようとすると、スペースAではなくスペースBでx軸を中心に回転します。 私が知っていることを考えると、私が試したものがあります(簡潔にするためにW座標を除外します): 最初に、クォータニオンを使用してY(0、1、0)を中心に回転します。 回転Yクォータニオンをマトリックスに変換します。 Y回転行列に固定軸x Vector(1、0、0)を掛けて、新しい空間に関連するX軸を取得します。 クォータニオンを使用して、この新しいXベクトルを中心に回転します。 コードは次のとおりです。 private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space …

1
バッファーのバインドを解除する必要がありますか?
OpenGL ES 2でいくつかのテストを行っていますが、いくつか質問があります。私の現在のプログラムは次のようなものです。 Init ------- -> create index buffer -> fill index buffer glBufferData … -> create vertex buffer -> fill vertex buffer glBufferData … Draw ------- 1. Apply vertex buffer -> Bind VAO -> bind vertex buffer - enable attributs (glVertexPointer, …) -> unbind vertex buffer -> Unbind VAO …

3
グラフィックスパイプラインを使用して、密度関数に基づいてボリュメトリックデータをレンダリングするにはどうすればよいですか?
両方のグラフィックスAPI(OpenGLおよびDirectX)は、いくつかのステージがプログラム可能な、明確に定義されたパイプラインを考案します。これらのプログラム可能なステージは、固定された最小量のデータを取得する必要があり、データに対して適切に定義された範囲の操作を行い、定義された最小出力を出力するため、データを次のステージに正しく渡すことができます。これらのパイプラインは、限られた量のジオメトリデータのみで動作するように設計されているように見えます。D3DとOGLの両方の場合、頂点データとテクスチャ座標です。 しかし、作成しようとしているアプリケーションが幾何学的データを表すために頂点(またはボクセルさえ)を使用せず、変換や投影、ラスタライズ、補間、またはそのような何かを正確に行わない場合、APIのそのような制限またはパイプラインが物事を困難にします。 では、グラフィックスパイプラインを変更して、各ステージがデータに対して行う機能と各ステージで出力されるデータのタイプの機能を変更する方法はありますか?そうでない場合、「生の」API関数を使用して独自のパイプラインを構築する方法はありますか?そうでない場合は、それが不可能な理由を説明してください。 編集:私のアプリケーションは、密度関数を使用してジオメトリを表現します。この関数は、空間の各ポイントに値を持っています。カメラの錐台を3Dグリッドに分割し、各ブロックをピクセルとして投影できます。各ブロックで、密度関数を統合し、その値が必要な値を超えているかどうかを確認します。はいの場合、そのブロックに何かが存在し、そのブロックに対応するピクセルがレンダリングされると想定されます。だから、今私のレンダラーでは、頂点バッファーの頂点データの代わりに、関数(文字列で表す)をグラフィックスハードウェアに渡したいと思います。これは、頂点シェーダーに同種のクリップスペースに変換する頂点がなく、フラグメントシェーダーがピクセル情報を取得しないことも意味します。代わりに、ほとんどの検索と評価はピクセルごとに行われます。

2
OpenGL:VBOを指定せずにVAOを使用できますか
VAO(頂点配列オブジェクト)に関するすべてのチュートリアルで、頂点属性を構成し、VBO(頂点バッファーオブジェクト)をバインドすることにより、VAOの使用方法を示しています。しかし、各バッファーが同じデータパターン(頂点、uv、色など)を使用する固定シェーダーと組み合わせて、VBOのセット用に構成されるVAOを作成します。したがって、1つのシェーダーを使用して描画される複数のVBOに対して1つのVAOを作成します。 これに関するデモが見つからなかったため、試してみることにしました。しかし、それは機能せず、glDrawArray呼び出し時にクラッシュします。VBOがバインドされていないようです。私が使用しているコードは次のとおりです。 レンダリング: /* Prepare vertex attributes */ glBindVertexArrayOES(vao); /* Upload the buffer to the GPU */ glBindBuffer(GL_ARRAY_BUFFER, pool->next()); glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer()); /* Draw the triangles */ glDrawArrays(GL_TRIANGLES, 0, parts * 6); glBindVertexArrayOES(0); VAO作成: glBindVertexArrayOES(vao); glEnableVertexAttribArray(ls.position); glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0); glEnableVertexAttribArray(ls.color); glVertexAttribPointer(ls.color, 3, …
12 opengl  vbo  vao 

1
OpenGL-キューブ上の白いエッジ
私が作っているMinecraftのようなゲームでは、キューブに白い縁ができます。 暗いテクスチャではより顕著になります。テクスチャは次のように設定されています: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 助けがありますか?

2
累積マトリックス変換を使用してジンバルロック問題を解決する方法
ジェイソンL.マッケソンのオンライン「Learning Modern 3D Graphics Programming」本を読んでいます 今のところ、ジンバルロックの問題と、クォータニオンを使用してそれを解決する方法について説明しています。 ただし、ここ、クォータニオンページで。 問題の一部は、方向を一連の3つの累積軸回転として保存しようとしていることです。方向は回転ではなく方向です。そして、向きは確かに一連の回転ではありません。そのため、船の向きを特定の量としての向きとして扱う必要があります。 これは私が混乱し始める最初の場所だと思います。理由は、向きと回転の劇的な違いが見えないからです。また、方向が一連の回転で表現できない理由もわかりません... また: この目的に向けた最初の考えは、マトリックスとしての方向を維持することです。向きを変更するときが来たら、この行列に変換を適用し、結果を新しい現在の向きとして保存します。 これは、現在の方向に適用されるすべてのヨー、ピッチ、およびロールが、現在の方向に対して相対的であることを意味します。まさにそれが私たちに必要なものです。ユーザーが正のヨーを適用する場合、そのヨーは、ある固定座標系ではなく、現在のポインティングの位置を基準にして回転させます。 概念は理解していますが、行列変換の累積がこの問題の解決策である場合、前ページで示したコードがそれだけではないことを理解していません。 コードは次のとおりです。 void display() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutil::MatrixStack currMatrix; currMatrix.Translate(glm::vec3(0.0f, 0.0f, -200.0f)); currMatrix.RotateX(g_angles.fAngleX); DrawGimbal(currMatrix, GIMBAL_X_AXIS, glm::vec4(0.4f, 0.4f, 1.0f, 1.0f)); currMatrix.RotateY(g_angles.fAngleY); DrawGimbal(currMatrix, GIMBAL_Y_AXIS, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f)); currMatrix.RotateZ(g_angles.fAngleZ); DrawGimbal(currMatrix, GIMBAL_Z_AXIS, glm::vec4(1.0f, 0.3f, 0.3f, …

4
OpenGL ES 2.0でのジオメトリのインスタンス化
OpenGL ES 2.0でジオメトリのインスタンス化を行うことを計画しています。基本的に、同じジオメトリ(椅子)をシーンで1000回レンダリングする予定です。 OpenGL ES 2.0でこれを行う最良の方法は何ですか? モデルビューmat4を属性として渡すことを検討しています。属性は頂点データごとであるため、同じ三角形の各頂点に対してこの同じmat4を3回渡す必要があります(モデルビューは三角形の頂点全体で一定のままなので)。 これは、GPUに送信される多くの追加データに相当します(2つの追加頂点* 16フロート*(三角形の数)追加データの量)。 または、三角形ごとに一度だけmat4を送信する必要がありますか?しかし、属性は「頂点ごと」のデータとして定義されているため、属性を使用してどのように可能ですか? OpenGL ES 2.0でインスタンス化を行うための最良かつ効率的な方法は何ですか?

4
OpenGLでマルチパスシェーダーはどのように機能しますか?
Direct3Dでは、プログラム内でパスを文字通り定義できるため、マルチパスシェーダーの使用は簡単です。OpenGLでは、シェーダープログラムに必要な数の頂点シェーダー、ジオメトリシェーダー、およびフラグメントシェーダーを与えることができるため、もう少し複雑に思えます。 マルチパスシェーダーの一般的な例は、トゥーンシェーダーです。1つのパスは実際のセルシェーディング効果を実行し、もう1つのパスはアウトラインを作成します。2つの頂点シェーダー「cel.vert」と「outline.vert」、および2つのフラグメントシェーダー「cel.frag」と「outline.frag」(HLSLで行う方法と同様)がある場合、どうすればよいですかそれらを組み合わせてフルトゥーンシェーダーを作成しますか? マルチパスGLSLシェーダーの背後にある理論を知りたいだけなので、これにジオメトリシェーダーを使用できると言ってほしくありません;)
12 opengl  shaders  glsl 

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

5
GLUTは廃止されましたか?
質問がされた日付のOpenGLのリソースアップに、良いについて尋ねられ、答えの1近代的なOpenGLのプログラミングについてのチュートリアルへのリンクでした。 問題のチュートリアルではGLUTとGLEWを使用していますが、GLUTが廃止されていることをどこかで読んでいます。本当?
12 opengl  glut 

5
GLUTの代替品は何ですか?
私はOpenGLを学ぼうとしていますが、GLUTは廃止されていることがわかりました。私はすでにSDLを知っていますが、それは良い代替手段のようです。OpenDLを使用してゲームを開発するためにSDLを使用する必要がありますか、それともより良い代替手段がありますか。私はゲーム開発が初めてなので、最新技術についてはあまり知りません。
12 opengl 

2
Minecraftクローンをオープンソースにすることはできますか?
暇なときにMinecraftのようなゲームを開発しています。実際、それは「Minecraftのような」ものではありません。可能な限りコピーに近づけようとしているためです(16歳で自分自身の運動として、単に楽しいからです)。もちろん、Minecraft Coder Pack(MCP)を使用してコードをコピーするわけではありません。OpenGLを使用してJavaでゼロからゲームを開始しました。 だから、私の質問は次のとおりです:GitHub、Google Codeなどの公開ソースコードバージョニングホストにソースコードをオンラインにすることができますか(プライベートコードを使用するためにお金を払いたくないので、コードをオープンソースにします)ホスト)?もちろん、ゲームはNotchからのものなので、ゲームを販売したくありません。 重要かもしれない詳細は、私がカスタムテクスチャパックを使用していることです(したがって、実際のMinecraftに同梱されているものではありません)。 許可されている場合、ルールはありますか?私はこのページを見ましたが、彼はこれについて何も言っていないようです:http : //www.minecraft.net/terms 編集:BeglaからTerasology と呼ばれるゲーム(Blockmaniaという名前で開始)があります。これは素晴らしいプロジェクトですが、Minecraftに可能な限り近づけることは意図されていません。そのプロジェクトはオープンソースです。

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