問題タブ [opengl-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - RubyでOpenGL 3.xまたは4.xコンテキストを作成するには?
私はいたるところを見てきましたが、OpenGL 3/4 コンテキストの作成を可能にするルビ バインディングがないようです。
完全な OpenGL バインディング ライブラリである必要はなく、OpenGL コンテキストを作成する部分だけです。
更新: 絶望的な場合は、部分的な glfw ruby バインディングを ruby ffi で行います。だから、それから私を救ってください;)
opengl - 行列の成分と内積
次のGLSLコードがあります:
ルーチンRGBtoXYZには 3 つのコード ブロックがあります (最後の 2 つがコメントされています)。最初のものは期待どおりに機能しますが、他のコメントされたものは機能しません。
問題は、それらが同等だと思うことです。なぜそうではないのですか?
c++ - 固定パイプラインから最新の OpenGL への移行
私はいくつかの単純な OpenGL (古い固定パイプライン、シェーダーなしなど) を実行しており、本格的な「最新の」OpenGL プログラミングを開始したいと考えています。(Windows および Linux でコンパイルする必要があります)
いくつか質問があります。
1) Windows では、"gl.h" には OpenGL2.0+ 関連の API 呼び出しが宣言されていません (例: glShaderSource() )。これらの API 呼び出しにアクセスするにはどうすればよいですか? このアプリケーションを他のマシンでコンパイルしたいので、グラフィックカード固有のヘッダーをインストールしたくありません。
2) Linux で Mesa ライブラリをインストールすると、上記の OpenGL2+ API 関数にアクセスできますか?
performance - OpenGL を使用して輪郭レンダリングのパフォーマンスを向上させるには?
ビデオを参照してください。
私のアプリケーションでは、GL_LINE_STRIP を使用して作成された DisplayList を使用して輪郭のスタックを表示します。
ユーザーは、マウスを使用して等高線を選択できます。そのために、DisplayList をレンダリングする前に、一意の色を使用してすべての輪郭をレンダリングし、マウスの下のピクセル色を読み取ります (ここで説明されているように)。このレンダリングは、「即時モード」を使用して行われます。
ユーザーは、選択した輪郭を移動、削除することもできます。その場合、DisplayList を再生成します。
私の質問は次のとおりです。
1) 古い OpenGL 技術を使用しています (固定パイプライン アーキテクチャ)。新しい OpenGL 技術を使用してパフォーマンスを向上させる方法はありますか? (GPU、シェーダーなどを使用) 輪郭の数が多いため、操作がスムーズではありません。
2)輪郭選択のために行われる「即時モード」レンダリングもパフォーマンスパネルだと思います。これを行うより良い方法はありますか?
3) GL_POINTS を使用して、輪郭ノードを点群として表示する必要があります。この場合、GL_POINTS を使用して別の DisplayList を作成する必要がありますか? (つまり、2 つの DisplayLists があることを意味します。1 つはラインを表示するとき、もう 1 つはポイントを表示するとき)?
opengl - glPushName と glPopName の機能を実現する方法
openGL 3.x で glPopName と glPopName の機能を実現するにはどうすればよいですか?
opengl - openGL 3.1でglPixelTransfer、glTexEnv、glRasterPosを使用するにはどうすればよいですか?
glPixelTransfer
、glTexEnv
およびglRasterPos
OpenGL3.1で非推奨になりました。何に置き換えられますか?交換しない場合、どうすれば同様の効果を得ることができますか?これらの機能を利用したいと思います。
c++ - OpenGL 3.x VBO へのバインド
OpenGL 2.x スタイルの頂点配列を使用して OpenGL 3.x で動作するエンジンを更新しようとしています。これは、VAO/VBO への更新を意味します。私は VBO に適切にバインドしていないと思います。詳細については以下を読むか、コードにスキップして、私が間違っていることを見つけてください。
私のメッシュ クラスの簡単な概要は次のようになります。
メッシュ
- ルート MeshNode
MeshNode
- 変身
- VAO 指数
- インデックス VBO インデックス
- 子 MeshNode の配列
- MeshObject の配列
メッシュ オブジェクト
- メッシュ全体の 1 つの部分について、ファイルからロードされたすべての頂点およびインデックス データ
- 頂点 VBO インデックス
MeshObject を 1 つだけ使用して MeshNode を描画すると、うまく描画されるようです。複数の MeshObject を使用して MeshNode を描画すると、描画しようとしているモデルの全体的な形状が得られますが、文字化けしています。
Visual Studio デバッガーで頂点データを確認し、gDEbugger を使用して VBO データを確認したところ、すべて問題ないように見えたので、ファイルからの読み込みと VBO への読み込みが機能していると確信しています。
gDEbugger を使用して、三角形ではなくすべての頂点のポイントを描画するように強制しました。これは単一の MeshObject の形状をしているため、さまざまな VBO に適切にバインドしていないだけだと思います。異なるインデックスで描画しようとしているかのようですが、毎回同じ頂点です。
VertexData は次のようになります。
関連する MeshNode コード:
関連する MeshObject コード:
opengl - OpenGLで頂点配列とテクスチャを組み合わせる
頂点配列を使用して、多数の頂点を含む適度に大きなメッシュを描画しようとしています。テクスチャはこれらから決定されており、次の線に沿って即時モードで描画するのは簡単です。
ただし、読みやすさ、速度、その他の点で、頂点配列を使用したいと思います(VBOへの移行を目的としています)。単一の頂点を配列に複数回配置することを回避する方法はありますか?
現時点で理解しているように、メッシュの各頂点はメッシュの面に表示される回数だけ指定する必要があります。これは、各頂点が複数のテクスチャ座標を識別するためです(テクスチャは実際の画像からキャプチャされます。メッシュが近似するオブジェクト)、つまり、頂点/頂点座標配列は、即時モードで塗りつぶしたかのように読み取ります。
冗長な(つまり、繰り返される)頂点を使用せずに、テクスチャ座標を指定しながら頂点配列を使用する方法はありますか?
semantics - OpenGL 3.x での CG シェーダー セマンティクス?
以前は OpenGL 2.x で頂点配列を操作する CG シェーダーを使用していましたが、OpenGL 3.x で VBO と VAO を使用するように更新したところ、POSITION を除いてセマンティクスが機能していないようです。CG はコンパイル エラーをスローしませんが、フラグメント シェーダーの出力カラーを入力の通常値に設定すると、真っ黒になります。使用するように言っているページにリンクする別の回答がありますcgGLEnableClientState
(それ自体は何もしませんでした)およびcgGLSetParameterPointer
(すでにOpenGLにデータを送信しているので、CGを介して別のコピーを送信するのはおかしいようです)。それで、私は何が欠けていますか?
頂点シェーダー:
フラグメント シェーダー:
これらを のインデックスとしてリストしている場所を見つけましたglVertexAttribPointer
が、簡単に間違っている可能性があります (これらはShader::POSITION
、Shader::NORMAL
VBO セットアップ関数の 、 などです)。
以下の VBO セットアップ関数:
以下のシェーダーバインド関数:
opengl - glGetUniformLocation が失敗するのはなぜですか?
数日前に Gwen を見つけ、私のプロジェクトに最適な GUI ツールキットのように思えました。しかし、レンダラーの OpenGL 2 コードをすべて見てください。そこで、OpenGL 3 レンダラーを作成して実際に使用できるようにしようと考えましたが、GLSL よりも CG に精通しているため、サンプルの作成に行き詰まってしまいました。これらの均一な変数を設定できれば、基本的には完了すべきだと思います。
シェーダーは問題なくコンパイルおよびリンクされます。正射行列とテクスチャ サンプラーに対して -1 を返す glGetUniformLocation に絞り込みましたが、正確にそれを行っている理由がわかりません。典型的な問題は、実際にそれらを使用していない場合、それらが最適化されてしまうことのようですが、私は両方を使用しました。
誰かがアイデアを持っているなら、私はすべて耳を傾けます。適切に機能したら、完全なものを投稿/リンクしていただければ幸いです。これは GLSL での最初の試みなので、ばかげたことを簡単に行うことができます。別のプロジェクトの CG のセットアップを終えたばかりなので、完全に無知というわけではありません。
OpenGL コンテキストの設定後に呼び出される Shader Init コード:
シェーダーはヘッダー ファイルに文字列として保存されますが、改行とバックスラッシュをすべて取り除いて、見やすくしています。
頂点シェーダー:
フラグメント シェーダー: