GLUT+C++在开放式GL中的材料属性帮助

GLUT+C++在开放式GL中的材料属性帮助,c++,opengl,glut,lighting,C++,Opengl,Glut,Lighting,对于OpenGL项目的照明部分,我目前正在为我的团队做这部分工作: 定义第1部分中模型的材质特性。轻松定义材质 可替换的。具体而言,机器人部件和远程控制单元应光亮; 如果颜色不同,应清除碎石堆;主平台瓷砖应为漫反射式 灰色选择您自己的材料属性,并为砌块、底座、工厂等正确记录它们 我只是尝试在控制单元上应用闪亮效果,但效果不太好。我试着加入一些照明示例,因为我们还没有加入任何照明示例,或者至少它不在存储库中进行测试。结果是控制器的立方体部分反射得太白了,不管我怎么做,立方体的颜色都是灰色的,而不是

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

定义第1部分中模型的材质特性。轻松定义材质 可替换的。具体而言,机器人部件和远程控制单元应光亮; 如果颜色不同,应清除碎石堆;主平台瓷砖应为漫反射式 灰色选择您自己的材料属性,并为砌块、底座、工厂等正确记录它们

我只是尝试在控制单元上应用闪亮效果,但效果不太好。我试着加入一些照明示例,因为我们还没有加入任何照明示例,或者至少它不在存储库中进行测试。结果是控制器的立方体部分反射得太白了,不管我怎么做,立方体的颜色都是灰色的,而不是圆柱形天线。这些测试都不在存储库中,因为我无法提交一些不起作用的测试

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

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

项目信息:

VisualStudio2010项目 地图/栅格位于xz平面上,y为高度 所有操作都是使用glCubes或glut形状来完成的,因此不需要为这些形状定义法线,只有一些平铺和数字4是使用GLU四边形完成的
如果我遗漏了什么或者你需要更多信息,请询问

我将在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参数,我想您知道接下来要做什么。。。祝你好运

项目不启用照明、不设置灯光、不设置材质参数。你到底希望发生什么?没有makefiles,vc2010项目将无法在vc2008及以下版本上打开。如果您需要他人的帮助,请在问题中添加实际的渲染代码和问题的屏幕截图。