如何获取不同层中的相机所看到的内容?

问题描述 投票:0回答:1

我正在godot 4中制作一个门户系统。有2个世界,正常世界中的一切都在第1层或剔除第1层(灯光)上,对于改变的世界反之亦然。四处移动的玩家模型有两个摄像机,一个摄像机的图层是正常图层(主图层),另一个摄像机的图层是更改的图层。我有一个脚本可以获取改变后的相机所看到的内容,并将该图像提供给着色器来绘制它。

gd脚本:

extends MeshInstance3D

var portalTexture : Texture
var portalMaterial : ShaderMaterial
@onready var altered_camera= $"../../MainCharacter/altered_camera"


func _process(delta):
        scale = Vector3(altered_camera.get_viewport().get_texture(
).get_size().x / 1000,altered_camera.get_viewport().get_texture().get_size(
).y / 1000,.1)
get_active_material(0).set_shader_parameter("portal_texture",                                                            
altered_camera.get_viewport().get_texture())

着色器代码:

shader_type spatial;
uniform sampler2D portal_texture;


void fragment() {
    ALBEDO = texture(portal_texture, UV ).xyz;
}

当我查看网格时,我看到的是普通相机看到的内容,而不是更改后的内容。我知道这一点是因为镜头前有一个球,它只存在于改变的世界中。发生什么事了?

我想可能是因为选择了普通世界的相机作为当前的相机。

3d godot godot4 godot-shader-language
1个回答
0
投票

A

Viewport
有一个当前
Camera3D
,这就是渲染的内容。

要让第二个相机进行渲染,您需要第二个

Viewport
。让第二个
Camera3D
成为第二个
Viewport
的子级,并使其成为当前 在其中 ,然后您可以通过从第二个
Camera3D
中提取纹理来获得第二个 Viewport
 
看到的内容其中有您小时候想要的
Camera3D

© www.soinside.com 2019 - 2024. All rights reserved.