問題タブ [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 に答える
2511 参照

opengl - OpenGL render-to-texture-via-FBO -- 正しくない表示と通常のテクスチャ

テクスチャにバインドされたオフスクリーン フレーム バッファ オブジェクトへのオフスクリーン レンダリングは非常に簡単なはずですが、頭が回らない問題が発生しています。

私の完全なサンプル プログラム (今のところ 2D のみ!) は次のとおりです。

http://pastebin.com/hSvXzhJT

いくつかの説明については、以下を参照してください。

rgba テクスチャ オブジェクト 512x512 を作成し、FBO にバインドします。この時点では深度やその他のレンダー バッファーは必要なく、厳密には 2D です。

次の非常に単純なシェーダーがこのテクスチャにレンダリングされます。

頂点シェーダー:

aPos では、クワッドの 4 つの xy 座標 (-1、-1 :: 1、-1 :: 1、1 :: -1、1) を含む VBO を取得します。

したがって、フレームバッファの解像度は理論的には 512x512 である必要がありますが、シェーダーはその「テクスチャ」を「フル (オフ) スクリーン クワッド」にレンダリングし、GLs -1..1 座標パラダイムに従います。

フラグメント シェーダー:

そのため、0 から 1 の間の x/y に応じて、赤が 0.25 に固定され、緑/青で完全に不透明な色が設定されます。

この時点で、512x512 のテクスチャがレンダリングされ、-1..1 フル (オフ) スクリーン クワッドのみが表示され、0..1 から緑/青のフラグメント シェーディングが行われると仮定しています。

これが私のオフスクリーン設定です。画面上には、4 つの xyz 座標 { -1, -1, 1 ::: 1, -1, 1 ::: 1, 1, 1 ::: -1, 1, 1}。繰り返しますが、今のところこれは 2D なので行列はなく、z は常に 1 です。

このクワッドは別のシェーダーによって描画され、テキスト GL-101 スタイルの特定のテクスチャを単純にレンダリングします。上にリンクされている私のサンプル プログラムでは、単純なブール値のトグル doRtt があります。これが false (デフォルト) の場合、render-to-texture はまったく実行されず、このシェーダーは単に現在のディレクトリの texture.jpg を使用していることを示しています。

この doRtt=false モードは、画面上の 2 番目のクアッド レンダラーが現在の要件に対して「正しい」ことを示しており、必要に応じてテクスチャリングを実行します。それ以外の場合は、テクスチャ フィルタリングやミップマッピングなしでスケーリングします。

したがって、ウィンドウ (およびビュー ポート) のサイズがどのように変更されても、単一のテクスチャが水平方向に 2 回、垂直方向に 2 回繰り返されるフルスクリーン クワッドが常に表示されます。

ここで、doRtt=true を使用すると、2 番目のシェーダーは引き続き機能しますが、テクスチャが完全に正しくスケーリングまたは描画されることはありません。残念ながら、「ねえ、この FBO をディスクに保存してデバッグ目的」。

RTT シェーダーは一部のレンダリングを実行します (または完全なレンダリングで、画面外で何が起こっているのかわかりません...)。非常に単純な RTT フラグメント シェーダーから期待されるすべての色が実際に表示されるわけではありません。

(A) いずれか: 512x512 テクスチャは正しく作成されていますが、私のコードでは正しくマッピングされていません (しかし、doRtt=false を使用すると、まったく同じ単純な textured-quad-shader を使用して特定の texture.jpg ファイルが正常に表示されるのはなぜですか?)

(B) または: 512x512 のテクスチャが正しくレンダリングされず、ウィンドウの解像度に応じて rtt フラグ シェーダが出力を変更しますが、なぜでしょうか? オフスクリーン クワッドは常に x と y に対して -1..1 であり、頂点シェーダーは常にこれをフラグメント座標 0..1 にマップし、RTT テクスチャはこの簡単なテストのために常に 512x512 のままです!

オフスクリーンのクワッドとオンスクリーンのクワッドの両方が座標を変更することはなく、常に「フルスクリーン」(両方の次元で -1..1) であることに注意してください。

繰り返しますが、これは非常に単純なはずです。一体何が欠けているのですか?

仕様: OpenGL 4.2 (ただし、コードには明らかに 4.2 の機能は必要ありません!)、Nvidia Quadro 5010M、openSuse 12.1 64 ビット、Golang Weekly 2012 年 2 月 22 日。

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

android - AndroidCanvasのオフスクリーン描画パフォーマンス

Canvaselementを使用してAndroidゲームを開発しています。大きなゲームマップに多くのグラフィック要素(スプライト)を描画しています。これらの要素は、、などの標準的なグラフィック関数によって描画さdrawLineれますdrawPathdrawArc

それらが画面に表示されているかどうかをテストするのは難しくありません。したがって、それらが画面の外にある場合、私はそれらの描画ルーチンを完全にスキップする可能性があります。しかし、これでもCPUコストがかかります。私Android Graphics Libraryよりも早くこれを行うことができるのだろうか?

要するに、画面座標から完全に外れていても、すべてを描画しようとするとAndroid Graphics Library、それらを処理し、CPUをあまり使用せずに描画できると信じているのか、描画領域の長方形を自分でチェックして、完全に外れているのかを確認する必要があります。画面、描画ルーチンをスキップしますか?どちらが適切な方法ですか?どちらが速いと思われますか?

ps:Androidv2.1以降をターゲットにしています。

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

java - 「目に見えない」グラフィックを作成する

グラフィックス クラスからオフスクリーン イメージを生成し、それらを画面に表示する設定をせずにバイナリ データに変換するには、あなたの助けが必要です。大量のラベルを作成し、バイナリ データとしてプリンターに送りたい。画像を作成し、画面に表示してから送信すると、すべて問題ありませんが、1 分間に 100 個のラベルを生成し、Java アプリケーションの画面でちらつくと面倒です。目に見える影響なしに、別のスレッドで生成したい。
私がそれらを表示しない場合、ラベルは黒で送信されます。それらを生成して画面外に表示しようとしましたが、それは私の期待と一致しませんでした。Graphics2d から「見えない」画像を生成する方法はありますか?? または私に提案できる別の方法はありますか?

よろしくお願いします

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

android - アクティビティ ウィンドウを表示する前にレイアウトを完成させる

次のシナリオがあります: アクティビティ A で、ユーザーがボタンをクリックすると、アプリはサーバーにリクエストを送信して情報を取得し、この情報はアクティビティ B を開始するインテントに配置されます。

アクティビティ B のonCreateメソッドでsetContentView(R.layout.activity_b)(このレイアウトは非常に複雑なので、XML からインフレートするのにも時間がかかります)、一連の初期化を行います。最後にonStart、コンポーネントの最終的な準備/配置を行います。

アクティビティ A では、ユーザーがボタンを押すとAsyncTask、サーバーから情報を取得してアクティビティ B を開始する を開始し、必要な情報をインテントに渡します。「startActivity」を呼び出すと、アクティビティ B のウィンドウがすぐに所定の位置にスライドしますが、初期化が完了するまでに数秒かかる場合があります。この数秒間、黒い画面が表示されます。そして、最後にonStartが実行され、すべてが続行されます。

私がやりたいことは、アクティビティ B が表示される前に、このすべての初期化を画面外で完了して、「到着」したときにすべてのレイアウトが既に存在するようにすることです。これを達成する方法はありますか?

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

objective-c - glReadPixels は「フレーム外」領域を読み取ります

OpenGL 3200x2000 サイズのテクスチャ付きクワッドを描画します。OpenGLView のフレーム サイズは 940x560 に設定されています。必要に応じてクワッドを描画します。(glReadPixelsを使用して)画像として保存しようとすると、パンし、glReadPixelsエリアを(0,0)から(3200,2000)に設定します。ピクセル データ 3200x2000 を作成しますが、ファイルに保存すると小さな画像部分 (左下隅から 940x560) が表示され、他の領域全体が黒くなります。では、どうすればオフスクリーンエリアを読むことができますか? Framebufferを使ってみたのですが、非常に複雑で、作成中にエラーが発生したりなど...他に解決策はありますか?


状況の視覚化:

元の画像は次のようになります (3200x2000): ここに画像の説明を入力

OpenGLView は次のようになります (940x560): ここに画像の説明を入力

保存された画像は次のようになります (3200x2000): ここに画像の説明を入力

0 投票する
5 に答える
62435 参照

c++ - OpenGLでオフスクリーンにレンダリングする方法は?

私の目的は、ウィンドウなしでOpenGLシーンを直接ファイルにレンダリングすることです。シーンが私の画面解像度よりも大きい場合があります。

これどうやってするの?

可能であれば、レンダリング領域のサイズを任意のサイズ、たとえば10000x10000に選択できるようにしたいですか?

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

android - 複雑なレイアウト ツリーでビューをオフスクリーンに設定するには?

タブレット アプリのレイアウトの次の構造を指定しました。

最初の LinearLayout には、左側にフラグメントのみが含まれており、移動できません。2 番目の LinearLayout には、最初の位置に非表示の要素があります。これは、他の 2 つの R.Layouts を左にスワイプすると減少し、後ろにスワイプすると増加します。中央の RelativeLayout は常に幅を維持し、最初の LinearLayout で 2 番目と 3 番目をスワイプできます。実際には、2 番目と 3 番目の R.Layout は同じ幅にする必要がありますが、3 番目のレイアウトは画面の境界で 26% しか表示されないはずです。

私が今やりたいことは、3 番目の R.Layout が最初 (アプリの開始直後) から 2 番目のレイアウトと同じ幅を持ち、彼の位置が半分オフスクリーンになっていることです。私がやろうとしたことは、3 つすべての R.Layouts の合計から幅を持つレイアウトを作成し、その中にレイアウトを配置することですが、うまくいきませんでした。最初の LinearLayout の要素しか表示されません。上記のコードで weight 属性をどのように使用すると、3 番目の R.Lay がストレッチされ、それがまさに私が回避しようとしている動作です。そして、Margin_right を負の値に設定すると、何も起こりません。

どんな考えやアイデアにも感謝します。ありがとうございました!

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

c++ - ウィンドウなしで OpenGL コンテキストを作成する

オフスクリーン レンダリング用のウィンドウレス OpenGL プログラムを作成する最も簡単な方法を見つけようとしています。

現在、私はこれを使用していますが、これまでのところ正常に動作しています: (わかりやすくするために、ここではエラーチェックを削除しました)

これは安全に使用できますか? ウィンドウなしの OpenGL プログラムを作成する「標準的な」方法は何ですか?

編集:オフスクリーン レンダリングに FBO を使用しています。

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

opengl-es-2.0 - FBOレンダリング用のOpenGLES2.0オフスクリーンコンテキスト

FBOを使用して(WSのないコンソール環境で)オフスクリーンレンダリングを実行したいと思います。OpenGLコンテキストを作成する必要があり、少なくとも操作にはダミーウィンドウを作成する必要があることを知っているので、次の初期化を行いました。

このタイプの初期化はターゲットシステムで機能しますが、FBOに何かを描画し、それを読み戻した後(getReadPixels)、常に黒い画像しか取得しません。X11の上で同じコードを試しましたが、eglCreateWindowSurface呼び出しで(すでに)エラーで失敗します:EGL_BAD_NATIVE_WINDOWは機能しますが、この呼び出しに実際のX11windowネイティブウィンドウハンドラーを渡すと機能します(この場合、有効なレンダリング画像を読み戻すことができます)また)

FBOレンダリングに使用する必要があるサーフェスのタイプについて明確にしてください。または私は何を間違えますか?

残りの描画コード://initおよびstartopengl es shanders Shaders_Init();

前もって感謝します!!!!!よろしく、ゲザ

0 投票する
0 に答える
356 参照

ios - Quartz2D で画面外に描画し、その結果を iOS で OpenGL ES テクスチャとして使用する

私が読んだドキュメントによると、CGLayer を使用したオフスクリーン描画は、GPU と VRAM によって描画を保存/管理できるため、Quartz 2D 描画を行うための最高のパフォーマンスの方法です。

描画が終了したら、CGLayer からピクセル バッファを取得し、それを OpenGL テクスチャとして使用したいと考えています。

ピクセル バッファを使用してテクスチャを作成する方法を知っています。

CGBitmapContext へのオフスクリーン レンダリング、ピクセルの取得、それらのピクセルを使用したテクスチャの作成の例を見てきました。

Quartz 2D プログラミング ガイドでは、CGBitmapContext への描画は遅く、ソフトウェアで行われる (GPU の関与なし) ことを示唆しているため、そのパスを避けています。

それで、高速描画するには、その CGLayer で描画する必要があると彼らは言います。glTexImage2D() に送信できるメモリ バッファにピクセルを戻すにはどうすればよいですか?

どうもありがとう !