说明

如果非常清楚的知道物体的材质,并且能够在OpenGL的材质表中找到合乎要求的参数设置,就可以避免指定物体的颜色值,某些情况下,指定物体的渲染颜色,使得物体的实际效果大打折扣

{

glPushMatrix();

glTranslatef(1.0, 0.0, 0.0);

//黄铜

GLfloat mat_ambient[] = { 0.021500, 0.174500, 0.021500, 0.550000};

GLfloat mat_diffuse[] = { 0.075680, 0.614240, 0.075680, 0.550000};

GLfloat mat_specular[] = { 0.633000, 0.727811, 0.633000, 0.550000 };

GLfloat mat_shininess[] = { 76.800003}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

glPopMatrix();

glFlush ();

}

{

glPushMatrix();

glTranslatef(-1.0, 0.0, 0.0);

//翡翠绿

GLfloat mat_ambient[] = {  0.247250, 0.199500, 0.074500, 1.000000};

GLfloat mat_diffuse[] = { 0.751640, 0.606480, 0.226480, 1.000000};

GLfloat mat_specular[] = { 0.628281, 0.555802, 0.366065, 1.000000 };

GLfloat mat_shininess[] = { 51.200001}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

glPopMatrix();

}

材质表

//黄铜

0.329412, 0.223529, 0.027451, 1.000000,

0.780392, 0.568627, 0.113725, 1.000000,

0.992157, 0.941176, 0.807843, 1.000000,

27.897400,

//青铜

0.212500, 0.127500, 0.054000, 1.000000,

0.714000, 0.428400, 0.181440, 1.000000,

0.393548, 0.271906, 0.166721, 1.000000,

25.600000,

//亮青铜

0.250000, 0.148000, 0.064750, 1.000000,

0.400000, 0.236800, 0.103600, 1.000000,

0.774597, 0.458561, 0.200621, 1.000000,

76.800003,

//铬

0.250000, 0.250000, 0.250000, 1.000000,

0.400000, 0.400000, 0.400000, 1.000000,

0.774597, 0.774597, 0.774597, 1.000000,

76.800003,

//铜

0.191250, 0.073500, 0.022500, 1.000000,

0.703800, 0.270480, 0.082800, 1.000000,

0.256777, 0.137622, 0.086014, 1.000000,

12.800000,

//亮铜

0.229500, 0.088250, 0.027500, 1.000000,

0.550800, 0.211800, 0.066000, 1.000000,

0.580594, 0.223257, 0.069570, 1.000000,

51.200001,

//金

0.247250, 0.199500, 0.074500, 1.000000,

0.751640, 0.606480, 0.226480, 1.000000,

0.628281, 0.555802, 0.366065, 1.000000,

51.200001,

//亮金

0.247250, 0.224500, 0.064500, 1.000000,

0.346150, 0.314300, 0.090300, 1.000000,

0.797357, 0.723991, 0.208006, 1.000000,

83.199997,

//白蜡

0.105882, 0.058824, 0.113725, 1.000000,

0.427451, 0.470588, 0.541176, 1.000000,

0.333333, 0.333333, 0.521569, 1.000000,

9.846150,

//银

0.192250, 0.192250, 0.192250, 1.000000,

0.507540, 0.507540, 0.507540, 1.000000,

0.508273, 0.508273, 0.508273, 1.000000,

51.200001,

//亮银色

0.231250, 0.231250, 0.231250, 1.000000,

0.277500, 0.277500, 0.277500, 1.000000,

0.773911, 0.773911, 0.773911, 1.000000,

89.599998,

//翡翠、祖母绿

0.021500, 0.174500, 0.021500, 0.550000,

0.075680, 0.614240, 0.075680, 0.550000,

0.633000, 0.727811, 0.633000, 0.550000,

76.800003,

//碧玉

0.135000, 0.222500, 0.157500, 0.950000,

0.540000, 0.890000, 0.630000, 0.950000,

0.316228, 0.316228, 0.316228, 0.950000,

12.800000,

//黑曜石

0.053750, 0.050000, 0.066250, 0.820000,

0.182750, 0.170000, 0.225250, 0.820000,

0.332741, 0.328634, 0.346435, 0.820000,

38.400002,

//珍珠

0.250000, 0.207250, 0.207250, 0.922000,

1.000000, 0.829000, 0.829000, 0.922000,

0.296648, 0.296648, 0.296648, 0.922000,

11.264000,

//红宝石

0.174500, 0.011750, 0.011750, 0.550000,

0.614240, 0.041360, 0.041360, 0.550000,

0.727811, 0.626959, 0.626959, 0.550000,

76.800003,

//绿宝石、绿松石

0.100000, 0.187250, 0.174500, 0.800000,

0.396000, 0.741510, 0.691020, 0.800000,

0.297254, 0.308290, 0.306678, 0.800000,

12.800000,

//黑塑料

0.000000, 0.000000, 0.000000, 1.000000,

0.010000, 0.010000, 0.010000, 1.000000,

0.500000, 0.500000, 0.500000, 1.000000,

32.000000,

//黑橡胶

0.020000, 0.020000, 0.020000, 1.000000,

0.010000, 0.010000, 0.010000, 1.000000,

0.400000, 0.400000, 0.400000, 1.000000,

10.000000,

//紫罗兰

0.110000, 0.060000, 0.090000, 1.000000,

0.430000, 0.470000, 0.540000, 1.000000,

0.330000, 0.330000, 0.520000, 1.000000,

22.000000

代码

# include < GL/glut.h >

/* 初始化材料属性、光源属性、光照模型,打开深度缓冲区等 */

void init(void)

{

GLfloat light_position [ ] = { 0., 1.5, 1.5, 0.0 };

glClearColor ( 0.0, 0.0, 1.0, 0.0 ); //设置背景色为蓝色

glShadeModel ( GL_SMOOTH );

glLightfv ( GL_LIGHT0, GL_POSITION, light_position);

glEnable (GL_LIGHTING);

glEnable (GL_LIGHT0);

glEnable (GL_DEPTH_TEST);

}

/*调用 GLUT 函数,绘制一个球*/

void display ( void )

{

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

{

glPushMatrix();

glTranslatef(1.0, 0.0, 0.0);

GLfloat mat_ambient[] = { 0.021500, 0.174500, 0.021500, 0.550000};

GLfloat mat_diffuse[] = { 0.075680, 0.614240, 0.075680, 0.550000};

GLfloat mat_specular[] = { 0.633000, 0.727811, 0.633000, 0.550000 };

GLfloat mat_shininess[] = { 76.800003}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

glPopMatrix();

glFlush ();

}

{

glPushMatrix();

glTranslatef(-1.0, 0.0, 0.0);

GLfloat mat_ambient[] = {  0.247250, 0.199500, 0.074500, 1.000000};

GLfloat mat_diffuse[] = { 0.751640, 0.606480, 0.226480, 1.000000};

GLfloat mat_specular[] = { 0.628281, 0.555802, 0.366065, 1.000000 };

GLfloat mat_shininess[] = { 51.200001}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

glPopMatrix();

}

glFlush ();

}

/* 定义 GLUT 的 reshape 函数,w、h 分别是输出图形的窗口的宽和高*/

void reshape (int w, int h)

{

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ( );

if (w <= h)

glOrtho (-1.5, 1.5, -1.5 * ( GLfloat ) h / ( GLfloat ) w,

1.5* ( GLfloat ) h / ( GLfloat ) w, -10.0, 10.0 ); //创建平行视景体

else

glOrtho (-1.5 * ( GLfloat ) w / ( GLfloat ) h,1.5 * ( GLfloat )

w/( GLfloat ) h, -1.5, 1.5, -10.0, 10.0);

glMatrixMode ( GL_MODELVIEW );

glLoadIdentity ( ) ;

}

int main(int argc, char** argv)

{

glutInit (&argc, argv);     // GLUT 环境初始化

glutInitDisplayMode (GLUT_SINGLE |GLUT_RGB |GLUT_DEPTH); // 显示模式初始化

glutInitWindowSize (300, 300);       // 定义窗口大小

glutInitWindowPosition (100, 100);   // 定义窗口位置

glutCreateWindow ( argv [ 0 ] );   // 显示窗口,窗口标题为执行函数名

init( );

glutDisplayFunc ( display );  // 注册 OpenGL 绘图函数(一种特殊的调用方式,下同)

glutReshapeFunc ( reshape );   // 注册窗口大小改变时的响应函数

glutMainLoop( );      // 进入 GLUT 消息循环,开始执行程序

return 0;

}

注意

值得一提的是glutSolidSphere 必须在指定变换矩阵和设置好材料属性之后,才应该被调用,否则在设置各种属性之前调用glutSolidSphere ,会出现其他的异常

例如

{

glPushMatrix();

glTranslatef(1.0, 0.0, 0.0);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

GLfloat mat_ambient[] = { 0.021500, 0.174500, 0.021500, 0.550000};

GLfloat mat_diffuse[] = { 0.075680, 0.614240, 0.075680, 0.550000};

GLfloat mat_specular[] = { 0.633000, 0.727811, 0.633000, 0.550000 };

GLfloat mat_shininess[] = { 76.800003}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glPopMatrix();

glFlush ();

}

{

glPushMatrix();

glTranslatef(-1.0, 0.0, 0.0);

glutSolidSphere (1.0, 40, 50);    //半径为 1,40 条纬线,50 条经线

GLfloat mat_ambient[] = {  0.247250, 0.199500, 0.074500, 1.000000};

GLfloat mat_diffuse[] = { 0.751640, 0.606480, 0.226480, 1.000000};

GLfloat mat_specular[] = { 0.628281, 0.555802, 0.366065, 1.000000 };

GLfloat mat_shininess[] = { 51.200001}; //材质RGBA镜面指数,数值在0~128范围内

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glPopMatrix();

}

左右两个球的颜色刚好换掉

OpenGL glMaterialfv材质设置 用例相关推荐

  1. 【OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )

    文章目录 一.模型准备 二.光照设置 1.启用光照设置 2.启用光源 3.设置光照参数 4.设置环境光 5.设置反射材质 三.光照法线设置 1.设置光源位置 2.设置法线 3.代码示例及运行效果 四. ...

  2. freeglut_光照设置_材质设置_笔记与心得

    详细记录下最近被老师和师兄掐着脖子撵着做的OPENGL显示和鼠标键盘交互,突然意识到软件著作权不会查重,并且最终的是MFC+OPENGL的模式,和单独opengl代码是不同的~那我就放心开源了~ (1 ...

  3. C++ opengl 对OpenGL中矩阵设置的初步认识

    对OpenGL中矩阵设置的初步认识: 在入门级的代码里面,通常在初始化OpenGL中可以看到这样的代码: void init(){glMatrixMode(GL_PROJECTION);gluPers ...

  4. 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    文章目录 一.向 Unity 中添加 FBX 模型 二.向 Scene 场景中添加 FBX 模型 三.3D 物体渲染 四.3D 物体材质设置 一.向 Unity 中添加 FBX 模型 Unity 中使 ...

  5. 初学者必读VRay 2.0材质设置(1)——VRay材质设置基础

    教程出处:http://www.tlvi.net/Ms/Show_297.html VRay材质部分,是VRay 2.0重要的组成元素,其具有专门的材质和贴图类型,以适应VRay渲染器,从本实例开始, ...

  6. 初学者必读VRay 2.0材质设置(4)——设置折射材质

    教程出处:http://www.tlvi.net/Ms/Show_304.html 玻璃类的折射材质,是一种常见的材质类型,在本实例中,将为大家讲解玻璃类具有折射属性的材质设置方法,在制作实例之前,大 ...

  7. OpenGL ES 纹理设置

    纹理过滤 纹理采样 最近点采样 线性纹理采样 MIPMAP纹理 纹理过滤 纹理拉伸:重复拉伸和截取拉伸 用于指定纹理坐标超过(00.0,1.0)范围时所发生的行为,使用glTexParameterf函 ...

  8. UE4 动态材质设置

    UE4的话,有3种材质: 1-材质(Material) 2-材质实例(Material Instance) 3-动态材质(Dynamic Material Instance ) (1)如何从材质创建材 ...

  9. 系统注册表常用设置100例

    1 修改窗口滚动条的大小(Windows 9x/2000/XP)(1)打开注册表编辑器。(这一步以后就不说了^-^) (2)打开HKEY_CURRENT_USER\Control Panel\Desk ...

最新文章

  1. 从FCKEDITOR到ckeditor(二) 撰写自定义对话框,增加数学公式(与webEq的结合)
  2. 数字货币 分层确定性钱包(HD Wallets)
  3. 史上最全,100+大数据开源处理工具汇总
  4. word 公式编号 右侧对齐_写论文要求公式居中编号右对齐的方法
  5. 工作265:v-model实现原理 自定义组件使用v-model
  6. Eclipse安装ADT失败解决办法
  7. 20190530本科教学PPT 文本挖掘的两种基本方法(TF-IDF和LDA)
  8. 51nod 1686 第K大区间 二分瞎搞
  9. hdu 1242 Rescue(BFS入门)
  10. 喜庆:上周阅读量5W,超过了99%的C友
  11. Flink 异步IO
  12. Xshell5(远程终端工具)工具的安装使用 【免费】
  13. 微信新版本文件乱保存自用解决方法
  14. 冰汽朋克侦查机器人_冰汽时代困难难度机器人流玩法心得 寒霜朋克困难难度怎么玩...
  15. 实例化Servlet类异常404、500错误-解决方法
  16. 做视频类网站如何选择云服务器?
  17. 《科研诚信与学术规范》参考答案最新版
  18. SZTUOJ 1025.怪物入侵
  19. 程序猿的自救 从零备考NSCA/CSCS 1 身体系统的构造与系统
  20. unity粗体字+android,[Unity] UGUI加粗字体小记

热门文章

  1. 数字规律问题--面试题43、44、45、62
  2. 期末离散数学前三章关键知识点整理——应试。
  3. CSRF(跨站请求伪造攻击)详解以及防护之道
  4. DEVONthink + Notion 搭建一个完美的知识管理体系
  5. 那些年,你与快递小哥的爱恨情仇...
  6. Win10安装CUDA和cuDNN教程
  7. python中cv是什么_python里面cv是什么意思
  8. 四旋翼自主飞行器探测跟踪系统补充
  9. iPhone十周年撞上华为AI芯片 谁更有看头?
  10. 分析电路中三极管的作用 (入门)