美文网首页
Godot笔记:用Viewport实现在3D场景中显示2D内容

Godot笔记:用Viewport实现在3D场景中显示2D内容

作者: 吃烧烤的老王 | 来源:发表于2019-07-14 10:42 被阅读0次

    在上个教程中我们以官方提供的案例《视口 之 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()
    

    相关文章

      网友评论

          本文标题:Godot笔记:用Viewport实现在3D场景中显示2D内容

          本文链接:https://www.haomeiwen.com/subject/xsrbkctx.html