位置: 编程技术 - 正文

OpenGL中光照的设置(一)(opengl实现光照效果)

编辑:rootadmin

推荐整理分享OpenGL中光照的设置(一)(opengl实现光照效果),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl insight,opengl环境光,opengl2.1光影,opengl光照设置,opengl 灯光,opengl 点光源,opengl环境光,opengl环境光,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL这个系列的blog是我这个小白学习的笔记。

大部分内容是摘录的,少部分内容是自己的理解。

这篇文章转载自 ambient[] = { 0.0, 0.0, 0.0, 1.0 };GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };

(2)创建光源 glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); // Setup The Ambient Light设置环境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); // Setup The Diffuse Light设置漫射光 glLightfv(GL_LIGHT1, GL_POSITION,position); // Position The Light设置光源位置

(3)启动光照和光源 glEnable(GL_LIGHTING); // 启动光照 glEnable(GL_LIGHT1); // Enable Light One启用一号光源

2.选择光照模型GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };GLfloat local_view[] = { 0.0 }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);

OpenGL中光照的设置(一)(opengl实现光照效果)

3.定义材质(1)材料属性GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat no_shininess[] = { 0.0 };GLfloat low_shininess[] = { 5.0 };GLfloat high_shininess[] = { .0 };GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};

(2)指定材料属性glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);

4.绘制物体glutSolidSphere(1.0, , );

小结:

即使用 glLightfv 设置光(环境光、散射光等等)的颜色,使用 glLightModelfv设置关照的模式,使用glMaterialfv设置物体材料的颜色。

引用OpenGL编程指南中的例子:

[cpp] view plaincopyvoid init(void) { GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 }; GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; GLfloat local_view[] = { 0.0 }; glClearColor(0.0, 0.1, 0.1, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } void display(void) { GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat no_shininess[] = { 0.0 }; GLfloat low_shininess[] = { 5.0 }; GLfloat high_shininess[] = { .0 }; GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* draw sphere in first row, first column * diffuse reflection only; no ambient or specular */ glPushMatrix(); glTranslatef (-3., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, second column * diffuse and specular reflection; low shininess; no ambient */ glPushMatrix(); glTranslatef (-1., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, third column * diffuse and specular reflection; high shininess; no ambient */ glPushMatrix(); glTranslatef (1., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, fourth column * diffuse reflection; emission; no ambient or specular reflection */ glPushMatrix(); glTranslatef (3., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, first column * ambient and diffuse reflection; no specular */ glPushMatrix(); glTranslatef (-3., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, second column * ambient, diffuse and specular reflection; low shininess */ glPushMatrix(); glTranslatef (-1., 0.0, 0.0); 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, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, third column * ambient, diffuse and specular reflection; high shininess */ glPushMatrix(); glTranslatef (1., 0.0, 0.0); 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, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, fourth column * ambient and diffuse reflection; emission; no specular */ glPushMatrix(); glTranslatef (3., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, first column * colored ambient and diffuse reflection; no specular */ glPushMatrix(); glTranslatef (-3., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, second column * colored ambient, diffuse and specular reflection; low shininess */ glPushMatrix(); glTranslatef (-1., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, third column * colored ambient, diffuse and specular reflection; high shininess */ glPushMatrix(); glTranslatef (1., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, fourth column * colored ambient and diffuse reflection; emission; no specular */ glPushMatrix(); glTranslatef (3., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= (h * 2)) glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w, 3.0*((GLfloat)h*2)/(GLfloat)w, -.0, .0); else glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2), 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -.0, .0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (, ); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc (keyboard); glutMainLoop(); return 0; }

OpenGL入门 & VS 配置使用 OpenGL gult库 GLUT(英文全写:OpenGLUtilityToolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能:定义以及控制视

OpenGL中光照的设置(二) OpenGL这个系列的blog是我这个小白学习的笔记。大部分内容是摘录的,少部分内容是自己的理解。这篇文章转载自

OpenGL--粒子系统 理论基础1,粒子系统的基本思想是用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体(一般由点或很小的多边形通过纹理贴图表示),侧重

标签: opengl实现光照效果

本文链接地址:https://www.jiuchutong.com/biancheng/369480.html 转载请保留说明!

上一篇:OpenGL中的深度缓存(opengl帧缓冲)

下一篇:OpenGL入门 & VS2012 配置使用 OpenGL gult库(opengl教程48讲)

  • 附加税做账交多了如何冲回
  • 季度所得税计提
  • 律师异地立案费用
  • 税控盘抵扣可以跨年吗
  • 综合所得减除费用标准是什么意思
  • 所得税季报中营业外收入填哪里
  • 三证合一是哪三证孩子上学
  • 什么叫备品备件
  • 增值税专用发票可以开电子发票吗
  • 季度奖需要交税吗
  • 研究开发费用的加计扣除100%
  • 车贷抵押金计入会计科目?
  • 抵押贷款买房子合适还是商业贷款合适
  • 主营业务成本计算公式是什么
  • 专利费代缴
  • 公司交的拍卖费计入哪个会计科目?
  • 已经给员工交了社保能退吗
  • 营业执照的注册地址怎么填
  • 劳务费税率公式是什么
  • 单位有临时工工资怎么发
  • 增值税发票有哪些类型
  • 企业为员工购买团体医疗险可以全额税前扣除
  • 分公司固定资产转入总公司的分录怎么做?
  • 发票进项抵扣有什么用
  • 购买法下购买成本包括
  • 公司购买模具的会计科目
  • 什么叫固定资产的确认
  • 企业残疾人保障金的缴纳标准
  • 打开我的电脑出现找不到应用程序
  • 电脑开机故障不开机
  • Mac怎么强制关闭程序
  • 苹果se和华为p9哪个好
  • 利润分配属于什么活动
  • 纳税人依法可以享受减免税待遇而没有享受的
  • 预提利息的分录怎么做
  • 小规模纳税人没有进项税
  • 鸟瞰视野
  • 小程序开发必备的东西有哪些
  • 民营医院所得税税率
  • 数据集介绍
  • 织梦栏目内容不显示
  • 企业所得税应该怎么计算
  • 判断文件是否存在,存在则删除
  • 发票临时增量好难
  • 新政府会计制度下的基建会计
  • 限额领料单属于什么凭证
  • 施工企业期间费用 企业管理费会计分录
  • 银行汇票背书
  • 在计算应纳税所得额时
  • 一般纳税人简易征收的适用范围
  • 企业所得税征收方式有哪些?
  • 税法税前扣除
  • 买一赠一怎么做账
  • 当月的进项税可以不认证吗?
  • 置换房产怎么交税
  • 突然收到财付通转出的钱
  • 小微企业可以享受六税两费吗
  • 专用发票样图
  • 土地出让金抵减销项税计算
  • 消耗性生物资产属于非流动资产吗
  • 银行结息需要开发票吗
  • 百旺金赋领回来的发票怎么读入
  • 防伪税控技术维护费
  • 废品损失的计算方法及废品损失的范围
  • sql clean
  • sql server存储过程写法
  • sql 获取字段类型
  • mysql 5.7.11 zip安装配置方法图文教程
  • 系统 启动速度慢怎么办
  • macbook硬盘中的其他
  • centos安装nmtui
  • windows where命令
  • win10安装软件点击没反应
  • react 系列
  • nodejs require
  • js移动到指定位置
  • python2与python3的区别
  • python怎么读取中文txt文本
  • 医院等级怎么查询系统
  • 增值税发票税控盘开票软件怎么下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设