mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-05 22:09:56 +03:00
Add C# examples to Using Viewports documentation
Co-authored-by: Raul Santos <raulsntos@gmail.com>
This commit is contained in:
@@ -76,10 +76,15 @@ There can only be one active camera per :ref:`Viewport <class_Viewport>`, so if
|
|||||||
than one, make sure that the desired one has the :ref:`current <class_Camera3D_property_current>` property set,
|
than one, make sure that the desired one has the :ref:`current <class_Camera3D_property_current>` property set,
|
||||||
or make it the current camera by calling:
|
or make it the current camera by calling:
|
||||||
|
|
||||||
::
|
.. tabs::
|
||||||
|
.. code-tab:: gdscript GDScript
|
||||||
|
|
||||||
camera.make_current()
|
camera.make_current()
|
||||||
|
|
||||||
|
.. code-tab:: csharp
|
||||||
|
|
||||||
|
camera.MakeCurrent();
|
||||||
|
|
||||||
By default, cameras will render all objects in their world. In 3D, cameras can use their
|
By default, cameras will render all objects in their world. In 3D, cameras can use their
|
||||||
:ref:`cull_mask <class_Camera3D_property_cull_mask>` property combined with the
|
:ref:`cull_mask <class_Camera3D_property_cull_mask>` property combined with the
|
||||||
:ref:`VisualInstance3D's <class_VisualInstance3D>` :ref:`layer <class_VisualInstance3D_property_layers>`
|
:ref:`VisualInstance3D's <class_VisualInstance3D>` :ref:`layer <class_VisualInstance3D_property_layers>`
|
||||||
@@ -95,11 +100,17 @@ these values are overridden, but for all others, this sets their resolution.
|
|||||||
It is also possible to scale the 2D content and make the :ref:`SubViewport <class_SubViewport>` resolution
|
It is also possible to scale the 2D content and make the :ref:`SubViewport <class_SubViewport>` resolution
|
||||||
different from the one specified in size, by calling:
|
different from the one specified in size, by calling:
|
||||||
|
|
||||||
::
|
.. tabs::
|
||||||
|
.. code-tab:: gdscript GDScript
|
||||||
|
|
||||||
sub_viewport.set_size_2d_override(Vector2i(width, height)) # Custom size for 2D.
|
sub_viewport.set_size_2d_override(Vector2i(width, height)) # Custom size for 2D.
|
||||||
sub_viewport.set_size_2d_override_stretch(true) # Enable stretch for custom size.
|
sub_viewport.set_size_2d_override_stretch(true) # Enable stretch for custom size.
|
||||||
|
|
||||||
|
.. code-tab:: csharp
|
||||||
|
|
||||||
|
subViewport.Size2DOverride = new Vector2I(width, height); // Custom size for 2D.
|
||||||
|
subViewport.Size2DOverrideStretch = true; // Enable stretch for custom size.
|
||||||
|
|
||||||
For information on scaling and stretching with the Root Viewport visit the :ref:`Multiple Resolutions Tutorial <doc_multiple_resolutions>`
|
For information on scaling and stretching with the Root Viewport visit the :ref:`Multiple Resolutions Tutorial <doc_multiple_resolutions>`
|
||||||
|
|
||||||
Worlds
|
Worlds
|
||||||
@@ -137,7 +148,8 @@ It is possible to query a capture of the :ref:`Viewport <class_Viewport>` conten
|
|||||||
Viewport, this is effectively a screen capture. This is done with the
|
Viewport, this is effectively a screen capture. This is done with the
|
||||||
following code:
|
following code:
|
||||||
|
|
||||||
::
|
.. tabs::
|
||||||
|
.. code-tab:: gdscript GDScript
|
||||||
|
|
||||||
# Retrieve the captured Image using get_image().
|
# Retrieve the captured Image using get_image().
|
||||||
var img = get_viewport().get_texture().get_image()
|
var img = get_viewport().get_texture().get_image()
|
||||||
@@ -146,16 +158,32 @@ following code:
|
|||||||
# Set sprite texture.
|
# Set sprite texture.
|
||||||
sprite.texture = tex
|
sprite.texture = tex
|
||||||
|
|
||||||
|
.. code-tab:: csharp
|
||||||
|
|
||||||
|
// Retrieve the captured Image using get_image().
|
||||||
|
var img = GetViewport().GetTexture().GetImage();
|
||||||
|
// Convert Image to ImageTexture.
|
||||||
|
var tex = ImageTexture.CreateFromImage(img);
|
||||||
|
// Set sprite texture.
|
||||||
|
sprite.Texture = tex;
|
||||||
|
|
||||||
But if you use this in ``_ready()`` or from the first frame of the :ref:`Viewport's <class_Viewport>` initialization,
|
But if you use this in ``_ready()`` or from the first frame of the :ref:`Viewport's <class_Viewport>` initialization,
|
||||||
you will get an empty texture because there is nothing to get as texture. You can deal with
|
you will get an empty texture because there is nothing to get as texture. You can deal with
|
||||||
it using (for example):
|
it using (for example):
|
||||||
|
|
||||||
::
|
.. tabs::
|
||||||
|
.. code-tab:: gdscript GDScript
|
||||||
|
|
||||||
# Wait until the frame has finished before getting the texture.
|
# Wait until the frame has finished before getting the texture.
|
||||||
await RenderingServer.frame_post_draw
|
await RenderingServer.frame_post_draw
|
||||||
# You can get the image after this.
|
# You can get the image after this.
|
||||||
|
|
||||||
|
.. code-tab:: csharp
|
||||||
|
|
||||||
|
// Wait until the frame has finished before getting the texture.
|
||||||
|
await RenderingServer.Singleton.ToSignal(RenderingServer.SignalName.FramePostDraw);
|
||||||
|
// You can get the image after this.
|
||||||
|
|
||||||
Viewport Container
|
Viewport Container
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
@@ -218,12 +246,19 @@ When rendering to a :ref:`SubViewport <class_SubViewport>`, whatever is inside w
|
|||||||
visible in the scene editor. To display the contents, you have to draw the SubViewport's :ref:`ViewportTexture <class_ViewportTexture>` somewhere.
|
visible in the scene editor. To display the contents, you have to draw the SubViewport's :ref:`ViewportTexture <class_ViewportTexture>` somewhere.
|
||||||
This can be requested via code using (for example):
|
This can be requested via code using (for example):
|
||||||
|
|
||||||
::
|
.. tabs::
|
||||||
|
.. code-tab:: gdscript GDScript
|
||||||
|
|
||||||
# This gives us the ViewportTexture.
|
# This gives us the ViewportTexture.
|
||||||
var tex = viewport.get_texture()
|
var tex = viewport.get_texture()
|
||||||
sprite.texture = tex
|
sprite.texture = tex
|
||||||
|
|
||||||
|
.. code-tab:: csharp
|
||||||
|
|
||||||
|
// This gives us the ViewportTexture.
|
||||||
|
var tex = viewport.GetTexture();
|
||||||
|
sprite.Texture = tex;
|
||||||
|
|
||||||
Or it can be assigned in the editor by selecting "New ViewportTexture"
|
Or it can be assigned in the editor by selecting "New ViewportTexture"
|
||||||
|
|
||||||
.. image:: img/texturemenu.webp
|
.. image:: img/texturemenu.webp
|
||||||
@@ -245,6 +280,6 @@ This flexibility allows users to render an image once and then use the texture w
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Make sure to check the Viewport demos. They are available in the
|
Make sure to check the Viewport demos. They are available in the
|
||||||
viewport folder of the demos archive, or at
|
viewport folder of the demos archive, or at
|
||||||
https://github.com/godotengine/godot-demo-projects/tree/master/viewport.
|
https://github.com/godotengine/godot-demo-projects/tree/master/viewport.
|
||||||
|
|||||||
Reference in New Issue
Block a user