問題タブ [orthographic]

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

android - スプライトが画面の左から右にスポーンしているように見えますか?

したがって、私の問題は、スプライトが画面の左側から画面の右側に生成されているように見えることです (アプリのテストに samsung s3 を使用しています)。それらは画面の上部から降りてくるはずです。私は Libgdx を使用しており、左下から 0 が始まることを知っています。

これが私のコードで、どこから始めるべきかを設定します..

これが私のMainGameクラスです...(上半分)

これが私のオルソカメラのセットアップです(上半分)

ここに私の完全な OrthoCamera クラスがあります

そして、私の完全な VirtualViewport クラス

これは私の敵クラスです (落下するはずのオブジェクト)

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

2d-games - この視点はどのように呼ばれますか

「Hyper Light Drifter」やその他のゲームには、疑似アイソメトリック パースペクティブがあります。

ここに画像の説明を入力

この視点はどのように呼ばれますか? 調べることができる「ルール」はありますか?

ありがとう。

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

three.js - Three.js 正投影カメラ オーバーラップ オブジェクトが透けて見える

私のシーンでは、正投影カメラと WebGLRenderer ( new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true })) を使用しています。このコードによって 2 つの球体が作成されます。

new THREE.Mesh( new THREE.SphereGeometry(1, 64, 64), new THREE.MeshLambertMaterial({ color: 0xffffff }) )

別のコード スニペットを使用してそれらを互いに離したところ、1 つの軸を除いて同じサイズと同じ位置にあるにもかかわらず、図に示されているように、何らかの理由で互いに透けて見えます。

シーン

なぜこれが当てはまるのか、どうすれば修正できるのか、誰にもわかりませんか?

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

opengl - 正射投影 + 透視投影の相互クリッピング

正投影と透視投影を組み合わせるときに問題が発生します。

3D オブジェクトにテクスチャを描画しています:

ここに画像の説明を入力

クリッピング値と関係があると思います:

誰かがこの問題で私を助けてくれることを願っています。それは大きな問題ではありませんが、私を悩ませています。

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

java - OpenGL の Ortho の同一の頂点間のこれらのピクセル ギャップの原因は何ですか? どうすればそれらを排除できますか?

「隣接する」エッジに等しい (正確に等しい) 座標を渡すにもかかわらず、レンダリングされたタイルのグリッドをスケーリングすると、隣接する要素間に奇妙な線ができてしまいます。

私のタイル グリッド レンダリング アルゴリズムはスケーリングされたタイルを受け入れるので、他の理由の中でもとりわけ、同じ縦横比の選択されたウィンドウ サイズに一致するようにグリッドのビジュアル サイズを調整できます。正確な整数といくつかの非整数値にスケーリングすると正しく動作するように見えますが、他の値については一貫性のない結果が得られます。

いくつかのスクリーンショット:

ブルーのラインは透けて見えるクリアカラーです。未使用のタイルはマゼンタで、実際の透明度はアルファ レイヤーによって処理されるため、選択したテクスチャにはタイルシートに透明なギャップがありません。シート内の隣接するタイルは完全に不透明です。スケーリングは、1f と 2f の間のゲームパッド トリガーによって取得された正規化された値にスケールを設定することで実現されるため、最大/最小を除いて、ショットが撮影されたときに実際に適用されたスケールはわかりません。

属性の更新とエンティティの描画はスレッド間で同期されるため、描画中に値が適用されることはありませんでした。これはスクリーンショットではうまく伝わりませんが、その時点で縮尺が維持されている場合は線がちらつかないため、論理的には、縮尺の割り当て間の描画で問題になることはありません (スレッド ロックによりこれが防止されます)。

1x にスケーリング:

1x

A にスケーリング、1x < Ax < Bx :

斧

B にスケーリング、Ax < Bx < Cx :

Bx

C にスケーリング、Bx < Cx < 2x :

Cx

2倍にスケーリング:

2倍

投写設定機能

正射投影を設定する場合 (画面サイズが変更された場合のみ変更):

スクリーンショットでは、nw は 512、nh は 384 です (int から暗黙的にキャストされます)。これらは、上記の例全体で変わることはありません。

一般的な GL 描画コード

カットしても問題が解決しなかった無関係な属性をカットした後:

グリッド描画コード (「draw」から削除されたものと同じパラメーターを削除):

タイルとプラットフォーム固有のコードの間で、ベクトルのコンポーネントが取得され、以前に貼り付けた一般的な描画コードに渡されます。

私の分析

数学的には、各位置は、x 方向または y 方向、またはその両方の scale*tilesize の正確な倍数であり、グリッドの位置のオフセットに追加されます。次に、オフセットとして描画コードに渡され、glTranslatef を使用してそのオフセットを変換し、寸法を半分にしてその位置を中心にタイルを描画し、各プラスとマイナスのペアを描画します。

これは、タイル 1 が原点で描画されるとき、オフセットが 0 であることを意味します。次に、OpenGL は、左端が -halfwidth、右端が +halfwidth、上端が -halfheight のクワッドを描画するように指示されます。 、および +halfheight の下端。次に、隣接するタイル 2 を 1 幅のオフセットで描画するように指示されているため、0 からその幅に変換し、-halfwidth で左端を描画します。これは、座標的に tile1 の右端とまったく同じである必要があります。それ自体で、これは機能するはずです。等尺で考えるとなんとなく壊れます。

スケールが適用されると、それはすべての幅/高さの値に対して一定の倍数であり、数学的には何も変更されません。ただし、次の 2 つの理由のいずれかが考えられるため、違いはあります。

  • OpenGL はサブピクセルの塗りつぶしに問題があります。つまり、頂点の左側を塗りつぶしても、頂点を含むピクセル空間が塗りつぶされず、同じ頂点の右側を塗りつぶしても、頂点を含むピクセル空間が塗りつぶされません
  • float の精度の問題が発生しています。どこかとX+width/2等しくなく、 tilewidth は整数で、X は float です。X+width - width/2width = tilewidth*scale

どれが問題であるかを判断する方法、またはサポートできるようにしたい整数以外のスケール値を単に回避する以外にそれを修正する方法についてはよくわかりません。解決策を見つけるために適用できると思われる唯一の手がかりは、行のギャップのパターンが実際には一貫していないことです (場合によってはタイルをスキップする方法、垂直または水平のみで両方ではないなど)。ただし、これが何を意味するのかはわかりません。

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

opengl - z 軸の予期しない方向 (ビューなし、射影行列なし)

OpenGL を使用してオブジェクトを描画する方法を理解しようとしています。質問は非常に単純ですが、それでもどこにも明確な答えが見つかりません(または私は完全に愚かです:))。問題を説明しましょう。

1) 画面に 2 つの三角形を配置するだけです。三角形の座標 (x、y、z、w) は次のとおりです。

2) ビューも投影変換も使用していません

3) 各三角形の「デフォルト」の色を頂点属性の 1 つとして渡し、さまざまな属性を使用してフラグメント シェーダーに単純にバイパスします。Triag1 は青、Triag2 は赤

ネット上のすべてのチュートリアルでは、OpenGL は右手系の座標系を使用し、Z 軸は「画面外」を指すと述べています。したがって、オブジェクトのそれぞれの z 座標を考慮すると、小さな赤い三角形とその背後にある大きな青い三角形が表示されると予想されます。どんなにそれが起こっていない。大きな太い青い三角形しか見えません。

三角形のそれぞれの z 座標を交換すると (Triag1 は正の z 座標を取得し、Triag2 は負の z 座標を取得します)、期待どおりの結果が得られます。しかし。これは、どういうわけか、Z 軸が画面の外ではなく、画面の内側を指していることを意味します。

より経験豊富な人が、私が見逃している基本的な側面を説明してもらえますか?

PS GLUT も GLM も、さまざまな OpenGL マトリックスをセットアップするための呼び出しもありません。「頂点を GPU に渡す - シェーダー プログラムを有効にする - ものを描画する」のみ