問題タブ [multitexturing]
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.
android - OpenGL ES 1.1 を使用してマルチテクスチャリングを実装し、別々の RGB とアルファ PKM を組み合わせるにはどうすればよいですか?
私が書いた Android ゲームのテクスチャのメモリ フットプリントを減らそうとしましたが、あまり成功しませんでした。私が行った調査に基づいて、ETC1 を使用してテクスチャを圧縮するのが良い方法のようです。これは、Android デバイスで最も広くサポートされている形式であるためです。
Mali ARM を使用して、PNG から必要な PKM を作成できます。問題はありません。ETC1Utils を使用して、これらの PKM を適切にレンダリングすることもできます。ここでも問題はありません。
問題は、アルファを処理しようとすると発生します。Mali を使用して、PNG 用に別のアルファ ファイルを作成しました。つまり、"xxx.png" は "xxx.pkm" と "xxx_alpha.pkm" に圧縮されます。OpenGL ES 1.1 ではフラグメント シェーダーを使用できないため、マルチテクスチャリングを使用してこれら 2 つのテクスチャを結合するという別の質問で提案された 1 つのアプローチです。
そして、これが私が立ち往生しているところです。私はこのことにあまり詳しくなく、あまり進んでいません。基本的に、アルファ テクスチャと結合しようとするとすぐに、すべてが白くレンダリングされます。
ここに私のコードのスニペットがあります:
私の主な関心事は load() メソッドです。このコードは、私が Web で見つけたスニペットを使用してまとめられたものであり、一般的なマルチテクスチャリングに対する理解の欠如と相まって、どこかで明らかに間違っています。また、テクスチャをレンダリングするときに次を呼び出すことに注意してください。
テクスチャをレンダリングするときは、Texture クラスで bind() メソッドを呼び出します。ご覧のとおり、これはロード時に RGB PKM ID として使用されたグローバル textureId 変数にバインドされます。これが正しいかどうかさえわかりません。RGB の ID またはアルファの ID にバインドする必要がありますか? それとも、正しい軌道に乗っているとは言えませんか? 私の問題は、ETC1Utils を使用してアルファをロードする方法にも関連している可能性があります。このアプローチが正しいかどうかはわかりません。
私は本当にかなり行き詰まっているので、どこが間違っているのかを指摘し、ETC1 アルファと RGB を組み合わせるためにマルチテクスチャリングをどのように実装する必要があるかについての何らかの説明があれば、本当に素晴らしいでしょう.
android - OpenGL ES 1.1 を使用してマルチテクスチャリングを適用するときに、テクスチャの RGB チャネルをアルファ チャネルとして使用する方法はありますか?
私は、ETC1 (具体的には PKM ファイル) を使用してテクスチャ圧縮を取得しようとしてきました。OpenGL ES 2 にアップグレードせずにこれを実行しようとしているので、マルチテクスチャリングを使用しています。
私はマルチテクスチャリングを現在(最終的に)動作させていますが、問題は期待どおりに動作していないことであり、その理由を理解したと思います。PKM を作成すると、カラー コンポーネントのみの PKM と、アルファ コンポーネントのみの PKM が作成されます。問題は、アルファ PKM がアルファ値を RGB チャネルに格納しているように見えることです。黒は完全な透明度を表し、白は完全な不透明度を表します。
私の質問は次のとおりです。マルチテクスチャリングを使用するときに、これらの RGB 値を組み合わせてアルファ値に変換する方法はありますか? そうでない場合、ETC1 を使用し、OpenGL ES 1.1 でアルファをサポートするためのオプションが表示されません (間違っている場合は修正してください)。
opengl - GLSL マルチテクスチャリングでテクスチャ 0 しか表示されない
あなたが尋ねる前に、はい、私は多数のチュートリアル、このフォーラムや他のフォーラムに投稿された同様の質問などを読みました...私が見つけることができるすべての提案を試しましたが、GLSL 3.3マルチテクスチャリングを私の人生で機能させることはできません.
https://drive.google.com/file/d/0B05Cvmc8jIzjMW1wS09BSWp3MzA/view?usp=sharingで完全な VS2013 プロジェクトを Google ドキュメントに投稿しました。
これが私のテクスチャバインディングコードです:
私のフラグメントシェーダーコード:
テクスチャ 1 は白い正方形で、中央に灰色の正方形があるため、出力は中央に暗い陰影のあるテクスチャ 0 になると予想されます。ただし、テクスチャ 0 は変更されていないように見えます。問題を切り分けるために、フラグメント シェーダーの main() を次のように変更しました。
予想どおり、これはテクスチャ 0 を表示します。ただし、本当のキッカケは、フラグメント シェーダ命令を mytex[ 1 ] のみを参照するように変更しても、出力には引き続きテクスチャ 0 が表示されることです。
ATI と Nvidia を搭載した 2 台のコンピューターでこれを試しました。問題は、ATI コンピューターが OpenGL 3.2 しかサポートしていないことにあるのではないかと考えたので、代わりに #version 150 を使用する必要がありました。ただし、NVidia は OpenGL 4.1 をサポートしているため、問題はありません。どちらのマシンもレガシー クライアント呼び出しによるマルチテクスチャリングをサポートしているため、一般的なマルチテクスチャリング サポートの欠如は問題ではありません。
また、glBindSampler() の代わりに glUniform1iv を使用して、次のようにテクスチャ ユニットを設定しようとしました。
これも効果がありませんでした。
私は長い間、古いクライアント呼び出し (glVertex3d、glTexCoord2d など) でプログラミングを行ってきました。私はGLSLでスピンアップしています。だからただじっと見つめている。私がやろうとしているのは、単純な正方形を三角形のストリップ パターンでレンダリングすることだけです。私の頂点とテクスチャの座標配列は次のとおりです。
glsl - マスク間の GLSL ダークシーム
テクスチャリングは次のとおりです。
たとえば、マスクを使用すると、次のようになります。
しかし、青マスクと赤マスクの間の各ピクセルのチャネル数は 255 ですが、何らかの理由で赤マスクと青マスクの間の境界ではテクスチャ値が生成されません。
たとえば、次のコードは次のようになります。
私は得る:
影付きの円 - これは赤と青のマスクの境界線です。
それを取り除く方法は?おそらく mix() を使用する理由であり、目的の結果を達成する他の方法はありますか?
c++ - 複数のオブジェクトを異なるテクスチャでテクスチャリングする
OpenGL でテクスチャの異なる複数のオブジェクトをレンダリングする方法を説明してもらえますか?
ほぼ最終結果に近づいていると思いますが、現時点ではここで行き詰まり、次に何をする必要があるのか わかりません。本当に助けが必要です!
現時点では、これは私が持っているものです:
drawSphere(): 経度と緯度の数に基づいて UV 球体を描画します
int numberOfVerices = 0;
/li>SetupGeometry(): このメソッドは、頂点とテクスチャ座標をバインドするために使用されます。
drawSphere(300, 300);
- SetupShader(): シェーダーの作成とシェーダーのコンパイル
文字テキスト[1000]; 整数の長さ;
- SetupTexture(char * filename): 画像を読み込み、テクスチャの 2 つの配列を生成します。1 つは GL_TEXTURE0 に、もう 1 つは GL_TEXTURE1 に
Gluint テクスチャ[2]; glGenTextures(2, テクスチャ);
- Render(int i): 球体である 2 つのオブジェクトをレンダリングします。
glClearColor(0.0, 0.0, 0.0, 1.0);/* 背景を黒くする */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
頂点シェーダー:
フラグメントシェーダー:
メインのメインコード:
c++ - glDrawElements を使用した OpenGL および GL_Blend
glDepthFunc(GL_ALWAYS); を追加することで解決しました。
ハイトフィールドで 2 つのテクスチャをブレンドしようとしていglDrawElements
ます。Normalpointer と vertexpointer データは同じですが、TexCoordPointer は 2 つのテクスチャで異なります。どの BlendFunc を試しても、texture_two の大部分は透明ですが、表示されるテクスチャは常に 1 つだけです。gl_blendglDrawElements
で動作しますか、それとも間違っていますか?
どうもありがとうございました!
c++ - 1 つのメッシュを描画しながら多くのテクスチャをバインドする OpenGL
たとえば、1 つのメッシュに 80 のテクスチャをバインドし、VBO に配置したいと考えています。どうすればこれを達成できますか?
glActiveTexture でそれができることを読みましたが、最大で約 32 のテクスチャを使用できます (GPU に依存)。
私のVBOコード:
ios - 2 つのテクスチャを fragmenshader に渡す
フラグメント シェーダーでさまざまなテクスチャを取得したいと考えています。でもなぜかうまくいかない。それらの1つだけを取得しています。
私はレンダリングを開始しています:
私のフラグメントシェーダーは特別なものではありません:
テクスチャを取得したかどうかをテストするだけです。
ここでテクスチャを取得しています: