位置: 编程技术 - 正文

5.2光源

编辑:rootadmin

推荐整理分享5.2光源,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在OpenGL中,仅仅支持有限数量的光源。 使用GL_LIGHT0表示第0号光源,GL_LIGHT1表示第1号光源,依次类推.OpenGL至少会支持8个光源,即GL_LIGHT0到GL_LIGHT7。

使用glEnable函数可以开启它们。例如,glEnable(GL_LIGHT0);可以开启第0号光源。 使用glDisable函数则可以关闭光源。例如,glDisable(GL_LIGHT0);可以关闭第0号光源。

一些OpenGL实现可能支持更多数量的光源,但总的来说,开启过多的光源将会导致程序运行速度的严重下降。

设置光源的属性 glLightfv (GLenum light, GLenum pname, const GLfloat *params);

light参数指明是设置哪一个光源的属性 pname参数指明是设置该光源的哪一个属性 *params参数指明把该属性值设置成多少

例如:

下面介绍具体的属性(pname和其对应的*params):

(1)GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR属性。

这三个属性表示了光源所发出的光的反射特性(以及颜色)。 每个属性由四个值表示,分别代表了颜色的R, G, B, A值。

GL_AMBIENT,环境光,表示该光源所发出的光,经过非常多次的反射后,最终遗留在整个光照环境中的强度(颜色)。 GL_DIFFUSE,漫反射光表示该光源所发出的光,照射到粗糙表面时经过漫反射,所得到的光的强度(颜色) GL_SPECULAR,镜面反射光表示该光源所发出的光,照射到光滑表面时经过镜面反射,所得到的光的强度(颜色)。

5.2光源

(2)GL_POSITION属性。

表示光源所在的位置。 由四个值(X, Y, Z, W)表示。

如果第四个值W为零,则表示该光源位于无限远处,前三个值表示了它所在的方向。这种光源称为方向性光源,通常,太阳可以近似的被认为是方向性光源。

如果第四个值W不为零,则X/W, Y/W, Z/W表示了光源的位置。这种光源称为位置性光源。 对于位置性光源,设置其位置与设置多边形顶点的方式相似,各种矩阵变换函数例如:glTranslate*、glRotate*等在这里也同样有效。

方向性光源在计算时比位置性光源快了不少,因此,在视觉效果允许的情况下,应该尽可能的使用方向性光源。

3)GL_SPOT_DIRECTION、GL_SPOT_EXPONENT、GL_SPOT_CUTOFF属性。

表示将光源作为聚光灯使用(只对位置性光源有效)。 很多光源都是向四面八方发射光线,但有时候一些光源则是只向某个方向发射,比如手电筒,只向一个较小的角度发射光线。

GL_SPOT_DIRECTION属性有三个值,表示一个向量,即光源发射的方向。 GL_SPOT_EXPONENT属性只有一个值,表示聚光的程度,为零时表示光照范围内向各方向发射的光线强度相同,为正数时表示光照向中央集中,正对发射方向的位置受到更多光照,其它位置受到较少光照。数值越大,聚光效果就越明显。 GL_SPOT_CUTOFF属性也只有一个值,表示一个角度,它是光源发射光线所覆盖角度的一半(见下图),其取值范围在0到之间,也可以取这个特殊值。取值为时表示光源发射光线覆盖度,即不使用聚光灯,向全周围发射。

(4)GL_CONSTANT_ATTENUATION、GL_LINEAR_ATTENUATION、GL_QUADRATIC_ATTENUATION属性。

这三个属性表示了光源所发出的光线的直线传播特性(只对位置性光源有效)。 现实生活中,光线的强度随着距离的增加而减弱,OpenGL把这个减弱的趋势抽象成函数:

衰减因子 = 1 / (k1 + k2 * d + k3 * k3 * d)

其中d表示距离,光线的初始强度乘以衰减因子,就得到对应距离的光线强度。 k1, k2, k3分别就是GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION。 通过设置这三个常数,就可以控制光线在传播过程中的减弱趋势。

OpenGL二十面体及多次细分成球体 绘制一个规则的二十面体,通过多边形近模拟法来构建表面。在绘制前,我们需要初始化一些数据:#defineX.//使原点到每个顶点的距离均为

opengl光照 Blinn-Phone模型与实现 这里介绍的方法,考察从光源发出的光线,这些光线与物体表面相互作用进行建模,这个方法和光线追踪类似,但是只考虑光源与表面之间的一次相互

深入理解OpenGL拾取模式(OpenGL Picking) 深入理解OpenGL拾取模式(OpenGLPicking)转自

标签: 5.2光源

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

上一篇:OpenGL三角形的双面不同颜色的绘制(opengl 三角形)

下一篇:OpenGL二十面体及多次细分成球体(正二十面体怎么建模)

  • 增值税计入成本吗?
  • 个人所得税汇算清缴截止日期
  • 房产税如何申报流程
  • 定额税改为查账征收,可以弥补上年度亏损吗
  • 发票抬头开个人可以吗
  • 劳保用品费用报销表格
  • 一般纳税人每月开票不超10万
  • 实收资本属于限定性净资产吗
  • 固定资产分期付款会计处理
  • 应交税费贷方发生额表示什么金额
  • 零申报资产负债表年初与期末数
  • 开发票利润
  • 销售发票红冲会计分录怎么做?
  • 计提物业费会计分录
  • 吸收合并控股合并新设合并的区别
  • 项目部分回款是什么意思
  • 上月未做未开票收入分录次月如何调账?
  • 公司比赛规则
  • 旧机动车交易需要哪些法定证件
  • 应交增值税进项税额月底怎么处理
  • 企业出口退税办理流程
  • 不是办税员可以去税局办事吗
  • 发票一定要房东开的才能报销吗?
  • 增值税发票地址开错了有影响吗
  • 代开的专票怎么做账?
  • 广告费和业务宣传费15%还是30%
  • 小规模纳税人增值税税率
  • 原材料采购的会计核算风险
  • 统一社会信用代码在哪里可以查询
  • 免征增值税的税额还要交个人所得税吗
  • 返利冲减收入
  • 物业公司给业主的生日祝福
  • windows 11什么时候
  • 外购的福利费要转出吗
  • 股权划转是否涉及印花税
  • php调用url
  • 固定资产备抵科目怎么填
  • 帝国cms上传视频半天没反应
  • 研发专利什么意思
  • 一般纳税人申请转为小规模纳税人
  • 企业年金管理费专票能抵扣吗
  • 购买需要安装的设备计入什么科目
  • 员工买材料报销分录
  • 招待费进项转出填表二哪里
  • 出纳excel基本技能
  • 公司还款给个人怎么操作
  • mysql 5.7.20 win64 安装及配置方法
  • 用友应收系统凭证冲销后查询不到怎么办
  • sql server数据表
  • 应收账款的注意要点
  • 运输公司发票抵扣
  • 房地产开发的土地分割
  • 应记入营业外支出的科目核算是
  • 一次性伤残补助金是单位给的还是社保给的
  • 暂估入库一直未取得发票需要调账吗
  • 可供出售金融资产是指什么
  • 技术服务费会计处理
  • 账簿设计要以()为前提
  • mysql存储引擎面试题
  • MySQL5.6下windows msi安装详细介绍
  • mysql8.0.23
  • sql cast,convert,QUOTENAME,exec 函数学习记录
  • 怎么卸载xp系统安装win7系统
  • xp系统怎样创建网络连接
  • 如何将用户加入某个组
  • 电脑任务栏中没有网络图标
  • win8系统如何关闭杀毒系统
  • centos7.4升级7.5
  • Win10预览版镜像
  • pops基本属性
  • cocos creator rpg
  • nodejs快速入门
  • 禁止指定qq号登录怎么弄
  • axios原理和实现
  • 备份系统apk
  • 个体工商户个人所得税
  • 社保申报每月几号申报
  • 出口退税申报时闿
  • 累计计税金额是怎么得出
  • 公司如何制定制度
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设