用Viewport实现在3D场景中显示2D内容

在上个教程中我们以官方提供的案例《视口 之 3d in 2d》为基础,实现了用Viewport实现在2D场景中显示3D内容的效果。这次我们继续用视口来实现在3D场景中显示一个2D场景的效果。

最终效果如下:

2in3.gif

首先我们来复习一下上节课的内容,用视口在2D场景中显示一个3D场景需要那些步骤?

  • 一个2D场景和一个3D场景

  • 一个视口

  • 用于绘制视口内容的“画布”

本教程的原理和上一个教程非常类似,只不过我们创建了一个Quad类型的MeshInstance,用其Material下的Texture作为渲染目标,即所谓的画布。

先看一下2D场景:

2dscene2.png

和上个教程一样,勾选Camera2DCurrent属性。

旋转的图标代码:

extends Sprite
​
func _process(delta):
 rotation_degrees += delta*100.0

再看一下3D场景:

3dscene2.png

"QuadMesh"是1个"Quad"类型的MeshInstance,使其旋转的代码如下:

extends MeshInstance
​
func _process(delta):
 rotation_degrees.y -= delta*60.0

小结: 依然是两个简单的场景。接下来我们把2D场景嵌入到3D场景中

  • 画布

    即"QuadMesh"

  • 添加视口

    添加视口,命名为“Viewport_for_2dScene”,把刚才的那个原始2D场景直接实例化为视口的子场景。将视口的Size属性设为x400y400(默认为0,0),注意将Own World选项勾选。或者你也可以为视口创建一个World。这一步的作用就是将视口的子树分离成一个独立的世界。

  • 把视口绘制到画布上

    和之前稍有不同的是,我们要先为QuadMesh设置一下GeometryMaterial Override属性。

GeometryMaterial.png

脚本实现如下:

extends Viewport
    ​
    func _ready():
     var mesh:MeshInstance = get_node("../QuadMesh")
     mesh.material_override.albedo_texture = get_texture()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发游戏的老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值