2012-11-06 10 views
6

私はOpenGLを学び始めました。私が見たチュートリアルでは、フラグメントシェーダを使用して、すべてのオブジェクトの色を表示する方法を示しています。私がまだ見つけていないのは、オブジェクトの1つにフラグメントシェーダを使用して、異なるオブジェクトに異なる色を与える方法です。あなたはどうやってそれをしますか?OpenGLでフラグメントシェーダを1つのオブジェクトにのみ適用するにはどうすればよいですか?

質問にバックグラウンドを与えるために、私は家と道路が2次元である単純なシーンを描いています。私は固定されたグラフィックパイプラインを使用して私のオブジェクト(家のメインボディー、ウィンドウなど)の色を設定する方法を発見しましたが、フラグメントシェーダーを使用して色を設定する方法は分かりません。

私が何かを誤解している場合には、訂正を含め、どんな説明も非常に高く評価されます。

+0

色を均一にし、あなたがシェーダを使用して新しいオブジェクトを描画する前に制服を変更:

はこれを参照してください。 –

答えて

3

質問の背景を説明するために、私は家と道路が2次元の単純なシーンを描いています。私は固定されたグラフィックパイプラインを使用して私のオブジェクト(家のメインボディー、ウィンドウなど)の色を設定する方法を発見しましたが、フラグメントシェーダーを使用して色を設定する方法は分かりません。

As RobertRouhani saidのように、色を均一にしてオブジェクトごとに変更します。 OpenGLで1つのオブジェクトのみにフラグメントシェーダを適用する方法


glUseProgramでシェーダープログラムを変更して、別のシェーダーを使用した後でレンダリングを呼び出すだけで簡単に呼び出すことができます。 https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders

3

glDrawArraysまたはglDrawElementsでオブジェクトを描画する前に、色をシェーダに変数として渡します。

http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml

サンプルGLSLフラグメントシェーダ:

uniform vec4 u_color; 

void main(void) 
{ 
    gl_FragColor = u_color; 
} 

私はこの答えに拡大するだろうが、私は怠けているのです。希望が幾分助けてください。オンラインでチュートリアルがたくさんあり、glsl、glUniform4fなどを検索するだけです。