3

我正在尝试在 GLUT / OpenGL 中制作一个镀铬立方体,但我不确定该怎么做。

我在教科书中查找了“材料表”,其中显示“Chrome”为:环境:(0.25、0.25、0.25)、漫反射:(0.4、0.4、0.4)和镜面反射:(0.774597,0.774597,0.774597)。

我的问题是,如何创建一个简单的立方体并在 Glut/OpenGL 中应用这种材质/纹理?

我是否使用“glutSolidCube()”?如果是这样,我该如何应用镀铬纹理呢?

任何 GLUT/OpenGL 的人都可以指出我正确的方向吗?

4

2 回答 2

5

这应该和之前调用一样glMaterialfv()简单glutSolidCube()

我从学校开始就没有做过 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();
}
于 2009-04-13T05:29:59.190 回答
2

你看过环境映射吗?您希望您的对象反射来自环境中其他对象的光,因此您基本上应用一个看起来像环境的纹理并根据法线生成纹理坐标。这将使表面具有镜面外观。您可以让 OpenGL 自动为每个顶点生成纹理坐标,使用glTexGen.

NeHe 教程 23使用球体映射涵盖了这一点。您还可以使用 GLSL 为每个顶点或每个像素生成自己的纹理坐标。这是一个教程

于 2009-04-26T03:59:28.143 回答