位置:学校首页 > 学校动态>怎样用scratch实现3d
用scratch制作3d投影的步骤
步:在“造型”里将思思兔的造型图片按照方向一一对应,动作越复杂,所需图片越多。
第二步:设置思思兔的朝向、大小、位置。
第三步:设置重复执行动画。
第四步:见证奇迹的时刻,运行脚本,注意脚本命令之间不要有断层。
用scratch实现3D动画的方法
1. 坐标
接触过scratch的同学对于2D坐标已经非常熟悉:一个物体的x坐标代表它在屏幕左右方向的位置,y坐标代表它在上下方向的位置。Scratch规定了舞台的坐标范围分别是:x坐标范围在-240到240,y坐标范围在-180到180。
3D坐标系增加了一个z轴,其实就是2D坐标在纵深方向的扩展。红色直线代表x、y、z轴,黑色点的坐标(x,y,z)代表了它在三维立体空间中的位置。
在scratch的2D舞台上画一个四边形,我们需要知道四个顶点的坐标,然后把它们连线就可以画出来。同样道理,如果要在3D空间中画出一个物体,一个方法是知道它的所有顶点的坐标,然后把顶点用直线连起来。比如下面这个立方体,把它的8个顶点连起来就能画出来。
事实上,较复杂的3D图案和较真实的3D动画,背后都是通过这种方法画出来。当然画面细节越丰富,背后的数学模型越复杂,也需要越多的计算机资源(CPU、内存、显卡)。作为入门介绍,本文只用较基本的3D图形作为例子。
比如下面这个八面体,它有6个顶点,上半部分和下半部分分别有四个三角形。它是较简单的可以一笔画出来的多面体(上面的立方体就不能一笔画出来,而八面体可以,同学们可以思考一下为什么),比如依次连接点1-6-2-5-3-6-4-5-1-2-3-4-1就可以不重复任一条边把它画出来。
简单来说,只要我们知道了八面体的6个顶点的3D坐标,我们就能一笔过把它画出来。
2. 投射
计算机屏幕是一个2D的平面,我们通过屏幕看到的3D物体,实际上是它根据透视原理在屏幕上的一个2D投射。
原理:视点代表了观察者(眼睛或者摄像头)的位置。蓝色是一个3D物体,红色平面代表了屏幕。绿色部分就是3D物体在屏幕上的投射。在屏幕上显示一个3D物体,其实是显示它在2D平面上的投射(绿色部分)。
在屏幕上看到的一个3D物体的大小和形状,其实跟以下几个因素有关:3D物体的实际位置、视点的位置、屏幕的位置。
那3D空间某一个点投射在某个2D屏幕上的坐标是怎么计算的呢?
P代表3D空间中的一个点,设它的位置坐标值是x,y,z。现在要计算的是它在红色的代表屏幕的平面上的投射点P’的坐标值。其中O点代表视点。
两次强调,3D点的投射除了和它本身的坐标有关之外,还和视点位置、投射屏幕位置有关。这三个因素是互相影响的。忽略了任何一个因素都不能得出投射点坐标!
绿色平面代表P经过的、和红色屏幕平面平行的一个平面。线段OAB和红色以及绿色平面都垂直。为了方便计算,我们让红色平面与x轴和y轴组成的平面平行。这样,线段OAB和z轴平行(并垂直于红色及绿色平面);线段BC以及AC’与x轴平行;线段PC以及P’C’与y轴平行。
因为BC与AC’平行、PC与P’C’平行。根据相似三角形的特点,我们很容易知道:
OA /OB = AC’ / BC = P’C’ / PC
所以,如果知道:
P点坐标x,y,z
O点坐标ox,oy,oz
红色平面的z坐标值pz
则:
OA = pz – oz
OB = z – oz
BC = x – ox
PC = y – oy
则P在红色屏幕平面投射点P’的x、y轴坐标值为:
P’的x坐标 =
ox + AC’ =
ox + [(pz – oz) * (x - ox)/(z - oz)]
P’的y坐标 =
oy + P’C’ =
oy + [(pz - oz) * (y - oy)/(z - oz)]
接下来我们就用这个结论在scratch里画出一个3D的八面体来。
我们要做的就是把3D物体在2D屏幕上的投射画出来。所以在画(编程)之前我们先要在自己心中有一个3D坐标,视点的位置、屏幕的位置、物体的位置我们都要先想清楚。
八面体有6个顶点,依次连接点1-6-2-5-3-6-4-5-1-2-3-4-1就可以一笔过画出它来;
- 首先我们用三个数组分别保存八面体6个顶点的x坐标、y坐标和z坐标;
- 定义视点及投射屏幕平面的位置(前面说过,为了方便计算,我们让投射平面与x轴和y轴组成的平面平行,所以投射面只有一个z值);
- 根据前面3D到2D屏幕的投射公式,自定义一个积木用来投射转换;
- 接下来就依次投射1-6-2-5-3-6-4-5-1-2-3-4-1点,用画笔画出连接各点的轨迹。
执行“投射八面体“积木就可以画出下面的形状:
3. 移动
物体移动只需要改变它所有顶点的x,y,z值,然后再重新投射一次就可以了。
注意这里物体的移动是在原3D空间的移动,所以物体在x轴方向或y轴方向移动后,在屏幕上的投射会产生一定的旋转效果。视点离投射平面越近,这种旋转效果越明显。
物体在z轴方向的移动会产生物体大小变化的视觉效果:物体远离视点时物体投射缩小,接近视点时物体投射增大。
4. 旋转
物体旋转涉及到三角函数的知识。推导过程需要一定的篇幅。我们只需要记住简单的结论来应用就可以了。
旋转可以分为三种:沿x轴的旋转、沿y轴的旋转和沿z轴的旋转。
- 沿x轴旋转时,物体的x坐标不变,y坐标和z坐标的变换规律是(A为旋转角度):
新的y坐标 = y * cos A + z * sin A;
新的z坐标 = z * cos A – y * sin A。
- 沿y轴旋转时,物体的y坐标不变,x坐标和z坐标的变换规律是(A为旋转角度):
新的x坐标 = x * cos A – z * sin A;
新的z坐标 = x * sin A + z * sin A。
- 沿z轴旋转时,物体的z坐标不变,x坐标和y坐标的变换规律是(A为旋转角度):
新的x坐标 = x * cos A – y * sin A;
新的y坐标 = x * sin A + y * cos A。
显示了沿z轴旋转时的变换情况。有兴趣的同学可以自己推导出坐标的变换规律。
注意上面说的坐标变化都是物体原3D坐标的变化,而不是投射在2D平面上的投射坐标的变化。换言之,旋转改变物体坐标后,还要重新计算投射坐标。
少儿编程教育,主要的用户群体就是K12,就是5~18岁的少儿用户去学习计算机编程,今天小编主要给大家分享少儿编程有哪些课程体系,希望对你们有帮助!
软实力,指的是教研教学体系,是少儿编程教育发展之基。
少儿编程教育也是K12教育的一个分支,K12教育的差异化来自于教学和教研教学,师资力量,教学体系都是软实力的根本表现。而目前,各类产品的软实力分为以下几个层次:
1. 谭浩强式的教学体系
相信受过高等教育的人能够理解这种教育是什么,可以说这是较填鸭式的编程教育,它在K12市场上完全没有竞争力。
2.scratch源生系统
照搬麻省的scratch课程,这个课程确实很经典,但是少儿编程教育并不是应试教育,它需要与时俱进,在固定编程工具的框架下,衍生性的教学点和教学方法是有限的。
scratch系统也有一个很大的缺点,那就是课程的衍生性有限,没有一个过渡体系可以把业余编程领域和专业编程领域连接起来。另一点必须提到的是,国外的编程教育体系在国内的水土不服也是一个问题。
3.自主教学体系
这类教学系统的首要条件是必须能够跳出scratch编程工具的限制,只有跳出scratch工具的限制,才能跳出scratch教学系统的限制。
自主的教研团队构建了独立的教学体系,自主的教学体系能够满足课程创新性、逻辑性、趣味性的要求,可以将业余编程领域与专业编程领域连接起来。
目前,自主教学方式还处于探索阶段,探索道路还很长。
硬实力是高科技,软实力就是教育,软实力和硬实力的结合就是高科技教育。科学技术的进步可以说是一日千里,但是教育的进步需要大量的实践。
目前,少儿编程教育只是属于校外素质教育的一部分,将来一定会被纳入学校的教学体系。教学体系和教材是软实力的突破口,同时,抓住这两点会就能持平一步,但如果想持续在竞争中持平,仍然需要依靠时间和实地的投资。