問題タブ [opengl-es-2.0]
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.
opengl-es - ジオメトリをglslに送信する最も効率的な方法は何ですか?
私のシーンにはメッシュの木があります。各メッシュには、変換行列、頂点、法線、UVのリスト、および子メッシュのリストが含まれています。
VBOを使用して「構造体の配列」でジオメトリをglslに送信したいのですが、親メッシュの行列変換が発生した場合に各メッシュの行列を更新する方法がわかりません。メッシュツリーをトラバースして、フレームごとにすべての頂点にマトリックスを追加する必要がありますか?フレームごとに頂点を事前に乗算する必要がありますか?行列のリストを均一に保持し、現在の頂点の行列をインデックスで参照する必要がありますか?メッシュごとに1つのglDrawArraysまたはglDrawElementsを使用する必要がありますか?
textures - OpenGL ES 2.0でpng画像を使用してキューブをテクスチャリングする方法は?
OpenGL ES 2.0でどのようにキューブをpng画像でテクスチャリングしますか?また、テクスチャリングにアトラスをどのように使用しますか?
performance - 私の iOS OpenGL ES 2.0 アプリのパフォーマンスは何によって制限されますか?
私は現在Objective-Cを学んでいます。私の最初のプロジェクトとして、OpenGL Es 2.0 のみを使用して iOS 用の小さな 3D アプリを作成することにしました。だから、はい、同時にそれを学んでいます。以前は旧式の OpenGL (シェーダーなし) の基本しか知りませんでしたが、いくつかの基本的な行列とベクトルの計算を行うことができます (そして実際に実装しました)。
多少の進歩はしていますが、パフォーマンスはもはやそれほど素晴らしいものではありません。Instruments でプロファイリングを開始しました (Xcode 3.2; iOS dev プログラムを介して Xcode 4 にアクセスできますが、奇妙な動作のために使用を控えました)、データを完全に理解することはできません:
アプリ (iPhone 3GS、iOS 4.2 で実行) は約 15 fps で実行されますが、デバイス使用率は約40%、レンダラー使用率は約35%、タイラー使用率は10% 未満です。これは何を意味しますか?私はバスに縛られていますか?fps が低下する前に、これら 3 つの統計情報の少なくとも 1 つで使用率が 100% 近くになる必要があると思いました (そうです、アプリは非常に単純なシーンで 60 に達する可能性があります)。
現時点で、アプリが行っているのは、1 ~ 6 のグループに束ねられた法線を持つ 500 個のテクスチャのない立方体を含むシーン グラフをレンダリングすることだけです。
performance - シェーダー/状態の変更を最小限に抑えて WebGL のパフォーマンスを最適化するためのガイドライン
100K の三角形で構成される大きなインテリア シーンをレンダリングするための WebGL の実用性を理解しようとしています。これらの三角形は多くのオブジェクトに分散されており、シーンには多くのマテリアルがあります。一方、可動部分はありません。また、マテリアルはかなり単純で、ほとんどがテクスチャ マップに基づいている傾向があります。多くのテクスチャ マップが共有されています。たとえば、シーン内のすべての椅子が共通のマップを共有します。マルチテクスチャリングもあります - マテリアルに最大 3 つのテクスチャを重ねることができます。
私は少しの実験と読書を行っており、レンダリング パス中にマテリアルを頻繁に切り替えると速度が低下することがわかっています。たとえば、オブジェクトが表示されるたびに新しいマテリアルが設定されると仮定すると、200K の三角形を含むシーンでは、オブジェクトが 10 個か 1000 個かによって、パフォーマンスに大きな違いがあります。
したがって、パフォーマンスが重要な場合は、マテリアルの切り替えを最小限に抑えるために、シーンをマテリアルごとに分類する必要があるようです。私が探しているのは、さまざまな状態変化のオーバーヘッドをどのように考えるか、そしてどこで最大の費用対効果を得られるかについてのガイドラインです。例えば、
gl.useProgram()
たとえば、の相対的なパフォーマンス コストはいくらですかgl.uniformMatrix4fv()
。gl.drawElements()
- シェーダーの切り替えを最小限に抑えるには、ubershader を作成する必要がありますか?
gl.drawElements()
呼び出し回数を最小限に抑えるためにジオメトリを集約する必要がありますか?
ブラウザ、OS、グラフィックス ハードウェアによって走行距離が異なる場合があることを認識しています。また、英雄的な手段も求めていません。シーンを高速化する経験をすでに持っている人からのガイドラインです。過去に固定パイプラインの OpenGL プログラミングの経験はありましたが、WebGL/OpenGL ES 2.0 のやり方については初心者です。
ios - OpenGL ES 2.0 (iOS) での 2D 描画
iOS で OpenGL ES 2.0 を使用する方法を学んでいます。現時点では、基本的な 2D アニメーションを実行したいだけです (たとえば、画面上で四角形を移動し、サイズを変更します)。Apple が Xcode で提供する OpenGL ES のプロジェクト テンプレートから始めました。私の描画コードは次のようになります。
これで、画面の中央に素敵な長方形が描画されます。しかし、次のコードを追加して四角形を変更し始めると、見た目がおかしくなり始めます。
長方形の一部が画面の中央にくっついているような感じです。私は OpenGL ES にまったく慣れていないので、私の問題は明らかです。また、これは OpenGL ES が 3D グラフィックス ライブラリであることと関係があると考えており、それを 2D 空間として扱おうとしています。私の質問は次のとおりです。OpenGL ES 2.0 で 2D オブジェクトを描画およびアニメーション化する最良の方法は何ですか? OpenGL ES 1.1 についてオンラインでいくつか見たことがありますが、それはあまり役に立ちません。OpenGL ES 2.0 での 2D 描画のための特別なテクニックですか、それとも何らかの 2D 描画モードがありますか?
ガイダンスをいただければ幸いです。
iphone - OpenGL ES2.0をサポートするiOSの最小バージョンは何ですか?
質問が理にかなっているのかどうかはわかりません。OpenglES2.0を使用したiPhoneゲームを書いています。OpenGLES2.0が3gs以降でサポートされていることを知っています。デバイスにiOS3.1.3以降が必要な場合など、iOSバージョンの最小要件もありますか?それとも、ハードウェアだけに依存しているのでしょうか。
ありがとう!-shireesh
psネットで検索しようとしましたが、あまり見つかりませんでした。適切なキーワードを使用していない可能性があります。
iphone - iPhone で GPU 加速計算 (GPGPU) を実行するためのリソースはありますか?
iOS (iPhone 3GS および 4 用) で GPU 高速化計算を行うことに興味があります。残念ながら、どちらのデバイスも OpenCL をサポートしていないため、プログラム データをグラフィックス データとして表現し、OpenGL ES 2.0 プログラマブル シェーダー (頂点とフラグメント) を使用して作業を行うしかないようです。役立つリソースを推奨できる人はいますか? サンプルコードは聖杯です。
android - OpenGL ES 2.0 でテキストをテクスチャとして表示する
私は Android 2.2 アプリケーションを開発しています。C++ を使用して、すべての OpenGL ES 2.0 を管理しています。
OpenGL を使用してテキストを表示したいのですが、方法がわかりません (私は非常に初心者です)。
一般的な文字列をテクスチャにレンダリングし、それらのテクスチャを単純に描画できることを読みました。しかし、どうすればそれができますか?
ありがとうございました。
opengl-es - OpenGL シェーダーの属性位置バインディングの明示的 vs 自動
OpenGL シェーダー プログラムの属性の場所を設定する場合、次の 2 つのオプションに直面します。
リンクする前にglBindAttribLocation()を使用して、属性の場所を明示的に定義します。
また
リンク後にglGetAttribLocation()を実行して、自動的に割り当てられた属性の場所を取得します。
どちらか一方を使用するためのユーティリティは何ですか?
そして、もしあれば、どちらが実際に好まれますか?
android - 頂点シェーダーとフラグメント シェーダーから法線を削除する
C++ で OpenGL ES 2.0 を使用して Android 2.2 アプリケーションを開発しています。
ここに私の頂点とフラグメントシェーダーがあります:
私は OpenGL ES 2.0 の開発に非常に慣れていません。
レンダリングにライトが必要な場合は、頂点シェーダーとフラグメント シェーダーに複雑な変更を加える必要があると誰かに言われました。だから、私はそれを行う方法はありません。法線は必要ありません。
私の質問は:
法線を使用しないように頂点シェーダーとフラグメント シェーダーを変更するにはどうすればよいですか?
ありがとう