2009-04-13 52 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就可以了。