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

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

5
OpenGL ES 2.0で遅延レンダリング/シェーディングは可能ですか?
StackOverflowでこれを尋ねましたが、ここではもっと意味があるかもしれません: OpenGL ES 2.0で遅延レンダリング/シェーディングを実装している人はいますか?MRTをサポートしていないため、1つのカラーバッファーだけでは、「通常の」方法で実装できるものではありません。 具体的には、iPad、iPhone4(maaaybe iPhone 3gs)、およびAndroidで調査しています。iPad / iPhone4 / iPhone3gsのGLESViewアプリにはGL_OES_RGB8_RGBA8拡張が存在し、まだ深く見ていませんが、8ビット/チャネルでは、このアイデアは興味深いです:http ://www.gamedev.net/topic/ 562138-opengl-es-20-and-deferred-shading / 他のアイデアはありますか?パフォーマンス面でも、やりがいがありますか?

2
OpenGL:シェーダーを配置する場所
私はOpenGL ES 2.0を学ぼうとしていますが、シェーダーを「管理」するための最も一般的なプラクティスは何だろうと思っています。 私がこの質問をしているのは、私が見つけた例(Android SDKで提供されているAPIデモに含まれている例など)で、通常、GLRendererクラス内のすべてが表示され、私ができるように物事をかなり分けたいからです。たとえば、OpenGL ES 1.0コードと同じように、テクスチャ付きのクワッドを描画したいときに再利用できるGLImageオブジェクト(現時点では2Dのみに焦点を当てています)。私が見つけたほとんどすべての例で、シェーダーはクラス属性として定義されています。例えば: public class Square { public final String vertexShader = "uniform mat4 uMVPMatrix;\n" + "attribute vec4 aPosition;\n" + "attribute vec4 aColor;\n" + "varying vec4 vColor;\n" + "void main() {\n" + " gl_Position = uMVPMatrix * aPosition;\n" + " vColor = aColor;\n" + "}\n"; public …

2
GLSLシェーダー-色相/彩度/輝度の変更
GLSLフラグメントシェーダーを使用して画像の色相を変更しようとしています。Photoshopの色相/彩度調整レイヤーに似たものを実現したい。 次の画像では、私がこれまでに得たものを見ることができます。緑色の正方形の色相を変更して右側の赤い正方形のようにしたいのですが、このシェーダーでは半分の赤い半分のピンクの正方形(中央の正方形)が得られます。 フラグメントシェーダーで行っているのは、テクスチャの色をHSVに変換してから、頂点シェーダーから取得したHSV色を追加して、色をRGBに変換し直すことです。 私は何を間違えていますか? フラグメントシェーダー: precision mediump float; varying vec2 vTextureCoord; varying vec3 vHSV; uniform sampler2D sTexture; vec3 convertRGBtoHSV(vec3 rgbColor) { float r = rgbColor[0]; float g = rgbColor[1]; float b = rgbColor[2]; float colorMax = max(max(r,g), b); float colorMin = min(min(r,g), b); float delta = colorMax - colorMin; float …

1
バッファーのバインドを解除する必要がありますか?
OpenGL ES 2でいくつかのテストを行っていますが、いくつか質問があります。私の現在のプログラムは次のようなものです。 Init ------- -> create index buffer -> fill index buffer glBufferData … -> create vertex buffer -> fill vertex buffer glBufferData … Draw ------- 1. Apply vertex buffer -> Bind VAO -> bind vertex buffer - enable attributs (glVertexPointer, …) -> unbind vertex buffer -> Unbind VAO …

4
OpenGL ES 2.0でのジオメトリのインスタンス化
OpenGL ES 2.0でジオメトリのインスタンス化を行うことを計画しています。基本的に、同じジオメトリ(椅子)をシーンで1000回レンダリングする予定です。 OpenGL ES 2.0でこれを行う最良の方法は何ですか? モデルビューmat4を属性として渡すことを検討しています。属性は頂点データごとであるため、同じ三角形の各頂点に対してこの同じmat4を3回渡す必要があります(モデルビューは三角形の頂点全体で一定のままなので)。 これは、GPUに送信される多くの追加データに相当します(2つの追加頂点* 16フロート*(三角形の数)追加データの量)。 または、三角形ごとに一度だけmat4を送信する必要がありますか?しかし、属性は「頂点ごと」のデータとして定義されているため、属性を使用してどのように可能ですか? OpenGL ES 2.0でインスタンス化を行うための最良かつ効率的な方法は何ですか?

5
2D衝突検出
このキャラクターを使っているとしましょう。 (ソース:iconbug.com) どのように衝突検出を実装しますか?鳥の形が正方形の近くにないため、境界ボックスの使用は適切な近似ではないようです。 画像の一部を表すオブジェクト内に、一種の四分木データ構造があると考えていました。各葉はfalse(鳥の外側の白/透明な空間を覆う場合)またはtrue(鳥の領域、つまりくちばし、目などを表す場合)のいずれかになります。次に、鳥との衝突について、シーン内の唯一の障害物をテストします。 しかし、私のアプローチにおける私の問題は次のとおりです。 クワッドツリーを初期化する方法がわかりません。 クワッドツリーが初期化された後、障害物が画像の座標内にあると、クワッドツリーをトラバースして使用する方法がわかりません。 角張っていないキャラクターとの衝突検出をどのように行いますか? LE:私が見たもう1つのアプローチは、複数の境界ボックスを使用することでした。たとえば、くちばし用に1つまたはいくつかのバウンディングボックスを用意し、次に髪や尾用にいくつかのバウンディングボックスを用意します。しかし、それは退屈になる可能性があります。これが私の場合有効なアプローチである場合、それらの境界ボックスをどのように生成しますか?私のプログラムでそれらをハードコードする必要があるとは思いません。 LE2:かなり正確な衝突を気にします。単一のバウンディングボックスまたは円が少なくともその形状を適切に近似する方法を想像できないため、このアプローチは機能しません。

3
OpenGLでオブジェクトを曲げるにはどうすればよいですか?
OpenGLを使用して円柱や平面などのオブジェクトを曲げることができる方法はありますか? 私はOpenGL初心者(OpenGL ES 2.0を使用しています。問題があったとしても、この場合は数学が最も重要であるため、どういうわけかバージョンに依存しません)、変換、回転、行列変換などの基本を理解しています。 。オブジェクトのジオメトリを実際に変更できる(この場合はオブジェクトを曲げて)ことができるテクニックがあるかどうか疑問に思っていましたか? リンク、チュートリアル、その他の参考資料を歓迎します!

1
ゲームループとopenGLの間のマルチスレッドを利用する
openGLレンダラーに基づくゲームのコンテキストで話す: 2つのスレッドがあるとしましょう: ゲーム内オブジェクトのゲームロジックや物理などを更新します ゲームオブジェクトのデータ(スレッド1が更新し続ける)に基づいて、各ゲームオブジェクトのopenGL描画呼び出しを行います。 ゲームの現在の状態で各ゲームオブジェクトの2つのコピーがない限り、スレッド2が描画呼び出しを行っている間、スレッド1を一時停止する必要があります。そうでない場合、ゲームオブジェクトはそのオブジェクトの描画呼び出しの途中で更新されます。望ましくない! ただし、スレッド1を停止してスレッド2から安全に描画呼び出しを行うと、マルチスレッド/同時実行の目的全体が失われます。 マルチコアアーキテクチャを活用してパフォーマンスを向上させるために、数百または数千または同期オブジェクト/フェンスを使用する以外に、これに対するより良いアプローチはありますか? マルチスレッドを使用して、現在のゲームの状態にまだ含まれていないオブジェクトのテクスチャをロードしてシェーダーをコンパイルできることはわかっていますが、アクティブ/可視オブジェクトに対して、描画と更新の競合を引き起こさずにそれを行うにはどうすればよいですか? ゲームオブジェクトごとに個別の同期ロックを使用するとどうなりますか?このように、すべてのスレッドは、更新/描画サイクル全体ではなく、1つのオブジェクト(理想的なケース)でのみブロックします!しかし、各オブジェクトのロックを取得するのにどのくらいのコストがかかりますか(ゲームには1000のオブジェクトがある場合があります)?

1
AndroidでGPUスキニングを確実に実装するにはどうすればよいですか?
Androidでキャラクタースキニングを機能させようとしています。 アイデアはかなりバニラです:私にはスキニングマトリックスがあり、各頂点と共に、最大4つのマトリックスインデックスと4つの対応する重みを送信します。それらを頂点シェーダーで合計し、各頂点に適用します。 これは、ゲームのiOSバージョンの頂点シェーダーで行っていることです(法線は問題ありません)。 attribute vec4 in_pos; attribute vec4 in_normal; attribute vec2 in_texture_coords; attribute vec4 in_bone_index; attribute vec4 in_bone_weight; varying vec2 fs_texture_coords; uniform mat4 world_view_projection; uniform mat4 bones[@bind_matrix_count]; void main() { // Skinning vec4 transformed_pos = ((in_pos * bones[int(in_bone_index.x)]) * in_bone_weight.x) + ((in_pos * bones[int(in_bone_index.y)]) * in_bone_weight.y) + ((in_pos * bones[int(in_bone_index.z)]) …

1
OpenGL ESは、テクスチャを使用してステンシルエフェクトを作成します
環境 これは私が働いている環境です: OpenGL ES 2.0 iPhoneシミュレーター&iPhone 4 NVIDIA GeForce GTX 680MX 2048 MBを使用するiMac 27インチ お役に立てば幸いです。 問題 Stackoverflowを含む複数のソースと複数のサイトから高低を検索していますが、機能するステンシル効果がありません。 私が持っているのはこれです: 黒い「S」のものはポリゴンではなく、背景の画像と同じ幅と高さの四角形の四角形に描かれたテクスチャです。 背景と小さな黄色の男が黒い「S」テクスチャ内にある場合にのみ表示されるステンシルエフェクトを実行しようとしています。 私のフラグメントシェーダーでは、これがあります: varying lowp vec4 destinationColor; varying lowp vec2 TexCoordOut; uniform sampler2D Texture; uniform highp float TexScale; void main() { highp vec4 color = texture2D(Texture, TexCoordOut); if(color.a == 0.0) { discard; …

1
隣接するテクスチャのエッジを拾うスプライトシートテクスチャ
シンプルなスプライトシートを使用するカスタムスプライトルーチン(openGL 2.0)があります(テクスチャが横に並んでいます)。 したがって、たとえば、以下は2つの単純なテクスチャを持つテストスプライトシートです。 ここで、openGLスプライトオブジェクトを作成するときに行うことは、アトラス内のフレームの総数を指定し、描画するときに、描画するフレームを指定することです。 次に、テクスチャをどこから取得するかを決定します。 必要なフレーム数をフレームの総数で割る(左座標を取得するため) 次に、フレームの総数で1をダイビングし、その結果を上記で計算した左側の座標に追加します。 これは機能するようですが、時々問題が発生します。たとえば、以下のXを描画したいとします。 各テクスチャの間に1ピクセルの「パディング」を挿入することについて聞いたことがありますが、これがどのように機能するかを誰かが正確に説明できますか?つまり、これを行うと、テクスチャを取得するための計算が確実に破棄されます。 ピックアップしたテクスチャにパディングを単純に含めると(スプライトは空白の境界線で描画されます)、衝突の検出で問題が発生しますか?(つまり、透明部分が衝突するときに境界ボックスを使用すると、スプライトが衝突するように見えることがあります)。 誰かが説明していただければ幸いです。

3
複数の行列を頂点シェーダーに送信するにはどうすればよいですか?
ボーン/スキニングを使ったアニメーションを練習しています。頂点ごとに1つのマトリックスをシェーダーに送信しようとしています。私はこれら2つのアプローチを考えることができます。 方法1 このように各骨マトリックスに1つの均一なハンドルがあります u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); そして、onDraw私はそれらのそれぞれをシェーダーに送ります: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); マトリックスが多数ある場合、これは明らかに良い方法ではありません。リファクタリングするコードがたくさんあるのでまだ試していない私の2番目のアイデア 方法2 を使用しglUniformMatrix4fvてそれらを一度にすべて送信することです(20個の行列があると仮定します) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); はどこmatricesですかfloat[16 * 20]。ただし、各ボーンのマトリックスを変更するのは少し面倒になります。たとえば、3番目の行列を取得する場合、次の行に沿って何かが必要です。 float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); 値を保存すると、さらに煩わしくなります。 私は現在方法1を使用していますが、あまりスマートに見えません... 複数のマトリックスをOpenGL ES 2シェーダーに送信する最良の方法は何ですか? LE:私はAndroidを使用しているので、Javaソリューションを探しています。

1
重いフラグメントシェーダーのパフォーマンスの最適化
次の一連のシェーダーの最適化についてサポートが必要です。 バーテックス: precision mediump float; uniform vec2 rubyTextureSize; attribute vec4 vPosition; attribute vec2 a_TexCoordinate; varying vec2 tc; void main() { gl_Position = vPosition; tc = a_TexCoordinate; } 断片: precision mediump float; /* Uniforms - rubyTexture: texture sampler - rubyTextureSize: size of the texture before rendering */ uniform sampler2D rubyTexture; uniform …

1
gluLookAtはどのように機能しますか?
私の理解から、 gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 以下と同等です。 glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); しかし、ModelViewマトリックスを出力すると、への呼び出しがglTranslatef()正しく機能していないようです。コードスニペットは次のとおりです。 #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

4
可変長ループがGPUシェーダーに与える影響
デモシーンなど、GPU内で手続き型コンテンツをレンダリングするのが一般的です(画面いっぱいに1つの四角形を描画し、GPUにピクセルを計算させる)。 レイマーチングが人気です: これは、GPUがピクセルごとに不明な数のループ反復を実行していることを意味します(ただし、のような上限を設定できますmaxIterations)。 可変長ループがあると、シェーダーのパフォーマンスにどのような影響がありますか? 単純なレイマーチングの擬似コードを想像してみてください。 t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } さまざまな主流のGPUファミリ(Nvidia、ATI、PowerVR、Mali、Intelなど)はどのように影響を受けますか?頂点シェーダー、特にフラグメントシェーダー? どのように最適化できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.