タグ付けされた質問 「opengl-es2」

OpenGL ES 2.0は、(OpenGL ES 1.1の固定機能パイプラインと比較して)プログラム可能な3Dグラフィックパイプラインを強調しています。

3
GLViewportの混乱
誰かがGLViewportを理解し、サイズを変更するとどうなるかを理解してくれることを願っています これは私の混乱を示します。 だから、ここで私は画面の真ん中にクワッドをスタックしています。GLViewportをデバイスの幅と高さに一致させると、最初の(左側の)画像が表示されます。まさに私が期待するもの。 デバイスの解像度、2560 x 1600 ビューポート解像度2560 x 1600 クワッドサイズ200 x 200(注、上の画像は実物大ではありません!!! :-)) 四角形、正方形として表示 さて、2枚目(右)の写真です... デバイスの解像度、2560 x 1600 ビューポート解像度2560 x 1200(および垂直方向中央) クワッドサイズ(200、200) 四角形、長方形として表示 私の質問は、四角形が四角形ではなく四角形として表示されているのはなぜですか?私のクワッドが200 x 200ピクセルであることをログに記録して確認しました-物理ピクセルのサイズは確かに同じですか?変更することはできません。ここで何が起こっているのでしょうか? 私は(明らかに間違って)ビューポートを拡大縮小したとき、文字通りピクセルを切り落としたと考えました。 これがどのように機能するかを誰かが説明できれば幸いです。 編集する 現在、私はビューポートを次のように設定しています: width = (int) Math.min(deviceWidth, deviceHeight * 1.702127659574468); height = (int) Math.min(deviceHeight, deviceWidth / 1.702127659574468); ratio = width / height; GLES20.glViewport(offsetX, …

2
正投影の解像度に依存しない2Dゲームでサブピクセル値を回避する方法
2Dゲームで動くスプライトの解像度に依存しないレンダリングをしようとしています。私の計画は私の世界の固定座標系(たとえば960x540)で作業し、正投影を使用してビューポートに合わせて拡大または縮小します。レターボックス化して、さまざまなアスペクト比を処理します。 ほとんどのチュートリアルによると、私はビューフラスタムに好きな次元を自由に使用できますが、多くの場合、ビューポートでサブピクセル値を使用することになるという問題につながることがわかりました。たとえば、960 x 540の座標系の(62,62)にある頂点は、寸法800 x 450のビューポートの(51.6666667,51.6666667)に終わります。 私はそれに2種類の問題に気づきました: テクスチャサンプリングは、動いているオブジェクトの場合、頂点がピクセルの中心に関連する場所に応じて常に変化します 丸めが原因で、オブジェクトが水平または垂直に1ピクセルずつ伸びる これを回避するためのベストプラクティスは何ですか(移動速度などに関して解像度の独立性を維持しながら)?そして、これに対処するのに最適な場所はどこですか?頂点をシェーダーに渡す前、または頂点シェーダー内に?
8 opengl  2d  opengl-es2 

1
GL ES:フラグメントシェーダーの最適化
概要: スプライトに色を付けようとするとすぐにFPSの速度が低下します(つまり、テクスチャをフラグメントシェーダーで色と乗算します)。 詳細: ハードウェア:iPod touch 4 glDrawArraysを使用して画面に700のスプライトを描画しています。そして、はい、これらすべてを1回の描画呼び出しでバッチ処理しています。以下は、頂点データ構造を示しています。 struct Vertex { float Position[2]; float Color[4]; float Texture[2]; }; はい、いくつかのスプライトを選択的に着色する必要があるので、他のスプライトを選択的に着色する必要がないため、各頂点で色を送信しています。以下は私が使用しているフラグメントシェーダーです: varying lowp vec2 TexCoord; uniform sampler2D TextureSampler; void main(void) { gl_FragColor = texture2D( TextureSampler, TexCoord ); } 今までそれは素晴らしい仕事をしていて、私に完全な60 FPSを与えています!!! だが フラグメントシェーダーを次のように変更するとすぐに(着色を可能にするため): varying lowp vec4 DestinationColor; varying lowp vec2 TexCoord; uniform sampler2D TextureSampler; …

2
たくさんの木を描くための最良の方法は何ですか
木が植えられたランダムな島をレンダリングするアプリを書いています。木は現在2つのクワッドであり、十字で交差し、テクスチャで描かれています。ヤシの木、オーク、草など、さまざまな種類の植物を形成するより複雑なメッシュを使用する予定です。 私が直面する問題は、テクスチャが透明であるため、後ろから前に描画する必要があるということです。Plan-bは、fragシェーダーで破棄を使用することを呼び出しますが、zオーダーの方がより良い結果を提供します。 uniform float uTreeAlpha; uniform sampler2D uTexture; varying vec2 vTexCoordOut; void main (void) { vec4 colour = texture2D(uTexture, vTexCoordOut); if (colour.a < 0.1) { discard; } gl_FragColor = vec4(colour.rgb, colour.a * uTreeAlpha); } 2番目の問題は、カメラとルックアットによって順序が変わるためです。OpenGLで1回の呼び出しでそれらを描画する効率的な方法がわかりません。 現在、私のレンダリングコードは次の疑似コードのように見えます。 if cameraChangedFromLastTime() then sortTreesBackToFront(); end for i = 0 to trees.size() -1 drawTree() end …

2
深度テストに合格したフラグメントの数を取得する
「モダン」環境では、「NVオクルージョンクエリ」拡張機能により、深度テストに合格したフラグメントの数を取得する方法が提供されます。ただし、OpenGL ESを使用するiPad / iPhoneでは、拡張機能は利用できません。 フラグメントシェーダーで同様の動作を実装するための最もパフォーマンスの高いアプローチは何ですか? 私のアイデアのいくつか: オブジェクトを完全に白でレンダリングし、次に2パスシェーダーを使用してすべての色を一緒にカウントします。最初に垂直線がレンダリングされ、各フラグメントについて、シェーダーは行全体の合計を計算します。次に、フラグメントが最初のパスのすべての部分和を合計した単一の頂点がレンダリングされます。非常に効率的ではないようです。 オブジェクトを黒の背景の上に完全に白でレンダリングします。合理的に小さい解像度になるまで、テクスチャ間のハードウェア線形補間を悪用して、再帰的にダウンサンプリングします。これは、対応する領域内の白いピクセルの数に応じてグレースケールレベルを持つフラグメントにつながります。これでも十分正確ですか? ミップマップを使用して、単純に1x1レベルのピクセルを読み取ります。繰り返しになりますが、精度の問題と、2のべき乗ではないテクスチャを使用しても可能かどうかという問題です。 これらのアプローチの問題は、パイプラインが停止し、パフォーマンスに大きな問題が発生することです。したがって、私の目標を達成するためのよりパフォーマンスの高い方法を探しています。 EXT_OCCLUSION_QUERY_BOOLEAN拡張の使用 Apple はiOS 5.0 for iPad 2でEXT_OCCLUSION_QUERY_BOOLEANを導入しました。 "4.1.6 Occlusion Queries Occlusion queries use query objects to track the number of fragments or samples that pass the depth test. An occlusion query can be started and finished by calling BeginQueryEXT and …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.