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

0 投票する
10 に答える
11735 参照

c++ - C++ で非常に大きな 2 次元配列を回避する方法

サイズ 800x800 の 2D int 配列を作成する必要があります。しかし、そうするとスタック オーバーフローが発生します (ははは)。

私は C++ が初めてなので、ベクトルのベクトルのようなことをする必要がありますか? そして、2次元配列をクラスにカプセル化するだけですか?

具体的には、この配列はグラフィックス プログラムの zbuffer です。画面上のすべてのピクセルの z 値を保存する必要があります (したがって、800x800 の大きなサイズになります)。

ありがとう!

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

flash - Flash CS4 3D スプライトの回転 Z オーダーの問題

これはフラッシュの問題ではなく、数学の問題だと思います。簡単に言えば、共通の中心点を中心に回転する 2 つの立方体があります。ここまでは順調ですね。appendTranslation および appendRotation マトリックス関数を使用して、2 つの立方体を正常に回転させることができました。

問題は、描画順序が Z バッファリングにほとんど影響を与えないように見えることです。Z Buffer を正しく実行し、立方体を深さの順に並べることができました。ただし、描画順序を正しく設定しても、cueb が適切にオクルージョンされるのは半分の時間だけです。

X 軸平面上に 2 つの立方体があり、両側が等間隔で Y 軸を中心に回転しているとします。90 度で一方の立方体がもう一方の立方体を遮り、270 度でその逆になります。私の問題は、これがこれらの場所の 1 つでのみ正しく発生することです。逆方向 (つまり -90 度と -270 度) に回転すると、反対の場所でのみ同じ効果があるため、符号の問題のようです。

関連するコードは次のとおりです。

PixelCubeGroup.as - Rotate は各サイクルで呼び出されます

PixelCube.as 描画および回転されるもの

翻訳行に絞り込むことができました。平行移動なしで 2 つの立方体の回転を実行すると、正常に機能し、描画順序が尊重されますが、これはそうではありません。どこかに不正な Z 値が侵入していると思われます。

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

c++ - パースペクティブ正しいテクスチャマッピング。z距離の計算が間違っている可能性があります

私はソフトウェアラスタライザーを作成していますが、ちょっとした問題に遭遇しました。パースペクティブが正しいテクスチャマッピングを機能させることができないようです。

私のアルゴリズムは、最初に座標を並べ替えてプロットすることyです。これにより、最高点、最低点、および中心点が返されます。次に、デルタを使用してスキャンラインを横断します。

order[0]->y次に、からをレンダリングし、とをデルタorder[2]->yで増やします。上部をレンダリングする場合、デルタはとです。下部をレンダリングする場合、デルタはとです。次に、スキャンライン上のx_startとx_endの間を線形補間します。UV座標は同じ方法で補間され、yの順に、開始と終了から始まり、各ステップにデルタが適用されます。x_startx_endx_delta[0]x_delta[1]x_delta[0]x_delta[2]

これは、遠近法で正しいUVマッピングを実行しようとする場合を除いて正常に機能します。基本的なアルゴリズムは、各頂点に対してUV/zとを取り、それらの間を補間することです。1/zピクセルごとに、UV座標はになりUV_current * z_currentます。ただし、これは結果です。

代替テキスト

逆の部分は、デルタが反転する場所を示します。ご覧のとおり、2つの三角形は両方とも地平線の異なるポイントに向かっているように見えます。

空間内のある点でZを計算するために使用するものは次のとおりです。

私は正しいですか、それはazバッファの問題ですか?

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

directx - 法線データのない三角形メッシュに対して、背面カリングがオフ、Z バッファリングがオン、グーロー シェーディングが機能するように、DirectX 9 を設定するにはどうすればよいですか?

頂点レベルのグーロー シェーディングと az バッファーの使用の両方が存在する可能性があるため、PresentParameters と DirectX デバイスの正しいパラメーターを特定するのに苦労しています。正常に機能する三角形メッシュもあれば、カメラに近い三角形の前に背景三角形が表示されるものもあります。

この例は、http: //gallery.me.com/robert.perkins/100045/zBufferGoneにあります。入力データは、ファセット内の頂点の単純なリストです。各ファセットの頂点のワインディング順序は非決定論的であり (さまざまな CAD ソフトウェアのエクスポート機能に由来します)、法線データはありません。

現在、PresentParameters は次のように設定されています。これは C++ ではなく C# であることは認識していますが、十分に説明的であり、パラメーターは C++ コードに渡されます。これにより、図のイメージが生成されます。動作はリファレンス デバイスでも同じです。

他のすべてのセットアップ試行は、参照デバイスであっても、COM エラー コード ({"D3DERR_INVALIDCALL: 無効な呼び出し (-2005530516)"}) を返します。正しい設定パラメータは何ですか?

編集: DirectX9 とやり取りする C++ クラスは、次のようにデフォルトを設定します。

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

directx - DirectX 9 で zbuffer を正しく動作させるにはどうすればよいですか?

シェーディングがオンになっている単純な立方体ジオメトリを正しく表示することに失敗しました。

これは C# コードですが、値は SlimDX を介して直接 C++ コードに渡されます。

... は、Direct3D9Device オブジェクトを設定するために使用される PresentParameter 構造体の値です。

レンダリング中、SetRenderState は次のように呼び出されます。

繰り返しますが、これは C++ コードに渡され、C++ プログラマーが恐れることのない呼び出しに値をマーシャリングします。

プリミティブは拡散色の頂点です (D3DFVF_XYZ | D3DFVF_DIFFUSE)。ワイヤーフレーム ビューは次のように なります。

近い側にある大きな三角形のペアは、立方体の近い側の面です。

塗りつぶされたビューは次のようになります: フル ビュー 1 http://gallery.me.com/robert.perkins/100045/Z-fighting/web.jpg

または、これ以降のレンダリング コール: フル ビュー 2 http://gallery.me.com/robert.perkins/100045/zfight2/web.jpg

これを修正する方法がわかりません。どこから探し始めればよいですか?

編集: カメラ射影行列は、フレームの 1 つについて次のようになります。

そして、ビュー マトリックスは次のようになります。

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

c# - ビューと投影行列を切り替えた後、DirectX メッシュが正しく表示されない

私のプログラムでは、メッシュは正しく表示されていましたが、device.transform.view と device.transform.projection マトリックスを左手系から右手系に変更すると、メッシュが正しく表示されなくなりました。顔が照らされており、前面が透明です! 適切な表示を行うためにさらに何を変更する必要があるか、誰にもわかりますか

元の行列:

変形:

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

c++ - DirectX 深度バッファリングが機能しない

何らかの奇妙な理由で、深度バッファが機能していません。つまり、後で描画された三角形は、位置に関係なく常に重なっています。

これらのプレゼンターパラメーターがあります

およびこれらのレンダリング ステート:

編集:返信ありがとうございます。これはレンダリング コード コードです。

Model::Draw()コードは次のとおりです。

wherevertexBufferおよびindexBufferwith のカウントは、クラスの属性です。

ここにいくつかのスクリーンショットがあります (FU、スパム保護):

1)http://img822.imageshack.us/img822/1705/dx2010080913182262.jpgこんな状況です

2)http://img691.imageshack.us/img691/7358/dx2010080913183790.jpgこれは立方体が前面にあるときの (正しい) ビューです (立方体は後で描画されます)

3)http://img340.imageshack.us/img340/4720/dx2010080913184509.jpgしかし、角錐台を前にすると、立方体はまだ重なっています。

自分でカメラを動かした方が見やすい…

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

opengl - OpenGLを使用したZバッファの実装

プロジェクトの場合、独自のZバッファを実装したいと思います。私はアルゴリズムとこれを実装する方法を知っています。OpenGLを使用することを計画していたグラフィックエンジン全体を書きたくないので、問題は、自分のアルゴリズムをopenGLとどのように組み合わせることができるかということです。

自分ですべてを計算してから、ピクセルごとのデータをGLDrawPixels()に渡すことができるとどこかで読んだのですが、それは少しやり過ぎのようです。ポイントは、三角測量アルゴリズムなどを実装したくないということです。

私の目標は、ワイヤーフレームまでopenGLを使用し、次に独自のz-bufferアルゴリズムを使用してから、もう一度openGLを使用して最終的な画像を描画することです。(私のプロジェクトでは、光と影を含め、重要なのはzバッファだけです)。これを行う方法はありますか、それともすべてを自分で実装して、openGLに最終結果を描画させる必要がありますか?

心から

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

java - Java 3D シーンで隠されていないヘルス バーを描画する

だから私はJava 3Dでゲームに取り組んでいて、ユニットの上に浮かぶヘルスバーを実装しています。

まず、ユニットの位置の上の 3D ポイントにクワッドを描画し、ビルボード ビヘイビアーを適用して常にカメラの方を向くようにしました。

しかし、私が立ち往生している問題は、ヘルスバーが他の風景によって時々隠されることです.

そのため、次のオプションを検討しています。

  1. ヘルス バー ピクセルの Z / 深度バッファー値をオーバーライドして、レンダラーが後でレンダリングするものよりもカメラに近いと判断するようにします。

    やってみrenderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)ました。レンダラーは、以前に同じ領域に描画したものの上にヘルス バーを描画しますが、後で他の風景がヘルス バーの上に描画されると役に立ちません。

    Java 3D でこれを行うためのより良い方法はありますか?

  2. ヘルスバーの 3D 位置をカメラの前の 2D 平面に投影します。実行可能に思えますが、これに必要なすべての計算を再発明する前に、誰かが既存の解決策を指摘できるかもしれません。

  3. Java 3D から LWJGL や jMonkeyEngine などへの切り替え (この問題だけでなく、Java 3D が機能しないという一般的な不満など)。この特定の問題に対してより柔軟であるかどうかはわかりませんが。私が読んだことによると、ゲーム開発における最悪の間違いの 1 つは、開発の途中でエンジンを切り替えることです。