2011-10-12 6 views
5

OpenGLで描画されたさまざまなオブジェクトに個別のマテリアルプロパティを設定するにはどうすればよいですか?レンダリング時OpenGLのオブジェクトごとに別のマテリアルプロパティを設定する

//************** Object 1 ************** 
glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 
glColor4f(149.0/255.0, 78.0/255.0, 22.0/255.0, 1.0); 
float mat_specular[] = {0.992157, 0.941176, 0.807843, 1.0}; 
float shininess = 10; 

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); 
glMaterialf(GL_FRONT, GL_SHININESS, shininess); 

glPushMatrix(); 
glTranslatef(0, 3.0, 0); 
drawSphere(0.1, 0.1, 0.1); 
glRotatef(10, 1, 0, 0); 

glDisable(GL_COLOR_MATERIAL); 


//************** Object 2 ***************** 
glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_DIFFUSE); 
glColor4f(48.0/255.0, 48.0/255.0, 48.0/255.0, 1.0); 
float mat_specular_2[] = {0.992157, 0.941176, 0.807843, 1.0}; 
float shininess_2 = 10; 

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular_2); 
glMaterialf(GL_FRONT, GL_SHININESS, shininess_2); 

glPushMatrix(); 
glTranslatef(-0.6, 0.2, 1.6/2.0); 
drawSphere(0.1, 0.1, 0.1); 
glPopMatrix(); 

glDisable(GL_COLOR_MATERIAL); 

、オブジェクト2に設定された色は、シーン全体のために使用される: 私は明らかにのみ後の色を示し、次のコードを、行いました。したがって、オブジェクト1は、独自のカラーセットを既に持っているにもかかわらず、オブジェクト2のカラーでレンダリングされます。

2つのオブジェクトを個別のマテリアルプロパティにして、シーン全体で1つの色ではなく異なる色で表示できるようにするにはどうすればよいですか?

+1

drawSphere()をご覧ください。 – Calvin1602

答えて

1

まず、サンプルコードは妥当であり、オブジェクトには実際には異なる素材が必要です。

ただし、2つ目のオブジェクトの散布色を変更するのは、両方のオブジェクトの反射色とシャイニー値が同じであるためです。 OpenGLはステートマシンのように、周囲環境は最初のオブジェクトから変更されていないので、2番目のオブジェクトの周囲も最初のものと同じです。

したがって、オブジェクト間の唯一の材料の違いは拡散色であり、この差は(101,30,26)です。それで、この違いはまったく等しい常態とスペキュラの言葉によってちょうど過大評価されているので、あなたに気づくには小さすぎますか?完全に異なる材料を試し、実際に違いがないかどうかを確認してください。

0

最初のオブジェクトを描画した後にglPopMatrixが見つかりませんでした。それがどう変わるかわからない。あなたが置くべき

+2

'glPopMatrix()'が何のために使われているのか分かりません。あなたの答えは問題を解決するのに役立つものではありません。 –

3

:あなたのレンダリング機能の最初のものとして

glEnable(GL_COLOR_MATERIAL); 

を、そして光のパラメータを設定します。次に

glDisable(GL_COLOR_MATERIAL); 
glPushMatrix(); 

材料の特性を設定し、オブジェクトを呼び出します。

glDisable(GL_COLOR_MATERIAL); 

を再び、その上の第2の目的をモデル化し、前に:あなただけのタイプ別のオブジェクトの上に別の材料を使用したい場合は今からすべてのオブジェクトは、このプロパティを持っています。まだ質問がある場合は、尋ねてください。

関連する問題