材质属性帮助 Open GL 中使用 GLUT 和 C++

Material property help in Open GL using GLUT & C++

本文关键字:GLUT C++ GL 属性 帮助 Open      更新时间:2023-10-16

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

在第1部分中定义模型的材质特性。轻松定义材料可更换。具体来说,机器人部件和远程控制单元应该是"闪亮的";各种颜色的碎石桩应拆除;主平台瓷砖应该是漫射的灰色选择你自己的材料属性,并为区块、基地、工厂等正确记录它们。

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

基本上,我需要材料特性方面的帮助,并设置一些基本的照明来测试它们(测试照明是临时的,因为我的一个队友正在研究照明)。

如果有人能帮我做这部分,我将不胜感激。

项目信息:

  • 我们项目的存储库(Visual Studio 2010项目)
  • 贴图/栅格位于xz平面上,y是高度
  • 所有的事情都是使用glCubes或glut形状完成的,因此不需要为这些形状定义法线,只需要使用gl_quads来完成一些平铺和所有位置的数字4

如果我错过了什么,或者如果你需要更多信息,请询问!

我将帮助您了解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"函数来获取material参数,我想你知道剩下的该怎么办…祝你好运!