問題タブ [off-screen]

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 投票する
1 に答える
653 参照

c++ - 1 つのフラグメント シェーダーの 2 つのテクスチャのうちの 1 つに対する OpenGL の選択的なオフスクリーン レンダリング

回転マニピュレータ用の glsl シェーダを作成しています。私はAutodesk Mayaスタイルを目指しています。xyとzの回転のそれぞれに3つの軸があり、カメラの前方軸に沿った回転に1つの軸が4に等しいです。

ユーザーは、ビューポートで直接選択することにより、操作の結果を特定の軸に制限することができます。

オブジェクトの選択を有効にするために、レンダー ターゲットとして 2 つのテクスチャがアタッチされたカスタム フレームバッファを使用しています。1 つは色用、もう 1 つはセレクション ID 用です。

問題は、これらの 4 つの軸を GL_LINES モードで描画すると、ユーザーにとって問題が発生することです。線が細くきれいに描かれている場合、ユーザーはそれらを非常に正確にクリックして特定の軸をアクティブにする必要があります。これは、軸の適切な object_id を持つピクセルを正確に選択する必要があるためです。2 つの別々の図面を作成することで、彼の生活を楽にしたいと考えています。カラー出力用の細い線と objectid 出力テクスチャ用の 3 倍の幅の線。

私はopenGLの初心者です。今、私の単純なロジックは、フラグメント シェーダーにカラーまたは objectid バッファーのどちらに描画するかを指示するブール値のユニフォームを渡しています。

渡されたrender_targetセレクターを使用した描画コマンドは次のとおりです

そして、ここにフラグメントシェーダーがあります:

そのために使用しているロジックは、見苦しく最適化されていないように見えるので、本当に好きではありません。まず、シェーダーを 2 回実行する必要があり、かなり複雑なジオメトリ シェーダーがあり、そこで円を生成するためです。2 つ目は、私のフラグメント シェーダーには多数の if else があり、gpu は分岐を好まないと言われたためです。

質問 1 同じことを行うシェーダーを作成する別の適切な方法は何ですか? 質問 2 はより技術的なものです。

ここに画像の説明を入力

ここでは、これら 2 つの glDrawArrays 呼び出しで得られるもののスクリーンショットを提供します。ご覧のとおり、カラーバッファーに黒い輪郭があります。問題は、framgent シェーダーが out_objectid ターゲットのレンダー コードを実行するときに、下の図のようにいくつかのダーティ ランダム情報を out_color に書き込むため、out_color=vec4(0,0,0,0 で上書きする必要があったことです。 )。少なくともそれはきれいな黒を与えます。

ここに画像の説明を入力 質問 2. 私の間違いはどこですか? objectid ブロックが out_color に書き込まれないようにするにはどうすればよいですか? ありがとう更新:提案されたことに従って、この種の効果が得られました。openGL の内部で何が起こっているのかわかりません。まだ GL_DEPTH_COMPONENT に書き込み、そのような結果につながる未定義の深さテストを行っているようです。マニピュレータは常に上にあるため、この描画呼び出し中に深度書き込みは必要ありません。追加のアドバイスをいただけるかもしれません。

ここに画像の説明を入力 描画コード

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

qt5 - Qt: QML ウィンドウをバッファにレンダリングする

私のコードは次のようになります。

私が提供するバッファにすべてをQtでレンダリングさせる方法を教えてください。OpenGL は避ける必要があります。QWebPage でこれを機能させることもできますが、これは私にははるかに難しいようです...

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

c++ - FBO + テクスチャ: ジオメトリ データのオフスクリーン生成による奇妙な結果

最初の段階で長方形メッシュの頂点の位置を生成し、それらを 2D float テクスチャに格納する 2 つ以上のパス レンダリングがあります。シェーダーは次のようになります。

バーテックス:

断片:

出力 2D float テクスチャは、長方形の頂点メッシュの寸法にサイズ変更され、FBO のカラー アタッチメントの 1 つにバインドされます。したがって、FBO サイズはテクスチャ サイズから継承されます。

ビューポートは、長方形メッシュのサイズと同じ寸法になるように設定されています。

これで、ビューポートとテクスチャの両方が同じサイズになりました。

... テクスチャ座標は 0.0、0.0 から 1.0、1.0 まで変化するため、出力頂点の位置は vec3(0.0, 0.0, 0.0) から vec3(1.0, 1.0, 0.0) の範囲である必要があります。

奇妙なのは、フラグメント シェーダーからの出力頂点位置の x 値と y 値がゼロ以外から始まり、それらの最大値が 1.0 未満であることです。2 x 2 メッシュの場合: 左下: vec3( 0.25, 0.25, 0.0 ) ( 0.5 / mesh_side = 0.5 / 2 = 0.25 ) 右上: vec3( 0.75, 0.75, 0.0 )

16 x 16 メッシュの場合: 左下: vec3( 0.03125, 0.03125 , 0.0 ) ( 0.5 / mesh_side = 0.5 / 16 = 0.03125 ) 右上: vec3( 0.96875, 0.96875, 0.0 )

頂点シェーダーの位置を vec3(-1.0, -1.0, 0.0) から vec3(1.0, 1.0, 0.0) に設定すると、ビューポート全体に「描画」していることになります。頂点シェーダーの位置を変更すると、フラグメント シェーダーからの出力値が異なります。

上記のコードの何が問題で、描画が 0.5 / rect_mesh_side_length から始まるのはなぜですか?

最初に投稿された質問は次のとおりです。

助言がありますか?

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

opengl-es - egl pbuffer オフスクリーン レンダリングはバックグラウンドのみを読み取ることができます

pbuffer サーフェスで egl オフスクリーン レンダリングを実現したいと考えています。しかし、読み返すことができるのは背景色だけです。私が描いたものは見えません。

たとえば、画面を青でクリアすると、glReadPixel を介して読み取られた画像は青色の画像だけで、他には何もありません。

本当にアイデアが尽きた

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

video - クロム埋め込み mp4 リクエストがキャンセルされました

アプリケーションで Web ページを表示するために、オフスクリーン モードで CEF を使用しています。これまでに試したすべてのサイトと機能は、ビデオを試すまで問題なく機能していました。Youtube や他のサイトは正常に動作しますが、MP4 を自動再生する小さなページを作成しましたが、動作しませんでした。

HTML をローカル ディスクに保存し、その横に Some.mp4 を配置しました。Chrome でファイルを開くと、正常に動作し、ビデオが再生されます。

ただし、CEF を介してアプリケーションでページを開いても何も起こりません。ビデオのフレームだけを取得します。devtools の問題を詳しく調べると、mp4 ファイルのリクエストがキャンセルされていることがわかりました。

任意の助けをいただければ幸いです。

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

.net - Awesomium 1.7.5 webView.ExecuteJavascript が機能しない

Offscreenブラウザを使用しました。次に、htmlを作成しwebView、サブスクライブしてロードしました。DocumentReady

私の方法DocumentReady

私のHTML:

そして、このJavaScriptは機能しませんでした。私は何を間違えましたか?jsがhtmlにある場合にのみjsを実行することができました。Awesomium 1.7.5 を使用しました。
お願い助けて :(

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

opengl - 現在の実装でサポートされている正しい色やステンシル レンダリング可能な内部形式を取得するにはどうすればよいですか?

OpenGL FBO を使用してオフスクリーン レンダリングを行う。FBO を作成するためのメイン コード フラグメントを以下に示します。

上記のコードは、一部のグラフィック ハードウェアでは機能しますが、他のハードウェアでは機能しません。また、glCheckFramebufferStatus() で報告されるエラーは GL_FRAMEBUFFER_UNSUPPORTED です。これは、色またはステンシル形式の内部形式がレンダリングできないことを意味します。

コードが実行されるグラフィック ハードウェアでサポートされている正しい色またはステンシル レンダリング可能な内部形式を取得するにはどうすればよいですか? または、異なる OpenGL バージョンやハードウェア実装間でコードを移植可能にするにはどうすればよいですか?

私の研究:

  • glGetInternalformat() は、OpenGL 4.1 以降でのみサポートされています。古い OpenGL バージョンでこの関数の同じ機能を取得できる場合は?
  • これは、GL_STENCIL_INDEX8 が唯一のステンシル レンダリング可能な形式であると言っていますが、それは正しいですか? 私のコードでは機能しません。
  • このドキュメントは、サポートされているすべての形式の列挙型を示しています。内部フォーマットと基本フォーマットの違いは何ですか。