2009-04-13 9 views
3

GLUT/OpenGLでクロム化されたキューブを作ろうとしていますが、その方法を正確には分かりません。OpenGL/GlutでChromeのキューブを作成しますか?

"Chrome"が次のように表示されている教科書の「材料表」を検索しました: 周囲:(0.25,0.25,0.25)、拡散:(0.4,0.4,0.4)、およびスペキュラ:(0.774597、 0.774597,0.774597)。

私の質問は、単純なキューブを作成し、このマテリアル/テクスチャをGlut/OpenGLでどのように適用するのですか?

「glutSolidCube()」は使用しますか?もしそうなら、どのようにしてクロームテクスチャを適用するのですか?

GLUT/OpenGLの人々が私を正しい方向に向けることができますか?

答えて

5

glutSolidCube()の前にglMaterialfv()を呼び出すだけで簡単です。

私は学校以来、OpenGLを行っていないが、ここでは正しい軌道に乗ってあなたを取得する必要があり、球を使用し、古いプロジェクトからいくつかの表示ループコードは次のとおりです。

_Ambient[CHROME][0] = 0.25f; 
_Ambient[CHROME][1] = 0.25f; 
_Ambient[CHROME][2] = 0.25f; 
_Ambient[CHROME][3] = 1.0f; 
_Diffuse[CHROME][0] = 0.4f; 
_Diffuse[CHROME][1] = 0.4f; 
_Diffuse[CHROME][2] = 0.4f; 
_Diffuse[CHROME][3] = 1.0f; 
_Specular[CHROME][0] = 0.774597f; 
_Specular[CHROME][1] = 0.774597f; 
_Specular[CHROME][2] = 0.774597f; 
_Specular[CHROME][3] = 1.0f; 
_Shininess[CHROME] = 76.8f; 


void Display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glPushMatrix(); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, _Ambient[CHROME]); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, _Diffuse[CHROME]); 
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, _Specular[CHROME]); 
    glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, _Shininess[CHROME]); 
    // Translations... 
    glutSolidSphere(_Radius, _Slices, _Stacks); 
    glPopMatrix(); 

    glFlush(); 

    glutSwapBuffers(); 
} 
+0

私はこのプロジェクトを再開してくれてありがとう、私は忘れてしまったいくつかのすっきりしたコードを書いていました。 –

2

あなたは環境マッピングで見たことがありますか?あなたのオブジェクトは環境内の他のオブジェクトからの光を反射したいので、基本的に環境のように見えるテクスチャを適用し、法線に基づいてテクスチャ座標を生成します。これにより、サーフェスに鏡面が現れます。 OpenGLは、glTexGenに基づいて、各頂点のテクスチャ座標を自動的に生成させることができます。

NeHe tutorial 23は球マッピングでこれをカバーします。 GLSLを使用して、頂点ごとまたはピクセルごとに独自のテクスチャ座標を生成することもできます。それにHere's a tutorial