問題タブ [point-sprites]
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 - OpenGLポイントスプライトを使用してビルボードスプライトをシミュレートすることは可能ですか?
ビルボードスプライトと同じように、OpenGLでポイントスプライトを設定して距離に応じてサイズを変更しようとしましたが、値を取得GL_POINT_DISTANCE_ATTENUATION_ARB
して有用なことを行うことができません。特定の予測に一致する値の相関関係はありますか?私がやろうとしていることは可能ですか?
使用されているレンダリングコード:
c++ - 直接 x でポイント スプライトを使用する。どのような手順を踏む必要がありますか?
これはまだ未解決の問題です。
私は自分の世界で太陽をレンダリングするポイント スプライト システムを機能させようとしています。別のユーザーが同様の質問をしているのに気付きました (おそらく私のクラスからの同じコードで:))が、彼らはこれを完了することができませんでした。これに対する私の現在のコードは次のとおりです。
IDirect3DDevice9 *m_Device = LudoRenderer::GetInstance()->GetDevice(); m_Device->SetRenderState(D3DRS_POINTSPRITEENABLE,true); m_Device->SetRenderState(D3DRS_POINTSCALEENABLE,true);
画面に太陽が表示されません。ロードしようとしている太陽ではなく、世界の残りの部分でアルファ ブレンドを行っているようです。これは、使用しているデバイスが原因である可能性がありますか? どんな助けでも大歓迎です:)
ios - OpenGL ES 1.1 でポイント スプライト テクスチャ座標を指定する方法は?
iOS の OpenGL ES 1.1 でポイント スプライトを使用するパーティクル システムを作成しています。ポイントスプライトをテクスチャリングしようとするまで、すべてがうまく機能します...レンダリングすると、各スプライトは、(画像を表示するのではなく) ロードしているテクスチャの左上のピクセルによって色付けされます。さまざまな画像とさまざまなサイズを試しましたが、常に同じ結果が得られます。
セットアップ コード (GLPaint の例から取得):
およびレンダリング コード:
ポイント スプライトをテクスチャリングするとき、テクスチャ座標を指定する必要がありますか?
iphone - iOS上のOpenGLES2.0のマルチテクスチャポイントスプライト?
OpenGLES2.0を使用してiPhoneアプリケーション用のマルチテクスチャポイントスプライトを作成しようとしています。Webでこの例を見つけることができず、機能していないようです。ポイントスプライトにGL_POINTSモードを使用するときに、gl_PointCoordを複数のテクスチャで使用できないという組み込みの制限はありますか?
TRIANGLE_STRIPモードではマルチテクスチャリングを問題なく実行できるため、テクスチャを適切に渡すことができると確信していますが、ポイントスプライトを使用して処理を高速化したいと考えています。
可能であれば、動作するコードの例へのリンクが非常に役立ちます。ありがとう!
編集:
これが、テクスチャをシェーダーに渡す方法です。これにより、TRIANGLEモードまたはTRIANGLE_STRIPモードのときにマルチテクスチャリングを実行できます。
ただし、POINTSモードを使用している場合、2番目のテクスチャは表示されません。つまり、上記のシェーダーコードを参照すると、
gl_FragColor = texPixel;
また
gl_FragColor = burnPixel;
同じ質感が見えます。これは奇妙に思えます。私の推測では、ポイントスプライトでマルチテクスチャリングを行うことはできず、どういうわけか2つのアクティブなテクスチャまたはgl_PointCoordへの2つの呼び出しがあると問題が発生します。しかし、私は私が間違っていることを望んでいます。したがって、OpenGL ES 2.0でポイントスプライトを操作するマルチテクスチャリングの簡単な例があれば、そのコードを見て喜んでいます。
編集2:
頂点シェーダー:
フラグメントシェーダー:
ios - 深度テストを使用したOpenGLポイントスプライト-ブレンディングの問題?
ポイントスプライトを(iOSでOpenGL ES 2.0を使用して)ユーザーの描画ストロークとしてレンダリングしています。これらのポイントを頂点バッファオブジェクトに保存しているので、スプライトが描画に送信されたときに正しい順序で表示されるように、深度テストを実行する必要があります。
次のスクリーンショットに示すように、これらの描画ストロークをレンダリングすると、奇妙な効果が見られます。
青のストロークの端の周りの背景色の「境界線」に注意してください。ここでは、緑の上に描画されています。ユーザーは緑のストロークの後に青のストロークを描画しましたが、VBOが再描画されると、青のストロークが最初に描画されます。緑のストロークを描くことになると、深度テストが開始され、青のストロークの後ろにあるはずであることがわかります。これもある程度の成功を収めています。ある種のブレンディングの問題であるように見えますか、それともフラグメントシェーダーで色を誤って計算することに関係していますか?すべてのストロークのエッジは透明である必要がありますが、フラグメントシェーダーは、それらのフラグメントを処理するときに、それを背景テクスチャと組み合わせているように見えます。
私のアプリでは、深度レンダーバッファーを作成し、glEnable(GL_DEPTH_TEST)
を使用して呼び出しましたglDepthFunc(GL_LEQUAL)
。glDepthMask()
私は無駄に実験しました。ブレンディングはに設定されglBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
、ポイントスプライトカラーは事前に乗算されたアルファ値を使用します。描画ルーチンは非常に単純です。
- レンダリングからテクスチャへのFBOをバインドします。
- 背景テクスチャを描画します。
- (多数のVBOから)ポイントスプライトを描画します。
- このFBOのテクスチャをメインフレームバッファに描画します。
- メインフレームバッファを提示します。
編集
これが描画ルーチンからのコードです。
描画前のセットアップ状態:
描画ルーチン:
助けてくれてありがとう。
opengl-es - パーティクル システムの GLSL PointSprite
PointSprites (Cocos2D ソースに触発された) で ParticleSystem を使用しています。しかし、OpenGL ES 2.0 の機能をどのように再構築するのだろうか
これらは、OpenGL ES 2.0 コンテキストを使用すると BAD_ACCESS を生成します。PointSprite ごとに 2 つの TRIANGLES を使用する必要がありますか? しかし、それはおそらくあまり効率的ではありません (余分な頂点のオーバーヘッド)。
編集:だから、提案された解決策に関する私の新しい問題: https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528
バッチ呼び出しでさまざまなサイズを渡す可能性があります。Uniform の代わりに Attribute を使用することを考えましたが、GL_POINTS を描画していなくても、常に PointSize をシェーダーに渡す必要があります。では、おそらく 2 番目のシェーダー (GL_POINTS のみのシェーダー) でしょうか?! 描画ルーチンのフレームごとにシェーダーを切り替えるためのオーバーヘッドを認識していません (パーティクル システムが使用されている場合は、pointSize なしで通常の GL_TRIANGLES も当然レンダリングしたいため)...これに関するアイデアはありますか?
java - Java3D でポイント スプライトを使用できますか?
Point Sprites のネイティブ サポートが計画されていたようですが、Java3D に実装されることはありませんでした。
それをソース コードに追加して、独自のバージョンの Java3D をコンパイルする以外に、Point Sprites を使用してレンダリングする Geometry 派生クラスを作成できる回避策はありますか?
c++ - カメラからの距離に基づいてポイント スプライトのサイズを変更する
大学向けにコア OpenGL 3.3 のみを使用して Wolfenstein 3D のクローンを作成していますが、スプライトで少し問題が発生しました。つまり、スプライトを距離に基づいて正しくスケーリングすることです。
私が知る限り、以前のバージョンの OGL は実際にこれを行っていましたが、その機能は削除されており、再実装しようとする試みはすべて完全に失敗しました。
私の現在の実装は、遠距離ではまずまずで、中距離ではあまり粗末ではなく、近距離では奇妙です。
主な問題 (私が思うに) は、私が使用している数学を理解していないことです。
スプライトのターゲット サイズはビューポートよりもわずかに大きいため、そのサイズに近づくと「画像から外れる」はずですが、そうではありません。それは小さくなり、それは私を大いに混乱させます。
言葉が足りない場合に備えて、これの小さなビデオを記録しました。(私のは右側です)
誰かが私が間違っている場所に私を導き、その理由を説明できますか?
コード:
C++
頂点シェーダー
フラグメントシェーダー
ios - 明確な回転を持つOpenGLES2.0ポイントスプライト-シェーダーで行列を計算しますか?
さまざまな属性を使用してポイントスプライトをz軸を中心に回転できるようにするソリューションを見つけようとしています(つまり、均一では機能しません)。
私のアプリでは、フレームごとに数百/数千のポイントスプライトが描画され、VBOに保存されます(1,000,000を超える可能性があります)。そのため、私はメモリ使用量とパフォーマンスの間の最良の妥協点を探しています。
現在の頂点シェーダーとフラグメントシェーダーは次のようになります。
私は現在、次の可能性を想像することができます。
mat4 rotMatrix
ポイントスプライトデータに属性を追加します。これをフラグメントシェーダーに渡し、各フラグメントを回転させます。- 利点:
- シェーダーをシンプルに保ちます。
- シェーダーの外側の行列を計算するための単純なコード(
GLKit
たとえばを使用)。
- 短所:
- ポイントスプライトデータのサイズを大幅に増やします(4x4マトリックスの場合は16から80バイト/ポイント、3x3マトリックスの場合は52バイト/ポイントに... 3x3回転マトリックスを使用できると思いますか?)。これにより、アプリが3〜5倍早くクラッシュする可能性があります。
- より多くの計算をCPUにプッシュします(フレームあたり数百/数千の行列計算)。
- 利点:
ポイントスプライトデータに属性を追加して
float angle
から、頂点シェーダーで回転行列を計算します。上記のように、回転行列をフラグメントシェーダーに渡します。- 利点:
- ポイントスプライトのデータサイズを小さく保ちます(16〜20バイト/ポイント)。
- 重い行列の計算をGPUにプッシュします。
- ポイントスプライトのデータサイズを小さく保ちます(16〜20バイト/ポイント)。
- 短所:
- 回転行列を作成するには、カスタムGLSL関数を作成する必要があります。大きな問題ではありませんが、私の行列の計算は錆びているので、特に3x3の行列の解を理解しようとしている場合は、エラーが発生しやすい可能性があります...
- これは数百/数千の頂点で発生する必要があることを考えると、これはパフォーマンスの深刻な低下になりますか(GPUによって処理されているにもかかわらず)?
- 利点:
- 角度属性の1バイトに現実的に対処できました(255の異なる角度で十分です)。同じ回転行列を不必要に再計算する必要がないように、ある種のルックアップを使用できる方法はありますか?定数を頂点シェーダーに格納することは私の最初の考えでしたが、ブランチステートメントをシェーダーに配置し始めたくありません。
良いアプローチについて何か考えはありますか?
opengl - OpenGLでポイントスプライトを使用してベクトル場をレンダリングする
OpenGLでベクトル場の視覚化をレンダリングしたいと思います。現在、矢印で置き換える必要のあるポイントで満たされた3D立方体があります。OpenGLのポイントスプライトについてたくさん読んだことがありますが、それらは私のニーズにかなりよく合っているようです。
私はまだテクスチャを実際に扱ったことがないので、ポイントスプライトと一緒にテクスチャを使用することに関していくつか質問があります。
まず、テクスチャを使用するだけで、ポイントを矢印に簡単に置き換えることができますか?もしそうなら、シェーダーを使用してそれらのポイントスプライトを任意の角度で回転またはスケーリングすることは可能ですか?
これを達成するためのポイントスプライト以外の可能性がある場合は、それらについて聞くことも素晴らしいでしょう。OpenGL4.2を使用しています。