2012-04-02 10 views
1

私はWebGLに熟練していません(同じ問題がOpenGLで翻訳されると思います)。頂点とフラグメントシェーダーを使ってオブジェクトをレンダリングしています。webglシェーダとテクスチャフィルタ

In vertex shader, amongst other things: 

attribute vec4 aVertexColor; 
varying vec4 vColor; 

................. 
vColor = aVertexColor; 
.................. 

In shader color: 

varying vec4 vColor; 

........... 
gl_FragColor = vColor; 

は今、これが正常に動作します:基本的にすべてのシェーダは行う手順ので、頂点の入力色を取得し、ちょうどフラグメントまで、そのまま渡されています。しかし、私が見ることができるものから、フラグメントの補間はリニアにデフォルト設定されており、それを最も近いものに変更したいと考えています。 ;今、私がしようとしてmは行うことです。

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 

をしかし、これは、私は限り絶対に何も変化しませんので、例えばgl.LINEARでgl.NEARESTを変更しても、効果がないようです私が言うことができる。シェーダは何とか何かを上書きしますか?それが私が望む効果を得られない理由です。 result image

今、私は得られた結果を添付しました。今私が対象としているのは、異なる色の3つの領域(頂点と同じ)に三角形を配置することです。だから、私の場合は〜1.3青、〜1.3緑、〜1.3赤を目指しています。何かヒント?ここで

は、私が取得したいものです。

Desired result

答えて

1

が可能です。さまざまな値が常に補間されます。最も近い値を使用するようにオーバーライドすることはできません。あなたの望む結果を得るには、3つのポリゴンを別々に描画する必要があります。

この非常に特殊なケースでは、ピクセルシェーダのトリッキーを使用してRGBの最大成分を見つけ出し、1に設定し、他の2つの成分をゼロに設定することもできますが、他の色では機能しません。

+0

入力していただきありがとうございます。私はちょうど私の問題にいくつかの他の解決策を見つける必要があります。 :) – Bogdan

2

私はあなたがNearest Filtering主題を誤解だと思います。テクスチャを使用している場合は、隣接するピクセルカラーとブレンドされたものではなく、最も近いテクスチャピクセルのカラーをピックアップします。しかし、あなたのアプローチを使用して、頂点間の混合色ではなく、一定にするのに役立ちます。私はあなたが欲しいものは以下のようなものだと思います。あなたは、私は信じていません欲しい

How to get a flat, non-interpolated color when using vertex shaders

+0

ありがとうございます。私はそれがすべて間違っていると推測していますが、あなたが提供したリンクが役立つとは本当に思いません。私は、それぞれの色を違う色にする必要はありません。私は達成しようとしているものの視覚化で私の答えを更新しました。 – Bogdan

関連する問題