明月当空照,python3D编程初阶:坐标、模型、纹理与光

您所在的位置:网站首页 python3d建模 明月当空照,python3D编程初阶:坐标、模型、纹理与光

明月当空照,python3D编程初阶:坐标、模型、纹理与光

2023-05-07 07:40| 来源: 网络整理| 查看: 265

Panda3D是由迪士尼参与维护的一个3d游戏引擎,本意是面向商业用户的,所以它的性能是很不错的,使用也很方便。Panda3D支持通过c++或python的开发。 安装Panda3D的最好办法就是直接去官方网站(panda3d.org)下载对应的安装包。在这里插入图片描述

3D开发并不难,只是有一些基本概念必须掌握,我们将一边学习3D开发,一般复习天文知识。今天先介绍这几个概念:坐标、模型、纹理与光。

坐标

二维系统中也有坐标,2根轴;3D下当然就是三维坐标,3根轴。panda3D中的坐标原则是屏幕的水平方向是X轴,垂直方向是Z轴,而穿透屏幕的方向是Y轴。这样设计与直接的观感还是接近的,当我们理解面对的是三维物体时,会倾向于把XY屏幕水平放置,而Z轴竖直。

模型

我们先看一个简单的模型:球。 其实球并不简单,一个球是由很多小平面拼接而成的,只是它的观感给人以简单的感觉。 载入一个球的模型,并把它放到世界中显示:

self.moon = loader.loadModel("sphere") self.moon.reparentTo(render) self.moon.setPos(0,20,3)

setPos函数,把球放在一个三维坐标上(0,20,3)。为什么放在这里,与相机的默认位置有关,放在这里可以让我们不用动相机就能看到它。相机同样是3D编程的核心概念,我们后面的课程中再讲。 只需这样三行核心代码(完整代码8行),再加上足够的想象力,就可以让我们看到这轮明月了。

纹理

其实只是一个石膏模型,怎么能说它是月亮呢?给它加一个贴图就会好一些。贴图,在3D编程中被称作纹理。

self.moon_tex = loader.loadTexture("moon_1k_tex.jpg") self.moon.setTexture(self.moon_tex, 1)

这样两行代码,就可以给这个球星加上月亮的纹理。在这里插入图片描述

纹理文件的本身是这样的:在这里插入图片描述

它是按照球形的规则贴在模型上的,这个规则是由模型指定的。制作模型是更加复杂的事,我们先学会怎么用它们就好了。

加上纹理之后的月亮,仍然显得不那么立体。我们看到的物体,其实是物体表面的反光形成的。而三维立体的感觉,正是来自三维物体不同位置上反光的差别。前面的例子中没有设置光源,使用了panda3d中默认的光源,那是平淡的背景光,在这样的光线效果下,很难表现出立体效果。 panda3d内置4种光源:

点光源:它的原型是电灯泡,特点是有位置,无方向。平行光源:它的原型是太阳光,特点是无位置,有方向。聚光灯光源:它的原型是探照灯,特点是有位置,有方向。背景光:它的原型是漫反射光,特点是无位置,无方向。

正如我们已经看到的,背景光无法体现立体效果,在3D编程中一般来说只能作为一种补光存在,在没有其它光源照射的地方,靠背景光进行补光。如果没有背景光,看起来就是全黑的,这正好符合我们的天文研究。 让我们把这里最恰当的光源——太阳光加上,再来看看效果。 用下面这三行代码,即可加上平行光:

sunlight = panda3d.core.DirectionalLight('plight') self.light = render.attachNewNode(sunlight) render.setLight(self.light)

有了光源,月亮看起来就更加真实了。在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3