2009-04-13 51 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

感謝您讓我重新開放該項目,我寫了一些我忘記的整潔的代碼(呃,在我看來)! – 2009-04-13 05:34:48

2

你看着環境映射?你希望你的物體反射來自環境中其他物體的光,所以你基本上應用了一個看起來像環境的紋理,並根據法線生成紋理座標。這將使表面具有鏡像外觀。你可以讓OpenGL根據glTexGen自動爲每個頂點生成紋理座標。

NeHe tutorial 23用球體映射來說明這一點。您還可以使用GLSL生成自己的每個頂點或每個像素的紋理座標。 Here's a tutorial就可以了。