在OpenGL / Glut中创建一个Chrome立方体?

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开发者能否指导我走向正确的方向?
2个回答

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();
}

谢谢你让我重新打开那个项目,我写了一些很棒的代码(在我看来),我都忘记了! - John Rasch

2
你看过环境映射吗?你想让你的物体反射来自环境中其他物体的光线,所以你基本上应用一个看起来像环境的纹理,并根据法线生成纹理坐标。这将给表面一个镜像的外观。你可以让OpenGL自动为每个顶点生成纹理坐标,使用 glTexGen

NeHe教程23 介绍了球形贴图。你还可以使用GLSL为每个顶点或每个像素生成自己的纹理坐标。 这里有一个教程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接