問題タブ [opengl-es]
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.
iphone - タイリングにもかかわらず、512x512 テクスチャが iPhone で大きな GPU ストレスを引き起こす
シンプルな OpenGL ES 実装 (2D ゲーム) を iPhone でテストしていますが、プロファイラーの使用中にレンダリングの使用率が高いことに気付きました。これらは事実です:
- プリロードされた大きなテクスチャ( 512x512 ピクセル) を 1 つだけ 60fps で表示しており、レンダリングの使用率は約 40% です。
- 私のテクスチャは、私が使用している唯一の GL 関数である を
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
使用してブレンドされています。 - テクスチャを小さくしてタイリングしようとしましたが、違いはありませんでした。
- 1024x1024 ピクセルの PNG テクスチャ アトラスを使用しています
この1 つのテクスチャがこれほど激しい GPU 使用率を引き起こしているのは非常に奇妙です。
これは予想されることですか?私は何を間違っていますか?
編集:私のコード:
編集:いくつかの改善を行いましたが、レンダリングの使用率を下げることはできませんでした。テクスチャを 32x32 の部分に分割し、座標のタイプとテクスチャ座標を GLfloat から GLshort に変更し、縮退三角形の頂点を追加しました。
アップデートは次のとおりです。
initState: (頂点とテクスチャ ポインターは GL_SHORT になりました)
drawView:
iphone - glClearColor()が27%のレンダリング使用率でiPhoneをプッシュ
この質問の答えを探した結果、私はかなり不快な発見に遭遇しました。
glClearColor()
60 fpsでのみレンダリングすると、iPhoneのレンダリング使用率が27%になるようです。
つまり、ほとんど何もしない(画面を更新するだけ)と、iPhoneはレンダリング容量の4分の1以上を使用することになります。
これは予想されることですか?
ドキュメントによると、POWERVRは少なくとも約270メガピクセル/秒に達するはずです。以下に正しく説明されているように、60 fpsでの480×320は約9.2メガピクセル/秒に相当し、全体のパフォーマンスは約40メガピクセル/秒になりますが、これは疑わしいことです。
iphone - Opengl ES - z 軸のレンダリングが正しくありませんか?
.obj ファイルから読み込んでいる雪だるまのモデルがあります。glRotatef() を使用してモデルを回転させると、雪だるまの頭が常に体の前にレンダリングされることを除いて、すべてがうまく機能します。雪だるまの鼻も常に頭の後ろにレンダリングされます。これにより、雪だるまが回転しながら方向を変える効果が生まれますが、実際にはパーツが正しい z オーダーでレンダリングされません。なぜこれが起こっているのですか?
注: 雪だるまのすべてのパーツは、blender を使用して作成された同じ .obj ファイルからのものです。
このようにモデルをレンダリングします(描画ループ内)
このように回転します (in touchesMoved)
opengl-es - 任意のサイズのピクセル ブロックを OpenGL ES テクスチャにコピーする...どういうわけか?
私は描画アプリケーションを作成しており、描画キャンバスは OpenGL テクスチャです。キャンバスに描画すると、キャンバス テクスチャのどの領域が変更されたかが判断され、変更を適用する前にそのピクセル データが (glReadPixels を使用して) コピーされます。
元に戻すには、コピーしたピクセル データを使用して以前のテクスチャの状態に戻したいだけです。ただし、OpenGL ES は glDrawPixels コマンドを提供しません。それを行う最良の方法は何ですか?
2 つのオプションを検討しましたが、どちらが優れているかはわかりません。
コピーしたピクセルを使用して一時的なテクスチャを作成し、それを描画します (ただし、コピーされた領域は 2 のべき乗ではありません!)。
大きなキャンバス テクスチャを完全にバインド解除し、テクスチャのバイトを手動で変更してから、OpenGL に戻します。私はいかなる種類の圧縮も使用していないので、これはそれほど悪くないかもしれません. しかし、それはハックのようですか?
誰にもアイデアはありますか?本当に感謝します!
iphone - iPhone : 64x64より大きいテクスチャ?
私はGLPaintの例を取り上げました...「PaintingView」に背景を入れようとしているので、背景の上に描画して、最終的に画像をファイルとして保存できます.....私は迷っています。
PNG (512x512) を読み込んで、プログラムの最初で「ペイント」しようとしましたが、512x512 ではなく 64x64 としてペイントされました...
前に、ペイント ビューのサブビューとしてロードしようとしましたが、glReadPixels が期待どおりに機能しません (サブビューではなく、PaintingView のみが考慮されます)。また、PaintingView には initWithImage のようなメソッドがありません... 画像 (および変更) で glReadPixels が機能する必要がありますが、ロード時にテクスチャのサイズが 64x64 になる理由が本当にわかりません..
iphone - OpenGL でサーフェス全体のテクスチャをアニメーション化する
私は iPhone OpenGLES 実装で作業しており、単純な表面 (長方形を構成する 2 つの三角形) でテクスチャを際限なくスクロールしたいと考えています。これは簡単なはずですが、これは私が以前に行ったことではなく、何かが欠けているに違いありません。テクスチャをうまく回転できますが、変換はまったく機能しません。マイナーな実装上の問題がありますか、それとも何か根本的に間違っていますか?
opengl-es - オブジェクトを縮小すると、OpenGL ES でオブジェクトが軽くなるのはなぜですか?
OpenGL ES 1.x でオブジェクトを (均一に) 縮小するとオブジェクトが軽くなるのはなぜですか?
法線が縮小されてもオブジェクトが暗くなるのではないので、暗くなる方が理にかなっていますか? しかし、何らかの理由でオブジェクトが軽くなります。拡大するとオブジェクトが暗くなります。私の意見では、これは逆であるべきです。
GL_NORMALIZE などの使用を提案しないでください。なぜ OpenGL の実装がそのように機能するのか興味があります。
opengl-es - OpenGL ESのglNormal3fの目的は何ですか?
OpenGL ESのglNormal3fの目的は何ですか?OpenGL ESで利用可能な即時モードがない場合、glNormal3fを何に使用しますか?サンプルコードがいいでしょう。
iphone - OpenGL ESレンダリングビューをUIViewの上に配置することは可能ですか?一方、UIViewは、OpenGL ESが透明性のあるPNGであるかのように透けて見えますか?
私にはそれについてはわかりませんが、それが可能であれば(たとえば、Flashのように)、それは本当に素晴らしいことです。
おそらくいくつかのOpenGLES機能が必要なビューベースのアプリがありますが、フルスクリーンのOpenGLESは必要ありません。コアグラフィックスでは難しいかもしれない小さなチャートやその他のものを描くために、特定の小さな領域でそれが必要です。