日食的形成,python3D编程:材质

前面的课程中,太阳只是以光源的身份出现,现在我们希望太阳走上前台,让我们能够看到。不过,这就有了一个问题:月亮是靠反射光源的光才让我们看到,但太阳不是这样,它本身就发光。为了进行这种设置,我们引入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])**2
        if x<1610:
            speed= 0.2
        elif x<1760:
            speed= 2
        else:
            speed= 20
        speed= 20

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值