认识panda3d点光源

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识panda3d点光源相关的知识,希望对你有一定的参考价值。

PointLight
    点光源仿真了空间中的单个点,光从该点发出,向各个方向射出。
    点光源的位置比较重要,方向无关紧要。
    为点光源衰减提供了一个二次多项式计算函数。

from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import Point3
from panda3d.core import PointLight
from panda3d.core import LPoint3, LVector3

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        # 禁用鼠标
        self.disableMouse()
        # 载入环境模型
        self.environ = self.loader.loadModel("models/zaotai")
        # 设置环境模型的父实例
        self.environ.reparentTo(self.render)

        self.lightpivot = render.attachNewNode("lightpivot")
        self.lightpivot.setPos(0, 0, 25)
        # self.lightpivot.hprInterval(10, LPoint3(360, 0, 0)).loop()
        plight = PointLight('plight')
        plight.setColor((0, 1, 0, 1))
        plight.setAttenuation(LVector3(0.7, 0.005, 0))
        plnp = self.lightpivot.attachNewNode(plight)
        plnp.setPos(45, 0, 0)
        self.environ.setLight(plnp)

        # 对模型进行比例及位置调整
        self.environ.setScale(2.0, 2.0, 2.0)
        self.environ.setPos(1, 42, 0)
        # 通知任务管理器调用SpinCameraTask控制相机
        # self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")        

    def spinCameraTask(self, task):
        angleDegrees = task.time * 6.0
        angleRadians = angleDegrees * (pi / 180.0)
        self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3)
        self.camera.setHpr(angleDegrees, 0, 0)
        return Task.cont
          
app = MyApp()
app.run()

        self.lightpivot = render.attachNewNode("lightpivot") //在场景添加一个节点;
        self.lightpivot.setPos(0, 0, 25)   //设置节点位置;
        # self.lightpivot.hprInterval(10, LPoint3(360, 0, 0)).loop()  //点光源位置循环变化;
        plight = PointLight('plight')   //定义一个点光源;
        plight.setColor((0, 1, 0, 1))   // 点光源颜色;
        plight.setAttenuation(LVector3(0.7, 0.005, 0))   //点光源衰减;  0-二次项,0.005-一次项,0.7-常数项;
        plnp = self.lightpivot.attachNewNode(plight)   //点光源放入定义的节点;
        plnp.setPos(45, 0, 0)  // 点光源位置;
        self.environ.setLight(plnp)  // 点光源加入场景;

手册说;
PointLight 类
基类是: LightLensNode

    A light originating from a single point in space, and shining in all directions.
    在空间从一个单点发出的光,照射到所有方向;

shining
a:明亮,炯炯,亮铮铮
v:辉耀,照射,发光

以上是关于认识panda3d点光源的主要内容,如果未能解决你的问题,请参考以下文章

认识Panda3D引擎bam相关命令

[激光原理与应用-35]:《光电检测技术-2》- 光学测量基础 - 认识光源

unity3d 点光源不亮

点光源随相机移动

ShaderLab学习小结(十四)点光源问题

WebGL使用点光源照明(WebGL进阶06)