問題タブ [zbuffer]
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.
matlab - MATLAB: Z バッファー配列の値を保存できますか?
私はMATLABが初めてで、誰かがこの(おそらく基本的な)質問を手伝ってくれるかどうか疑問に思っています:
3D surf() の各画面ピクセル (z バッファ) の深度値を、理想的にはファイルに表示/保存したいと思います。Using OpenGL in Matlab to get depth bufferは役に立ちましたが、画像として出力するだけでなく、バッファ値を保存する方法がわかりません。
これについての助けをいただければ幸いです。
java - 3D 空間で三角形の面をレンダリングするときの深さ/z のチェック
私の質問は次のように単純化できます: 3D 三角形が投影され、2D ビュー プレーンにレンダリングされる場合、レンダリングされる各ピクセルの z 値を計算してバッファに格納するにはどうすればよいですか?
私は現在、3D 三角形を 2D ビューに単色としてレンダリングできる動作中の Java プログラムを持っています。カメラは問題なく移動、回転などを行うことができます。 2 つの三角形を重ねてレンダリングしようとすると、カメラに近い方の三角形が遠い方の三角形を覆い隠すことが予想されますが、常にそうとは限りません。AZ バッファーは、この問題を解決する方法として最良のアイデアのようです。画面にレンダリングする各ピクセルの z 値を保存し、同じ座標にレンダリングしようとしている別のピクセルがある場合は、それを z 値と比較します。どのピクセルをレンダリングするかを決定するときの現在のピクセルの。私が今直面している問題は次のとおりです。
レンダリングする各ピクセルの z 値を決定するにはどうすればよいですか? 考えてみましたが、いくつか可能性がありそうです。1 つのオプションは、面が存在する平面 (ax + by + cz + d = 0) の方程式を見つけてから、レンダリングされる三角形の各ピクセルのある種の補間を行うことです (たとえば、2D レンダリングされた三角形の x 方向の途中) -> 3D 三角形の x 方向の途中で、y についても同じです。次に、平面の方程式を使用して z について解きます)。ただし、これが機能するかどうかはわかりません。私が考えたもう1つのオプションは、3D三角形の特定の量子で各ポイントを反復し、そのポイントのzを使用して各ポイントを個別にレンダリングすることです(おそらく平面の方程式からも見つける必要があります)。
繰り返しますが、現在主に補間の使用を検討しているため、疑似コードは次のようになります(平面の方程式が「ax + by + cz + d = 0」の場合):
はレンダリングpixel.x
されるピクセルの x 値であり、2dtraingle.minX
は2D ビューに投影された後2dtriangle.maxX
にレンダリングされる三角形 (つまり、そのバウンディング ボックス) の最小および最大の x 値であり、その最小/最大 Y 変数は同じです、ただしその Y については、は 2 次元ビューに投影される前の 3 次元三角形の最小および最大 x 値、 は 3 次元三角形が存在する平面の方程式の係数、 は対応する の z 値です。レンダリングされるピクセル。3dtriangle.minX
3dtriangle.maxX
a, b, c, and d
z
その方法はうまくいきますか?あいまいな点がある場合は、質問を閉じる前にコメントでお知らせください。ありがとうございました。
c++ - オクルージョンを実現するための深度センサーから OpenGL の z バッファへのデータ
深度センサー (kinect や Realsense RGB-D Dev kit など) からのデータを使用して、拡張現実アプリのオクルージョンについて詳しく知りたいです。
レンダリングされたオブジェクトのzバッファ値をセンサーからの深度マップ値と比較し、何らかの方法で値をマスクして、ユーザーに近いピクセルのみが表示されるようにする必要があることを読みました.これを行う、または理解するのに役立つリソースまたはオープンソースコードはありますか?
さらに、手 (ブロブとして検出) が常に仮想オブジェクトを遮るようにしたいのですが、これを行うためのより簡単なオプションはありませんか?
c++ - OpenGL の z-buffer の値を変更する
深さの値を持つ行列を openGL の z バッファに渡したいです。どこかで使用できることがわかりましたglDrawPixels(640,480,GL_DEPTH_COMPONENT,GL_FLOAT,normalizedMappedDepthMat.ptr());
ここで、mat は opencv Mat です。テクスチャ バインディングを使用して OpenGL の z バッファ値を変更することは可能ですか?もしそうなら、どのように?
three.js - three.jsでrenderOrderを使用する
シーン内に 2 つのオブジェクトが重なっている必要がありますが、どちらのオブジェクトを最初に描画するかを定義したいと考えています。ここにコードのサンプルがあります: http://jsfiddle.net/sg02e5sm/1/
2 番目のオブジェクトを使用renderOrder = 1
して、(Z 値が同じである限り) 常に最初のオブジェクトの上に表示されるようにしていますが、機能していません。
three.js - THREE.JS: 遠くにある大きなオブジェクトを正しい z インデックスでレンダリングし、小さなオブジェクトにズームインする
地球、月、およびいくつかの宇宙船を (拡大縮小して) 描いているシーンがあります。月が地球に遮られても、消えるのではなく、(地球を通して) まだ見えます。
私の調査から、問題の一部は、リンクされた記事に詳述されているように、私のカメラの近くの設定が小さすぎることにあることがわかりました。
ここでの複雑さは、カメラがズームインされたときに宇宙船 (地球と比較して最大で 61 メートルの半径を持つオブジェクトで、重さがr =~ 6.5e+06 meters
. 月と地球の縮尺でオブジェクトを正しい順序でレンダリングするには、少なくとも 100,000 m 近くある必要があり、その時点では近くのオブジェクトを見ることができません。
1 つの解決策は、縮尺を縮小してキロメートルを使用することですが、その精度を失うわけにはいかず、メートルを使用することを好みます。
小さなオブジェクトにズームするスケールと機能を維持しながら、非常に大きくて遠くのオブジェクトを正しい z インデックスでレンダリングする方法についてのアイデアはありますか?
私のアイデア(実装方法がわからない):
- Z バッファを変更して、より多くの値とより高い解像度を含めますか?
- クローズアップカメラで使用されるのと同じコントロールによって制御される「farCamera」を使用してレンダリングされる「farScene」に遠くのオブジェクトを追加しますか?
three.js - three.jsだけでzbufferに書き込む方法
thee.js を使用して zbuffer のみを更新しようとしています (preserveDrawingBuffer を使用してトレース効果を作成しています)。ただし、標準のマテリアルを使用して zbuffer にのみ書き込む方法が見つかりません。これまでのところ、試しました:
- マテリアル
visible
を false に設定すると、オブジェクトのレンダリングが停止します。 - マテリアル
opacity
を 0.0 に設定すると、何もレンダリングされません。
これを行う「標準的な」方法はありますか、それともカスタム フラグメント シェーダーを使用する必要がありますか?
c# - 常に他のオブジェクトの上にレンダリングされるボリューム レイ マーチング
長い間悩まされてきた本当に大きな問題があり、解決策が見つからないようです。私はこのプロジェクトをダウンロードしましたhttps://github.com/brianasu/unity-ray-marching/tree/volumetric-textures (Unitypackage と私のプロジェクトはこちらhttps://dl.dropboxusercontent.com/u/27758186/ApplicationVolume.unitypackage ) 、それはボリューム レンダリングに関するものです。
問題は、ご覧のとおり、ボリュームが常に他のすべての前にレンダリングされることです (ボリュームのある立方体の前に立方体を配置してみてください)。私は多くのことを試しましたが、どれもうまくいかないようです。
使用しているシェーダーの問題かもしれないと思います。メインの Camera では、RayMarching スクリプトがアタッチされています。これには OnRenderImage メソッドが含まれており、新しい Camera を作成し (ただし無効になっています)、ボリュームをレンダリングします。それがシェーダーの問題なのか、それともカメラの問題のようなものなのかはわかりません(交換されたシェーダーでレンダリングしています)。テスト用に現在のプロジェクトを添付して、git からダウンロードする必要がないようにします。ボリューム (頭) が、実際に後ろにある場合は長方形の後ろに表示され (見えない)、きれいな場合は前に表示されるようにします。標準のジオメトリによく似ていますが、常に一番上に表示されます...
どんな助けや提案も大歓迎です。私は何かがうまくいくので必死です.それはかなり簡単な問題だと確信しています.
レイ マーチングのシェーダーのコードは次のとおりです。他のオブジェクトによってカバーされているフラグメントを表示しないように、ある種の ZTesting を行う必要がありますか?
opengl - cudaへのOpenGL深度バッファ
私は Opengl の新しいプログラマーです。私の目的は、深度バッファーを FBO に取得して、glReadpixels を使用せずに cuda に転送できるようにすることです。
これが私がすでに行ったことです:
このコードは、正しい深度値で FBO を作成します。
記事「cuda で不規則な z-buffer を使用した高速トライアングル ラスタライゼーション」によると、現在、新しい問題が発生しています。Cuda から FBO に接続されている深度バッファにアクセスすることはできません。
記事からの引用は次のとおりです。
深度値に対応するために、FBO の深度アタッチメント ポイントにテクスチャまたはレンダー バッファーをアタッチできます。ただし、テストした限りでは、CUDA カーネルからアクセスすることはできません。[...] FBO のカラー アタッチメント ポイントを使用することができました。どうやらこの場合、単純なシェーダー プログラムを作成して、深度値をフレーム バッファーのカラー チャネルにダンプする必要があります。GLSL 仕様 [KBR06] によると、特殊変数 gl_FragCoord
声明はまだ真実ですか?深度バッファをカラー チャンネルにダンプするようにアドバイスしてください。テクスチャに?