前面的课程中,太阳只是以光源的身份出现,现在我们希望太阳走上前台,让我们能够看到。不过,这就有了一个问题:月亮是靠反射光源的光才让我们看到,但太阳不是这样,它本身就发光。为了进行这种设置,我们引入3D开发中的下一个概念:材质。

材质

材质也是模型表面的一种特性,它和纹理不同,纹理只是图片,材质则定义的是质感,比如反光率、发光情况,等等。
材质+纹理+光源,三者共同决定了三维模型看起来的样子。
材质包括五种属性:

  • 环境光漫反射率(Ambient)
  • 方向光(环境光之外的其它三种光)漫反射率(Diffuse)
  • 方向光镜面反射率(Specular)
  • 闪光程度(Shininess):光斑大小
  • 发光率(Emission)

通过精细地调整这几个参数,可以让模型呈现不同的材质特点。未设置材质的模型,看起来基本就像是石膏制造的:没有镜面反射、不发光、环境光和方向光全部都以漫反射的形式发出来。这种特点还是比较适合月亮的材质。
至于太阳,我们也不关心它的反射情况,只是设置它的发光。

sunMaterial = panda3d.core.Material()
sunMaterial.setEmission((1, 1, 1, 1))
self.sun.setMaterial(sunMaterial)

我们设置太阳发光率在RGB三种颜色都是100%(1)

日食的原理

为了观察日食,我们让太阳和光源一起运动。正如我们从天文知识了解的,新月状态下才会发生日食,即月亮遮挡太阳。

在地球上,由于观察角度的不同,日食并不经常出现。但在3D模型中,我们可以在每次新月都看到日食。通过设置日月大小比例的细微变化,我们可以选择看到日环食和日全食两种模式。

        # 环食self.sun.setScale(3.1)# 全食# self.sun.setScale(2.5)

运动控制

既然我们的关注点是日食,我们就希望在日食发生的时候,运动速度慢一些,过了之后,速度可以快一点。我们用日月距离作为速度调整的依据。

        a= self.sun.getPos()b= self.moon.getPos()x= (a[0]-b[0])**2+(a[1]-b[1])**2+(a[2]-b[2])**2if x<1610:speed= 0.2elif x<1760:speed= 2else:speed= 20speed= 20

确定了速度之后,我们来计算角度,这次,就不能使用task.time了,因为task.time是一个全局时间,只适合匀速运动。我们使用globalClock.getDt()函数,可以取到每次的间隔时间,对于变速运动是非常合适的。

        delta = globalClock.getDt()self.angle+= delta * speed

日食的形成,python3D编程:材质相关推荐

  1. 虚幻4皮肤材质_虚幻4渲染编程(材质编辑器篇)【第六卷:各向异性材质amp;玻璃材质】...

    My blog directory: YivanLee:专题概述及目录​zhuanlan.zhihu.com Introduction: 各向异性材质 玻璃材质 材质编辑器篇的很多效果都非常简单,可以 ...

  2. 虚幻4渲染编程(材质编辑器篇)【第三卷:正式准备开始材质开发】

    My blog directory: YivanLee:专题概述及目录 Introduction: 前面两章我们已经完成了对工具的研究,下面我们久正式开始启程啦!后面的内容可能就比较美术了. 还是老规 ...

  3. 虚幻4渲染编程(材质编辑器篇)【第五卷:布料,丝绸纱皮革棉】

    My blog directory: 小IVan:专题概述及目录 Introduction: 现在的游戏对质感要求越来越高(我估计是硬件越来越好,可编程管线越来越来越完善).游戏的画面已经越来越接近影 ...

  4. Ogre – 材质脚本(三) (转)

    我的评论:这篇转载大体内容不错,但有些错误地方,如:对矩阵的行主列主的说明有问题,其他都不错,矩阵的行主列主仅针对输入数据的顺序,和与向量左乘右乘没关系 转载自: http://www.zyh1690 ...

  5. 虚幻引擎之自定义着色模型(ShadingModel)

    虚幻引擎之自定义着色模型(ShadingModel) 文章目录 虚幻引擎之自定义着色模型(ShadingModel) 一.前言 二.着色模型 2.1 材质输入 2.2 模型浅析 2.2.1 Defau ...

  6. UE4渲染管线学习笔记

    菜鸡入门学习笔记,各种不足还请大佬指点 CSDN传上来的图会变糊,将就看了只有,理解就行.. 个人比较推荐的学习顺序: 1.UE官方渲染介绍: Epic Games 2.UE是如何渲染一帧的: 原文 ...

  7. 社区 | 虚幻周报 20190528 - 20190607

    本公众号[游戏开发那些事]之后会不定期的转载虚幻引擎社区的相关文章,关注或使用UE4的朋友不要错过! 本次周报里面有相当多的干货,包括UnrealOpenDay 2019的现场视频.官方PPT以及最新 ...

  8. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  9. 编程实践--决策树分类算法--隐形眼镜材质分类

    第二个自己亲手敲出来的机器学习算法~ 任务描述: 数据集来自:<机器学习实战> 手写数字识别任务 决策树算法 思路: (1)计算信息增益,得到每一步的最好特征. (2)树结构. 数据集及代 ...

最新文章

  1. 在MFC中使用AFXBEGINTHREAD的方法
  2. View.Post () 的身世大揭秘
  3. web前端网页设计作业_网页前端设计快速入门技巧
  4. HTML5 + CSS 左右排版自适应高
  5. stm8s103k3 周期 捕获_STM8S103K3 - 主流基本型系列8位MCU,具有8 KB Flash、16 MHz CPU和集成EEPROM - STMicroelectronics...
  6. 共享上网 路由器设置图解
  7. .NET也内卷了,BAT大厂近日上演抢人大战!
  8. 【logstash】logstash monitor
  9. 来来来!Java这些高端技术只有你还不知道
  10. 苹果电脑如何使用Tuxera NTFS for mac抹掉NTFS格式
  11. 为什么阿里强制 boolean 类型变量不能使用 is 开头
  12. 在线表格 x-spreadsheet(web excel)1.0.14 发布
  13. (算法)C语言得到两个升序序列的中位数
  14. Mstar 648 平台遥控器/按键包POWER键配置
  15. 关于schema文档
  16. 仿QQ写的chrome浏览器插件.
  17. 【WC2013】糖果公园 树上莫队
  18. 并发策略-CAS算法
  19. 基于Flask实现Layui表格分页功能
  20. 求职迷茫?看看这篇为你准备的求职指北吧!

热门文章

  1. 以智能化为基座,城市安全发展驶入快车道
  2. 荣耀9i 鸿蒙,荣耀9i深度评测:超美千元机 高颜值美拍担当
  3. 【转】OPPO A77保持应用后台运行方法
  4. V2X的基本概念和相关名词解释
  5. 2020清华大学计算机912跨考经验
  6. 为了更好地了解植物,这些识别植物的软件值得一试
  7. iOS入门、还是老手,都是值得收藏的一个资源文档
  8. Java中的常用开发工具详解
  9. PB-后台Retrieve报表
  10. 小爱智能音箱使用体验:外观篇