Godot-3D教程-01.介绍3D
创建一个3D游戏将是个挑战,额外增加的Z坐标将使许多用于2D游戏的通用技术不再有用。为了帮助变换(transition),值得一提的是Godot将使用十分相似的API用于2D和3D。
目前许多节点是公用的在2D与3D版本中。值得查阅3D平台教程或者3D运动学角色教程几乎是与2D是相对应的。
在3D世界中,数学相较2D有一些复杂,所以在wiki查阅相关的向量数学(Vector math)将是对开发3D游戏非常有用的。
空间节点 Spatial node
2D节点(Node2D)是2d基础节点.控件( Control)是GUI中所有一切的基础节点. 如此,在3D引擎中将把空间(Spatial)做为所有3D物件的节点。
空间节点(Spatial nodes)相对于父节点(既有父节点也是继承与空间(Spatial)类型)是有自己的局部变换。这种变换(transform)近似于一个4x3 Transform,或者使用3个三维向量( Vector3)代表空间位置,欧拉旋转 (x,y与z 角度)和缩放大小.
3D内容 3D content
不像2D那样直接加载图片内容再直接绘制出来,3D将有一些难. 这些内容必须用空间三维工具(通常是DCCs)进行创建并且导出为一些指定文件格式才能导入进Godot中(3D格式并不类似于标准的图片)。
DCC 创建模型 DCC-created models
这儿有2种把3D模型导入Godot渠道。第一种通常是直接导入3D场景(Importing 3D Scenes),这种方式允许导入所有场景物件 (就像在DCC中看到的那样),包括动画,骨架,各种模型等等.
第二种是使用文档3D网格模型doc_importing_3d_meshes导入.这种方式可以使用简单的 .OBJ 文件做为网格模型的资源,可以把资源放入一个网格模型实例(MeshInstance)节点 就可以显示出来。
基本几何形状 Generated geometry
可以直接使用网格模型(Mesh)来创建自定义的几何形状,使用Mesh.add_surface()函数来创建你自己的数组。你可以找到SurfaceTool帮助类,它提供了帮助索引,生成法线,切线等一系列API。
如此,把这个可用于生成静态几何形状(不经常更新的),创建顶点数组的方法加入3D API是有益处的。
立即几何形状 Immediate geometry
为了应付经常变化的基本几何形状需求,Godot提供了一个特别的节点立即几何形状(ImmediateGeometry),它提供了一个基于OpenGL 1.x 立即模式(immediate-mode)的 API 来创建点,线,三角形等。
2D在3D 2D in 3D
Godot中包含一个强有力的2D引擎,有许多的游戏在3D环境中使用了2D。使用了固定并且不旋转的摄像机(camera) (不管是正交或者透视) ,像Sprite3D 与 AnimatedSprite3D这样的节点在创造以3D为背景的2D游戏中将有许多的优势,比如真实的视角,光阴 特效等等。
当然,缺点也是显而易见的,与普通2d相比,增加了复杂性和性能同时也下降了,并且不像在以像素为单位那样容易上手。
环境 Environment
除了可以编辑场景,环境编辑通常也是必须的。Godot提供了一个世界环境(WorldEnvironment)节点,可以改变背景颜色,模式(如天空盒),并且提供了一系列的内置的后处理特效类型。 环境同样可以在摄像机(Camera)中重写。
3D视图 3D viewport
3D场景编辑在3D选项卡。这个选项卡可以手动选择,也会在你选择空间节点(Spatial node)的时候自动的切换。
默认的3D场景导航界面样式类似于Blender(斑斓3D软件),在编辑器设置中,像其他设置一样,这些定制鼠标按钮等行为都是可以自定义的:
坐标系 Coordinate system
Godot 使用的是公制(metric) 系统来衡量一切。3D物理与其他领域对此都进行了调整,所以尝试不同的比例通常是不明智的(除非你知道你在做什么)。
当使用3D资源时,最好以正确的比例(将DCC设置为公制)开发。 Godot允许缩放后导入,而这种方法在大多数情况下有效,在少数的情况下,它可能在诸如渲染或物理等精细区域导致浮点精度问题(诸如毛发) 所以,你要确保你的美术使用了正确的比例绘制 !
Y坐标用于表示“上”,尽管许多对象需要对齐(像 灯光,摄像机,胶囊碰撞体,车辆等),Z坐标用于表示“朝向”方位。粗略的定义为如下:
- X 表示 左右
- Y 表示 上下
- Z 表示 前后
空间和操作装置 Space and manipulation gizmos
通过操纵小方块可以在3D视图中移动对象。每个坐标都用一种颜色代表:红,绿,蓝分别代表着 X,Y,Z 。这个同样也约束这网格和其他小方块 (同样用于语言着色器,排列三维向量组件,颜色,等待)。
一些有用的快捷键:
- 在移动和缩放,旋转中按S键截断运动和旋转。
- 按F建可以转到选择物体的中心。
视图菜单 View menu
可以使用“[ view ]”菜单来控制视图选项。请多注意这些窗口上的小菜单,它们常常会忽视!
默认环境 Default environment
从项目管理界面创建新项目时,3D环境有一个默认的天空盒。
考虑到物理是基于渲染工作。为了提供对象的间接反射光照,我们建议使用默认环境来开发。
摄像机 Cameras
除非场景中放置了摄像机(Camera),否则无论在三维空间中有多少物体都将不会显示出来。摄像机机可以设置为正交投影或者透视投影:
摄像机是互相关联的并且仅显示在父视图或者父父级视图。从场景树中root节点一下有一个视图,其下摄像机将被设置为默认摄像机除非还有添加了其他子视图 (无论做为渲染对象或者画中画) ,这些视图需要自己下面有子摄像机才能显示。
在处理多个摄像机时,每个视图遵循以下规则:
- 如果场景数中暂时没有摄像机,那么第一个添加的摄像机将会是激活状态。 其他被加入场景中的摄像机将被忽视(除非被设置为当前摄像机)。
- 如果摄像机设置了“current” 属性,不管场景中有多少其他摄像机只有它会被使用。如果这个属性设置了,它就会处于激活状态,替代之前的摄像机。
- 如果在场景树中移除了激活状态的摄像机,树形下排在第一的摄像机将替代之前被移除的摄像机。
光照 Lights
在Godot中没有限制光照的数量和类型。想添加多少就添加多少(只要性能允许)。
Godot-3D教程-01.介绍3D的更多相关文章
- Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
概述 在上一个教程中,我们在应用程序窗口的中心成功渲染了一个三角形. 我们没有太注意我们在顶点缓冲区中拾取的顶点位置. 在本教程中,我们将深入研究3D位置和转换的细节. 本教程的结果将是渲染到屏幕的3 ...
- Qt 3D教程(三)实现对模型材质參数的控制
Qt 3D教程(三)实现对模型材质參数的控制 蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/47131841.欢迎同行前来探讨. ...
- Codrops 优秀教程:CSS 3D Transforms 实现书本效果
这个使用 CSS 3D Transforms 实现创意书本效果的来自 Codrops 网站.你可以看到两种类型的书设计:精装书和平装书.这两个效果都可以很容易地使用 CSS 修改.赶紧体验一下吧. ...
- 【译】3D打印:介绍
原文地址:(需要翻墙)https://ordina-jworks.github.io/iot/2018/09/28/3D-Printing-Intro.html 文章发表日期:2018-09-28 第 ...
- CSS3中的2D和3D转换知识介绍
一 2D转换 转换是CSS3中具有颠覆性的特征之一,可以实现元素的位移.旋转.变形.缩放,甚至支持矩阵方式,配合即将学习的过渡和动画知识,可以取代大量之前只能靠Flash才可以实现的效果. 1.移动 ...
- [译]Vulkan教程(01)入门
[译]Vulkan教程(01)入门 接下来我将翻译(https://vulkan-tutorial.com)上的Vulkan教程.这可能是我学习Vulkan的最好方式,但不是最理想的方式. 我会用“d ...
- 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课
前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...
- 物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课
写在前面的废话: 很久没有更新文章了,这段时间一直忙于项目落地,虽然很忙,但是感觉没有总结,没有提炼的日子,总是让人感觉飘飘忽忽的. 所幸放下一些事,抽出一些时间,把近期的项目做一些整理与记录.也算是 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
随机推荐
- SpringBoot启动流程分析(四):IoC容器的初始化过程
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
// ConsoleApplication12.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" // ConsoleApplication1 ...
- js关闭浏览器事件,js关闭浏览器提示及相关函数
关于浏览器关闭事件的相关描述 有些朋友想在浏览器关闭的时候,弹出alert .confirm或者prompt等.实验证明,这种做法是失败的,原因是浏览器关闭事件自动屏蔽执行js的某些方法,从而防止恶意 ...
- 检查Nginx的配置,重载配置和重启的方法
Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的. Nginx 的参数包括有如下几个: 可以这样使用 /usr/local/n ...
- java和erlang之间的DES加解密
app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android.iOS).首先,Java端的DES加密的实现方式, 少说废话了,直接上代码,如下: public ...
- beego介绍
beego 简介 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado ...
- [Linux] 网络
如何在网络中标识一台计算机 IP 多个程序如何不冲突 通信端口 不同的计算机如何通信 协议 IP A类:0+7位网络号+24位主机号,可用网络2^7-2个,每个网络可容纳2^24-2个主机 B类:10 ...
- 计算机器内存数量+引入和显示ARDS成员
[1]README 1.1) 本代码在于读取内存中多个 内存段的地址范围描述符结构体(ARDS),有多少个内存段可以用: 1.2) source code and images in the blog ...
- MySQL 忘记密码解决办法
第一步: 关闭MySQL服务. 第二步: 打开DOS窗口,在里面输入安装MqSQL的目录本机为:C:\Program Files\MySQL\MySQL Server 5.6\bin 第三步: 在命 ...
- 关于TextView 的属性
一.设置不同的字体和颜色值:questionDesTextView=(TextView)findViewById(R.id.question_des); SpannableStringBuilder ...