材质属性帮助 Open GL 中使用 GLUT 和 C++
Material property help in Open GL using GLUT & C++
对于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参数,我想你知道剩下的该怎么办…祝你好运!
相关文章:
- 使用 GLUT 使用键停止动画?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- OpenGL Glut显示功能在Mojave上显示黑屏
- GLUT 无法获得米利斯精度的时间
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 在macOS上编译GLEW和GLUT?
- 在 CLion (MacOS) 中使用 OpenGL 和 GLUT 库时出现链接错误
- 带 GLUT 的黑屏?
- 如何将整个C Glut程序编写为可以在另一个程序中调用的函数
- C++ GLUT 使对象在视口外消失
- C++ 编译器抛出 GLUT 错误
- 连接GLUT和QGLViewer的问题
- 使用 GLUT/FreeGLUT 创建核心上下文?
- 如何将 GLUT 库设置为 Clion
- OpenGL / GLUT - 许多未定义的引用
- Glut和Gnuplot窗口不同时出现
- 无法在openGL和GLUT中为我想要的确切对象设置动画
- 我试图运行OpenGL,但Glut屏幕只是呈现一个白色屏幕
- Glut计时器/空闲功能未更新
- 在GLUT中每秒产生2个敌人