我正在尝试在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人都能指出我正确的方向吗?
答案 0 :(得分: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();
}
答案 1 :(得分:2)
你看过环境贴图了吗?您希望对象反射来自环境中其他对象的光,因此您基本上应用看起来像环境的纹理并根据法线生成纹理坐标。这将使表面具有镜像外观。您可以让OpenGL根据glTexGen
自动为每个顶点生成纹理坐标。
NeHe tutorial 23通过球体映射涵盖了此内容。您还可以使用GLSL为每个顶点或每个像素生成自己的纹理坐标。 Here's a tutorial就此而言。