如何制作三维项目

什么是三维环境?

三维环境是涉及到通用的X轴和Y轴,以及额外的Z轴的地方。Z轴是一个笛卡尔坐标轴,和X和Y轴一样,但是通常用于表示深度。在现实生活中,Z轴存在,但在Scratch中,它不存在。我们可以通过引入大小和运动来产生深度的视觉效果。

三维图形教程

在平面表面(例如计算机屏幕)上实现三维的视觉效果是通过将三维点投影到二维表面上实现的。

可以使用矩阵变换来操作三维对象。

该模型还具有“变换”,包括其平移、旋转和缩放。变换是描述形状运动的一种方式。

实现3D,首先需要计算模型在地图中的顶点位置(“世界空间”)。然后,程序员必须通过将相机的反向变换应用于点来确定世界空间坐标相对于观察者的位置。不在相机视野内的点(“剪辑空间”)可以被删除。最后,剪辑空间坐标被投影到屏幕上。

准备

您需要创建以下变量:

1.png

1(1).png

1(2).png

1(3).png

模型的顶点可以存储在列表中。

数据表示

一个模型需要一种数据表示方法。我们将“模型”定义为一个包含顶点数组和面数组的数组。每个顶点都有x、y和z分量。每个面都是一个由顶点索引组成的数组。

变换

这里是变换的代码

缩放

形状的缩放是指它的大小。例如,使用“设置大小为()”和“改变大小()”块可以扩大或缩小角色。

2.png

平移

平移是指在坐标平面上移动一个图形的过程。改变 x 值和 y 值可以平移。

旋转

旋转是指将形状旋转的平移。使用“旋转()度”积木块可以旋转精灵。

在三维环境中的旋转稍微复杂一些。它们由三个组件组成:偏航角(yaw)、俯仰角(pitch)和翻滚角(roll)。每个组件可以看作在一个轴周围施加二维旋转。

旋转使用以下三角学公式: sin(A1 + A2) = sin(A1) cos(A2) + sin(A2) cos(A1) cos(A1 + A2) = cos(A1) cos(A2) - sin(A1) sin(A2) sin(A1 - A2) = sin(A1) cos(A2) - sin(A2) cos(A1) cos(A1 - A2) = cos(A1) cos(A2) + sin(A1) sin(A2)

2D旋转

以下代码可以在二维平面上旋转精灵:

4.png

翻滚

翻滚是绕 y 轴旋转。

【图5】

俯仰

俯仰是绕 x 轴旋转。

【图6】

俯仰使用角度减法公式而不是角度加法公式,因为俯仰是顺时针旋转,而不是逆时针旋转。

偏航

偏航是绕 z 轴旋转。

【图7】

这些变换应用的顺序为:

顶点 -> 世界空间(模型变换):

缩放

旋转

平移

世界空间 -> 裁剪空间(相机变换):

平移

旋转

注意:请记住,在将相机的变换应用于世界空间坐标时,要做相反的操作。例如,如果相机的平移为(5,6,-2),则应该执行(x-5,y-6,z+2)操作。

投影

将点投影的代码如下:

【图8】

可以将该代码看作比例。

点的大小的代码如下:

要画出更大的点,请将“2D大小”乘以某个数字。

将所有内容结合起来

现在,您已经了解如何获取模型的点并计算其在计算机屏幕上的位置,请将所有内容组合在一起。

在本教程中,您将使相机在世界范围内移动。它将具有平移和旋转。应该对应用于相机的任何平移和旋转进行反向操作,以适用于世界模型。

处理顶点

这个自定义块采用模型上的一个点,并通过实现上面讨论的所有变换来计算其在屏幕上的投影位置。

【图10】

10(1).png

10(2).png

使用大小创建3D效果的示例

准备

您需要创建以下变量:

11.png

您不需要创建任何列表。

教程

此脚本使用精灵和大小更改来实现深度感知:

【图12】

“scroll x” 和 “scroll y” 变量的值可以更改,以便更改精灵的位置。 “scroll z” 变量有些特殊。它不会改变精灵的位置,但它会改变精灵的大小。

这种3D脚本的方法非常简单,它不涉及任何碰撞检测,并且不适用于移动对象。

这是制造3D幻觉的一种方式。 Scratch不允许您制作三维游戏,但允许您制作其中一个的幻觉。X轴是精灵从左到右的位置。Y轴是从上到下的位置,而Z轴是精灵的大小,允许您使精灵小或大。正如本文开头所说,我们总是可以结合大小和移动来创建3D幻觉。如果您走过一条街道,您会注意到事物越远,它们看起来越小。如果您将这个原则应用于视频游戏中,您将获得3D效果。Raycaster是在Scratch中进行3D渲染的更有效方法。

使用画笔和图层的示例

这是一种稍微更高效的制作3D效果的方法。这种技术使用了图层和图章。以下是脚本:

【图13】

这种方法不使用大小来创建3D效果。它改变精灵的位置并将其印在背景上。这会产生几个相同精灵的副本,位于不同的位置。这创造了3D效果。

标签: Scratch, Scratch编程, Scratch中国, 少儿编程, Scratch社区, Scratch编程社区, Scratch编程课程, Scratch编程教程