使用GLUT& amp; Open GL的材料属性帮助C ++

时间:2012-02-26 06:03:18

标签: c++ opengl glut lighting

对于OpenGL项目的照明部分,我现在正在为我的团队做这个部分:

  

在第1部分中定义模型的材料属性。轻松制作材料定义   更换。具体来说,机器人组件和遥控器应该“闪亮”;   如果有各种颜色的色调,应该拆除碎石堆;主平台瓷砖应该是漫反射的   灰色。选择您自己的材料属性并为块,基础,工厂等正确记录它们。

我只是试图在控制单元上应用“闪亮”效果而且效果不佳。我尝试放入一些样本照明,因为我们还没有放入(或者至少它不在存储库中)来测试它。结果是控制器的立方体部分反射(尽管太白了,无论我尝试什么,立方体的颜色是灰色的)但不是圆柱形天线。 (这些测试都不在存储库中,因为我无法提交不起作用的东西。)

基本上我需要帮助处理材料属性并设置一些基本照明来测试它们(测试照明是暂时的,因为我的一个队友正在进行照明)。

如果有人可以帮我解决这个问题,我真的很感激。

项目信息:

  • Repository for our project(Visual Studio 2010项目)
  • 地图/网格位于xz平面上,y为高度
  • 一切都是使用glCubes或过剩形状完成的,所以不需要为那些定义法线,只有一些瓷砖和数字4到处都是使用gl_quads

如果我遗漏了任何内容或者您需要更多信息,请询问!

1 个答案:

答案 0 :(得分:2)

我将帮助您了解OpenGL中闪电的基础知识...首先您需要启用和设置灯光,所以,这里有一些例子:

    void setlight(){
            //here you set the lights and parameters, example with one light
            float LightAmbient[] = { 0.1f, 0.1f, 0.05f, 1.0f };
            float LightEmission[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightDiffuse[] = { 1.0f, 1.0f, 0.8f, 1.0f };
            float LightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float LightDirection[]={-0.5f, -0.5f, -0.5f};
            glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
            glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
            glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
            glLightfv(GL_LIGHT0, GL_POSITION, LightDirection);
            glEnable(GL_LIGHTING);
            glEnable(GL_LIGHT0);
    }
    void setmaterial(){
            //here you set materials, you must declare each one of the colors global or locally like this:
            float MatAmbient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
            float MatDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
            float MatSpecular[] = { 0.1f, 0.1f, 0.0f, 0.1f };
            float MatShininess = 60;
            float black[] = {0.0f,0.0f,0.0f,1.0f};
            glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MatAmbient);
            glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MatDiffuse);
            glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, MatSpecular);
            glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, MatShininess);
            glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black);
    }
    void render(){
            //your render function
            //clean buffers, set viewport, projection, lookat, etc...
            . . .

            //set light and materials
            setlight();
            setmaterial();

            //draw your stuff

            . . .

            glutSwapBuffers();
    }

现在,如果您需要为不同的对象设置不同的材质来绘制,则必须在绘制它们之前为每个对象设置材质...例如:

    for(int i=0; i<num_objetcs; i++){
            setmaterial(i);
            drawobject(i);
    }

当然,你必须修改我之前写的内容......你只需要设置灯光然后为你设置材料的每个对象然后逐个绘制。你必须修改“setmaterial”函数来获取材料参数,我想你知道如何做其余的事情......祝你好运!

相关问题