明月当空照,python3D编程初阶:坐标、模型、纹理与光
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)
有了光源,月亮看起来就更加真实了。
明月当空照,python3D编程初阶:坐标、模型、纹理与光相关推荐
- 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...
[初阶]unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流 一.关于 显示分数时,如何让函数之间相互交流 这是一个非常好的逻辑问题 1 思路:主 ...
- 【C初阶】C初阶考试题
⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏+留言 ⭐系列专栏:C语言初阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记五:初阶绘图(附PPT链接)
初阶绘图 前言 一.基础绘图 1.plot() 绘制二维线图 2.legend()添加图例 3.title()和*label()添加标题与坐标轴 4.text()和annotation()增加注解 二 ...
- Matlab学习(台大郭彦甫)第5节-初阶绘图
Matlab学习(台大郭彦甫)第5节-初阶绘图 第5节 初阶绘图 5.1 基础绘图 5.1.1 plot()函数 5.1.2 hold on/off 5.1.3 Plot Style(绘图风格) 5. ...
- C语言初阶作业题-数组
C语言初阶作业题-数组 一.选择题 1.关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5 ...
- C语言初阶_初识C语言(1)
凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...
- 五十分钟带你看遍C语言初阶语法(总纲)
C语言初阶语法(总纲) 此篇博客包含了前面C语言所有的基础语法,写这一期的博客不仅是为了记录自己的学习成果也是为了让更多的朋友能学到对自己有用的知识,如果总有一个知识点帮助到了你,给卑微博主点点关注加 ...
- R语言学习笔记——入门篇:第三章-图形初阶
R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...
- Matlab初阶绘图(2022b)
Matlab初阶绘图(2022b) 绘图函数 plot( ) & others plot(x,y) plots each vector pairs (x,y) plot(y) plots ea ...
- 《JavaEE初阶》Tomcat
<JavaEE初阶>Tomcat 文章目录 <JavaEE初阶>Tomcat Tomcat是什么 下载Tomcat 简单介绍Tomcat的文件 使用tomcat部署静态页面 启 ...
最新文章
- 一次向svn中增加所有新增文件 svn add all new files【转】
- IOS基本数据类型之枚举
- MVC中validateRequest=false不起作用
- jquery 简单分页插件jQuerypage
- Linux快速复制或删除大量小文件
- 华为云EI人脸识别接口初探
- java基础知识点(1)——计算机的基础-计算机语言
- 理解setState(),异步还是同步?
- 目标检测——知识蒸馏的学习笔记
- linux各文件夹的作用
- Ubuntu 9.10 ati HD 3470 显卡驱动 搞定
- javascript窗口属性示意图
- 计算机保研夏令营英语面试,保研经验 | 夏令营面试那些事儿(内含视频)
- 如何防止网站静态文件被挂马
- iPhone密码管理
- 移动开发需要关心的热门技术(1)
- spectral clustering谱聚类论文解读(上)
- 【数据库系统】第一部分 数据库基础(4) 数据库安全性
- 2022年青海最新建筑八大员(土建)模拟考试题库及答案
- C#内存释放(垃圾回收)
热门文章
- html文本框中加入跑马灯,CSS html文字的跑马灯(流光)特效
- matlab解微分方程例子,MATLAB解微分方程 [轉] | 學步園
- 减法公式运算法则_小学所有的运算定律和什么叫加法什么叫减法,乘法a+b=c什么的公式也要...
- 解剖RISC-V架构(一)
- python分隔符的使用_使用python处理分隔符
- RedHat9上安装Oracle9i手记(原作:hotman_x)
- 关于Android P Auto锁屏Global.DEVICE_PROVISIONED
- python判断性别_惊呆|根据三围数据判断出用户性别竟是python使用逻辑回归算法搞的鬼!...
- 在腾讯,有多少技术Leader在写代码?
- AR客户对账单(上月欠款)