問題タブ [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.

0 投票する
2 に答える
12008 参照

c++ - SDL 1.3 で OpenGL 3.2/3.x コンテキストを作成する

SDL が OpenGL 3.x コンテキストをサポートしていないと言う問題に直面しています。私はこのチュートリアルに従おうとしています: SDL (C / SDL) でのクロスプラットフォーム OpenGL 3.2 コンテキストの作成。この場合、GLEW を使用していますが、gl3.h をこれで動作させることもできませんでした。これは私が最終的に得たコードです:

SDL_GL_CreateContext(window)報告される唯一の問題は、SDL が「GL 3.x はサポートされていません」と報告する を呼び出そうとした後です。ただし、チュートリアルとこのサンプル パック(テストは行っていません) の両方で、SDL 1.3 と OpenGL 3.2 の組み合わせに成功したことが報告されています。SDL 1.3 が開発中であることは承知していますが、意図しないサポートでさえ削除されるとは思えません。

コンテキストは引き続き作成され、GLEW は問題なく初期化できます。(作成されたコンテキストのバージョンを確認する方法は一生わかりません。これはコア プロファイルであると想定されているためです。また、それを見つける方法もわかりません。チュートリアルによると、SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3)実際には何もしません。その場合、適切なコンテキストを作成する方法やデフォルトのコンテキストを変更する方法がわかりません。)

EDIT:Nicolがくれた便利な機能のおかげでいくつかのテストを行った後、に渡すパラメータに関係なくSDL_GL_SetAttribute、コンテキストは常にバージョン1.1であることがわかりました。ただし、3.0 未満のバージョンを入れても、サポートされていないというエラーは吐き出されません。問題は、SDL が認識する「コア」バージョンが 1.1 しかないことです。

記録として、Visual C++ 2010 Express、GLEW 1.7.0、および最新の SDL 1.3 リビジョンを使用しています。私はこれら 3 つすべてを使用するのはかなり初めてで、32 ビット バージョンと 64 ビット バージョンの両方の SDL ライブラリを手動でビルドする必要があったため、うまくいかないことがたくさんあります。ただし、これまでのところ、32 ビット バージョンと 64 ビット バージョンはまったく同じことを行っています。

編集:最新のドライバーで nVidia 360M GPU を使用しています。OpenGL Extension Viewer 4.04 は、OpenGL 3.3 までの完全な互換性があると報告しています。

どんな助けでも大歓迎です。

更新: SDL が 3.x コンテキストをサポートしていないと怒鳴るのを止めることができました。問題は、SDL_GL_SetAttribute設定する必要があることBEFORE SDL_Initが呼び出されることでした:

残念ながら、GLEW は OpenGL 1.1 よりも高いものを認識することをまだ拒否しています (GLEW_VERSION_1_1 のみが true を返します)。glGetString(GL_VERSION)1.1.0 も報告します。私のプログラムは、あたかもそれらがまったくインストールされていないかのように、単に新しいバージョンを認識していないようです。

0 投票する
1 に答える
1729 参照

vbo - OpenGLで頂点属性を設定するには?

単純な長方形の VBO を作成しようとしています。GL は、コア プロファイル (GL: 3.2、GLSL: 1.5、Cocoa の NSView 内) を使用するように設定されています。

OpenGL で単純な四角形を描画する方法を理解するのに何時間も費やしました。コア プロファイルに関する適切なチュートリアルを見つけるのは非常に難しいようです。私が見つけた最高のものはこのチュートリアルでした。

私はそれを自分のニーズに合わせて調整し、次のコードを思いつきました:

ただし、これは : を呼び出すときにエラーをスローしていglEnableVertexAttribArrayますINVALID_OPERATIONドキュメントglBeginは、前述の呼び出しが aとの間で行われた場合に、このエラーが発生することを示唆していますglEnd。これはそうではありません。つまり、私の知る限り、コア プロファイルでもサポートされていませんglBeginglEnd

したがって、私は途方に暮れています。このばかげた四角形を描画するにはどうすればよいですか (または少なくとも初期化します)?

0 投票する
2 に答える
1225 参照

opengl - GL_ALPHA8 は OpenGL 3.1 から削除されました。代替手段は何ですか?

私が見たところ、GL_ALPHA8内部ピクセル形式は OpenGL 3.1 の OpenGL コア仕様から削除されました。アルファチャンネルを備えたピクセルフォーマットはもうないようですが、RGBチャンネルはありません。GL_RGBA8これは、テクスチャを作成して RGB コンポーネントを 255 に設定し、メモリの 75% を浪費するしかないということですか?

0 投票する
2 に答える
294 参照

opengl - 1 つの VAO で複数のインデックス リストを使用する

私はおそらくこれについてすべて間違っていると思いますが、ねえ。

多数の壁セグメントをレンダリングしています (議論のために、200 としましょう)。すべてのセグメントは 1 単位の高さで、対角線のない直線です。方向のすべての変更は、90 度の変更です。
私はそれぞれを 4 つの尖った三角形のファン、別名クワッドとして表しています。各頂点には、0、0、0、0、1、7、10、1、129 などの 3 次元テクスチャ座標が関連付けられています。

これはすべて正常に機能しますが、もっと良くなる可能性があると思わずにはいられません。たとえば、すべてのポイントが少なくとも 2 回複製され (すべての壁はセグメントの連続線であり、3 方向と 4 方向の交点がいくつかあります)、開始コーナーのテクスチャ座標 (0,0,X および 0,1,X) は次のようになります。テクスチャ番号 X を持つすべての壁に複製されます。これは、O 座標を 3 番目の属性に移動し、S 座標と T 座標を別々にインデックス付けすることで、さらに圧縮できます。

問題は、これを行う方法がわからないことです。VAO は 1 つのインデックスのみを許可するように見え、ひとかたまりとして、各位置とテクスチャ座標は決して繰り返されない一意の雪片を形成します。(確かに、これは特定のコーナーでは当てはまらないかもしれませんが、それは非常にまれなケースです)

私がやりたいことは可能ですか、それとも現在使用している (確かに問題ない) メソッドに固執する必要がありますか?

0 投票する
1 に答える
96 参照

opengl-3 - 頂点シェーダーを使用してシグマ レンズを実装する方法

シェーダーを使用して OpenGLでシグマ レンズを実装しようとしていますが、いくつか問題があります。

テクスチャ座標を頂点シェーダーに渡し、フォーカス領域と遷移領域の空間変換を試みました。しかし、これは機能しません。元の画像しか取得できません。

頂点シェーダーのコードは次のとおりです。

不足しているものはありますか? Opengl と GLSL を学び始めたばかりなので、どんなアイデアでも大歓迎です。

ありがとう

0 投票する
2 に答える
1921 参照

qt - QGLShaderProgramを使用してQt4.7アプリケーションでグループ配列を使用してGLSL3.30シェーダーをコンパイルできません

シンプルな3DOpenGLビューアを作成することを目的として、Qt4.7を使用するアプリケーションを開発しています。GLSL3.30シェーダーを使用したい。Linux Ubutu11.10を使用しています。CGはNVS3100M GPUを搭載したNVIDIAであり、NVIDIAドライバーのバージョンは280.13、OpenGLのバージョンは3.3.0です。

照明を計算しない基本的なシェーダーがあります。それは次にやりたいのですが、私は問題で立ち往生しています。

これが私の機能していない修正された頂点シェーダーです。

GLSL 3.30のOpenGLシェーディング言語リファレンスには、次のように記載されています。

ですから、私が間違っていなければ、コードは正しいです。ただし、コンパイルすらしません。次のエラーがスローされます。

Lights [0] .ambientの呼び出しを削除すると、シェーダーはコンパイルされますが、均一な位置を取得しようとすると、機能しません。

また、「Light」、「lights」、「lights [0]」、「lights [0] .ambient」を統一名として使用してみましたが、成功しませんでした。

いくつか検索した後、私はこの投稿を見つけました:構造体配列の値をJSからGLSLに設定し、示されているように構造体を使用しようとしましたが、これも機能しません。

後続の質問

いくつかの答えのおかげでそれを機能させることができれば、データをアップロードするためにQGLShaderProgramのどのメソッドを使用すべきかわかりません。

tl; dr

1)次のコードがコンパイルされないのはなぜですか?vec4exColorを出力します。

2)またはの場所を取得するためにQGLShaderProgam ::uniformLocation()のパラメーターとしてどのユニフォーム名を使用する必要がありますuniform Light { ... } lights[4];struct Light { ... }; uniform Light lights[4];

3)場所が取得されたら、データをGPUにアップロードするためにQGLShaderProgramのどの機能を使用する必要がありますか?

どうもありがとうございます!

0 投票する
3 に答える
558 参照

opengl - フレームバッファオブジェクト作成エラー

編集:解決済み

テクスチャにレンダリングしようとしたときに問題が発生しました。次のようなフレームバッファオブジェクトを作成します。

ただし、の戻り値glCheckFrambufferStatusは常にGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTです。

Renderbufferがアタッチされていなくても同じであるため、問題はテクスチャにあるようです。フレームバッファ自体への描画は問題にはなりません。

誰かが私がここで欠けているものを指摘してもらえますか?

0 投票する
4 に答える
8542 参照

c++ - カメラからの距離に基づいてポイント スプライトのサイズを変更する

大学向けにコア OpenGL 3.3 のみを使用して Wolfenstein 3D のクローンを作成していますが、スプライトで少し問題が発生しました。つまり、スプライトを距離に基づいて正しくスケーリングすることです。

私が知る限り、以前のバージョンの OGL は実際にこれを行っていましたが、その機能は削除されており、再実装しようとする試みはすべて完全に失敗しました。

私の現在の実装は、遠距離ではまずまずで、中距離ではあまり粗末ではなく、近距離では奇妙です。

主な問題 (私が思うに) は、私が使用している数学を理解していないことです。
スプライトのターゲット サイズはビューポートよりもわずかに大きいため、そのサイズに近づくと「画像から外れる」はずですが、そうではありません。それは小さくなり、それは私を大いに混乱させます。
言葉が足りない場合に備えて、これの小さなビデオを記録しました。(私のは右側です)

期待される結果 実結果

誰かが私が間違っている場所に私を導き、その理由を説明できますか?

コード:
C++

頂点シェーダー

フラグメントシェーダー

0 投票する
1 に答える
675 参照

opengl - キューブの面が裂ける原因は何ですか?

少し見にくいですが、2つの顔の間に白黒の点があるように見えます。OpenGL の品質設定の 1 つであると思われますが、どれかはわかりません。それとも、テクスチャの最小/倍率フィルターでしょうか (両方とも線形に設定しています)。または、この問題を解決するにはミップマッピングが必要ですか? 何を探すべきかよくわかりません。


mimapping を行う方法を考え出しました....しかし、それは問題を悪化させるようです。

これが私の設定の一部です(C#にありますが、C APIの薄いラッパーです)


他のテクスチャでは気付かない:

だから多分私はそれについて心配することはありません...照明に行きましょう!

0 投票する
3 に答える
1909 参照

c++ - glGetUniformIndices が正しいインデックスを返さない

OpenGL Superbible 5 を読んで、ユニフォーム バッファ オブジェクトの使用方法を学ぼうとしています。シェーダーにユニフォーム ブロックがあります。

インデックスを取得するコードは次のとおりです。

何らかの理由で、この呼び出しは非常に高いインデックス (常に 4294967295) を示していますが、その理由はわかりません。明らかな何かが欠けているように感じます。OpenGL は 1 つのアクティブな均一ブロックを報告していますが、これは正しいもので、最大許容数は 15 です。コードのこのセクションの前後にエラー フラグはアクティブではありません。それがうまくいかない可能性のある提案はありますか?