class_projection.rst 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/Projection.xml.
  6. .. _class_Projection:
  7. Projection
  8. ==========
  9. A 4×4 matrix for 3D projective transformations.
  10. .. rst-class:: classref-introduction-group
  11. Description
  12. -----------
  13. A 4×4 matrix used for 3D projective transformations. It can represent transformations such as translation, rotation, scaling, shearing, and perspective division. It consists of four :ref:`Vector4<class_Vector4>` columns.
  14. For purely linear transformations (translation, rotation, and scale), it is recommended to use :ref:`Transform3D<class_Transform3D>`, as it is more performant and requires less memory.
  15. Used internally as :ref:`Camera3D<class_Camera3D>`'s projection matrix.
  16. .. note::
  17. There are notable differences when using this API with C#. See :ref:`doc_c_sharp_differences` for more information.
  18. .. rst-class:: classref-reftable-group
  19. Properties
  20. ----------
  21. .. table::
  22. :widths: auto
  23. +-------------------------------+---------------------------------------+-------------------------+
  24. | :ref:`Vector4<class_Vector4>` | :ref:`w<class_Projection_property_w>` | ``Vector4(0, 0, 0, 1)`` |
  25. +-------------------------------+---------------------------------------+-------------------------+
  26. | :ref:`Vector4<class_Vector4>` | :ref:`x<class_Projection_property_x>` | ``Vector4(1, 0, 0, 0)`` |
  27. +-------------------------------+---------------------------------------+-------------------------+
  28. | :ref:`Vector4<class_Vector4>` | :ref:`y<class_Projection_property_y>` | ``Vector4(0, 1, 0, 0)`` |
  29. +-------------------------------+---------------------------------------+-------------------------+
  30. | :ref:`Vector4<class_Vector4>` | :ref:`z<class_Projection_property_z>` | ``Vector4(0, 0, 1, 0)`` |
  31. +-------------------------------+---------------------------------------+-------------------------+
  32. .. rst-class:: classref-reftable-group
  33. Constructors
  34. ------------
  35. .. table::
  36. :widths: auto
  37. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  38. | :ref:`Projection<class_Projection>` | :ref:`Projection<class_Projection_constructor_Projection>`\ (\ ) |
  39. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  40. | :ref:`Projection<class_Projection>` | :ref:`Projection<class_Projection_constructor_Projection>`\ (\ from\: :ref:`Projection<class_Projection>`\ ) |
  41. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  42. | :ref:`Projection<class_Projection>` | :ref:`Projection<class_Projection_constructor_Projection>`\ (\ from\: :ref:`Transform3D<class_Transform3D>`\ ) |
  43. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  44. | :ref:`Projection<class_Projection>` | :ref:`Projection<class_Projection_constructor_Projection>`\ (\ x_axis\: :ref:`Vector4<class_Vector4>`, y_axis\: :ref:`Vector4<class_Vector4>`, z_axis\: :ref:`Vector4<class_Vector4>`, w_axis\: :ref:`Vector4<class_Vector4>`\ ) |
  45. +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  46. .. rst-class:: classref-reftable-group
  47. Methods
  48. -------
  49. .. table::
  50. :widths: auto
  51. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  52. | :ref:`Projection<class_Projection>` | :ref:`create_depth_correction<class_Projection_method_create_depth_correction>`\ (\ flip_y\: :ref:`bool<class_bool>`\ ) |static| |
  53. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  54. | :ref:`Projection<class_Projection>` | :ref:`create_fit_aabb<class_Projection_method_create_fit_aabb>`\ (\ aabb\: :ref:`AABB<class_AABB>`\ ) |static| |
  55. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  56. | :ref:`Projection<class_Projection>` | :ref:`create_for_hmd<class_Projection_method_create_for_hmd>`\ (\ eye\: :ref:`int<class_int>`, aspect\: :ref:`float<class_float>`, intraocular_dist\: :ref:`float<class_float>`, display_width\: :ref:`float<class_float>`, display_to_lens\: :ref:`float<class_float>`, oversample\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| |
  57. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  58. | :ref:`Projection<class_Projection>` | :ref:`create_frustum<class_Projection_method_create_frustum>`\ (\ left\: :ref:`float<class_float>`, right\: :ref:`float<class_float>`, bottom\: :ref:`float<class_float>`, top\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| |
  59. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  60. | :ref:`Projection<class_Projection>` | :ref:`create_frustum_aspect<class_Projection_method_create_frustum_aspect>`\ (\ size\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, offset\: :ref:`Vector2<class_Vector2>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| |
  61. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  62. | :ref:`Projection<class_Projection>` | :ref:`create_light_atlas_rect<class_Projection_method_create_light_atlas_rect>`\ (\ rect\: :ref:`Rect2<class_Rect2>`\ ) |static| |
  63. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  64. | :ref:`Projection<class_Projection>` | :ref:`create_orthogonal<class_Projection_method_create_orthogonal>`\ (\ left\: :ref:`float<class_float>`, right\: :ref:`float<class_float>`, bottom\: :ref:`float<class_float>`, top\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| |
  65. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  66. | :ref:`Projection<class_Projection>` | :ref:`create_orthogonal_aspect<class_Projection_method_create_orthogonal_aspect>`\ (\ size\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| |
  67. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  68. | :ref:`Projection<class_Projection>` | :ref:`create_perspective<class_Projection_method_create_perspective>`\ (\ fovy\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| |
  69. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  70. | :ref:`Projection<class_Projection>` | :ref:`create_perspective_hmd<class_Projection_method_create_perspective_hmd>`\ (\ fovy\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>`, eye\: :ref:`int<class_int>`, intraocular_dist\: :ref:`float<class_float>`, convergence_dist\: :ref:`float<class_float>`\ ) |static| |
  71. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  72. | :ref:`float<class_float>` | :ref:`determinant<class_Projection_method_determinant>`\ (\ ) |const| |
  73. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  74. | :ref:`Projection<class_Projection>` | :ref:`flipped_y<class_Projection_method_flipped_y>`\ (\ ) |const| |
  75. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  76. | :ref:`float<class_float>` | :ref:`get_aspect<class_Projection_method_get_aspect>`\ (\ ) |const| |
  77. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  78. | :ref:`Vector2<class_Vector2>` | :ref:`get_far_plane_half_extents<class_Projection_method_get_far_plane_half_extents>`\ (\ ) |const| |
  79. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  80. | :ref:`float<class_float>` | :ref:`get_fov<class_Projection_method_get_fov>`\ (\ ) |const| |
  81. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  82. | :ref:`float<class_float>` | :ref:`get_fovy<class_Projection_method_get_fovy>`\ (\ fovx\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`\ ) |static| |
  83. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  84. | :ref:`float<class_float>` | :ref:`get_lod_multiplier<class_Projection_method_get_lod_multiplier>`\ (\ ) |const| |
  85. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  86. | :ref:`int<class_int>` | :ref:`get_pixels_per_meter<class_Projection_method_get_pixels_per_meter>`\ (\ for_pixel_width\: :ref:`int<class_int>`\ ) |const| |
  87. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  88. | :ref:`Plane<class_Plane>` | :ref:`get_projection_plane<class_Projection_method_get_projection_plane>`\ (\ plane\: :ref:`int<class_int>`\ ) |const| |
  89. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  90. | :ref:`Vector2<class_Vector2>` | :ref:`get_viewport_half_extents<class_Projection_method_get_viewport_half_extents>`\ (\ ) |const| |
  91. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  92. | :ref:`float<class_float>` | :ref:`get_z_far<class_Projection_method_get_z_far>`\ (\ ) |const| |
  93. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  94. | :ref:`float<class_float>` | :ref:`get_z_near<class_Projection_method_get_z_near>`\ (\ ) |const| |
  95. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  96. | :ref:`Projection<class_Projection>` | :ref:`inverse<class_Projection_method_inverse>`\ (\ ) |const| |
  97. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  98. | :ref:`bool<class_bool>` | :ref:`is_orthogonal<class_Projection_method_is_orthogonal>`\ (\ ) |const| |
  99. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  100. | :ref:`Projection<class_Projection>` | :ref:`jitter_offseted<class_Projection_method_jitter_offseted>`\ (\ offset\: :ref:`Vector2<class_Vector2>`\ ) |const| |
  101. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  102. | :ref:`Projection<class_Projection>` | :ref:`perspective_znear_adjusted<class_Projection_method_perspective_znear_adjusted>`\ (\ new_znear\: :ref:`float<class_float>`\ ) |const| |
  103. +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  104. .. rst-class:: classref-reftable-group
  105. Operators
  106. ---------
  107. .. table::
  108. :widths: auto
  109. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  110. | :ref:`bool<class_bool>` | :ref:`operator !=<class_Projection_operator_neq_Projection>`\ (\ right\: :ref:`Projection<class_Projection>`\ ) |
  111. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  112. | :ref:`Projection<class_Projection>` | :ref:`operator *<class_Projection_operator_mul_Projection>`\ (\ right\: :ref:`Projection<class_Projection>`\ ) |
  113. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  114. | :ref:`Vector4<class_Vector4>` | :ref:`operator *<class_Projection_operator_mul_Vector4>`\ (\ right\: :ref:`Vector4<class_Vector4>`\ ) |
  115. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  116. | :ref:`bool<class_bool>` | :ref:`operator ==<class_Projection_operator_eq_Projection>`\ (\ right\: :ref:`Projection<class_Projection>`\ ) |
  117. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  118. | :ref:`Vector4<class_Vector4>` | :ref:`operator []<class_Projection_operator_idx_int>`\ (\ index\: :ref:`int<class_int>`\ ) |
  119. +-------------------------------------+-----------------------------------------------------------------------------------------------------------------+
  120. .. rst-class:: classref-section-separator
  121. ----
  122. .. rst-class:: classref-descriptions-group
  123. Enumerations
  124. ------------
  125. .. _enum_Projection_Planes:
  126. .. rst-class:: classref-enumeration
  127. enum **Planes**: :ref:`🔗<enum_Projection_Planes>`
  128. .. _class_Projection_constant_PLANE_NEAR:
  129. .. rst-class:: classref-enumeration-constant
  130. :ref:`Planes<enum_Projection_Planes>` **PLANE_NEAR** = ``0``
  131. The index value of the projection's near clipping plane.
  132. .. _class_Projection_constant_PLANE_FAR:
  133. .. rst-class:: classref-enumeration-constant
  134. :ref:`Planes<enum_Projection_Planes>` **PLANE_FAR** = ``1``
  135. The index value of the projection's far clipping plane.
  136. .. _class_Projection_constant_PLANE_LEFT:
  137. .. rst-class:: classref-enumeration-constant
  138. :ref:`Planes<enum_Projection_Planes>` **PLANE_LEFT** = ``2``
  139. The index value of the projection's left clipping plane.
  140. .. _class_Projection_constant_PLANE_TOP:
  141. .. rst-class:: classref-enumeration-constant
  142. :ref:`Planes<enum_Projection_Planes>` **PLANE_TOP** = ``3``
  143. The index value of the projection's top clipping plane.
  144. .. _class_Projection_constant_PLANE_RIGHT:
  145. .. rst-class:: classref-enumeration-constant
  146. :ref:`Planes<enum_Projection_Planes>` **PLANE_RIGHT** = ``4``
  147. The index value of the projection's right clipping plane.
  148. .. _class_Projection_constant_PLANE_BOTTOM:
  149. .. rst-class:: classref-enumeration-constant
  150. :ref:`Planes<enum_Projection_Planes>` **PLANE_BOTTOM** = ``5``
  151. The index value of the projection bottom clipping plane.
  152. .. rst-class:: classref-section-separator
  153. ----
  154. .. rst-class:: classref-descriptions-group
  155. Constants
  156. ---------
  157. .. _class_Projection_constant_IDENTITY:
  158. .. rst-class:: classref-constant
  159. **IDENTITY** = ``Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)`` :ref:`🔗<class_Projection_constant_IDENTITY>`
  160. A **Projection** with no transformation defined. When applied to other data structures, no transformation is performed.
  161. .. _class_Projection_constant_ZERO:
  162. .. rst-class:: classref-constant
  163. **ZERO** = ``Projection(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)`` :ref:`🔗<class_Projection_constant_ZERO>`
  164. A **Projection** with all values initialized to 0. When applied to other data structures, they will be zeroed.
  165. .. rst-class:: classref-section-separator
  166. ----
  167. .. rst-class:: classref-descriptions-group
  168. Property Descriptions
  169. ---------------------
  170. .. _class_Projection_property_w:
  171. .. rst-class:: classref-property
  172. :ref:`Vector4<class_Vector4>` **w** = ``Vector4(0, 0, 0, 1)`` :ref:`🔗<class_Projection_property_w>`
  173. The projection matrix's W vector (column 3). Equivalent to array index ``3``.
  174. .. rst-class:: classref-item-separator
  175. ----
  176. .. _class_Projection_property_x:
  177. .. rst-class:: classref-property
  178. :ref:`Vector4<class_Vector4>` **x** = ``Vector4(1, 0, 0, 0)`` :ref:`🔗<class_Projection_property_x>`
  179. The projection matrix's X vector (column 0). Equivalent to array index ``0``.
  180. .. rst-class:: classref-item-separator
  181. ----
  182. .. _class_Projection_property_y:
  183. .. rst-class:: classref-property
  184. :ref:`Vector4<class_Vector4>` **y** = ``Vector4(0, 1, 0, 0)`` :ref:`🔗<class_Projection_property_y>`
  185. The projection matrix's Y vector (column 1). Equivalent to array index ``1``.
  186. .. rst-class:: classref-item-separator
  187. ----
  188. .. _class_Projection_property_z:
  189. .. rst-class:: classref-property
  190. :ref:`Vector4<class_Vector4>` **z** = ``Vector4(0, 0, 1, 0)`` :ref:`🔗<class_Projection_property_z>`
  191. The projection matrix's Z vector (column 2). Equivalent to array index ``2``.
  192. .. rst-class:: classref-section-separator
  193. ----
  194. .. rst-class:: classref-descriptions-group
  195. Constructor Descriptions
  196. ------------------------
  197. .. _class_Projection_constructor_Projection:
  198. .. rst-class:: classref-constructor
  199. :ref:`Projection<class_Projection>` **Projection**\ (\ ) :ref:`🔗<class_Projection_constructor_Projection>`
  200. Constructs a default-initialized **Projection** identical to :ref:`IDENTITY<class_Projection_constant_IDENTITY>`.
  201. \ **Note:** In C#, this constructs a **Projection** identical to :ref:`ZERO<class_Projection_constant_ZERO>`.
  202. .. rst-class:: classref-item-separator
  203. ----
  204. .. rst-class:: classref-constructor
  205. :ref:`Projection<class_Projection>` **Projection**\ (\ from\: :ref:`Projection<class_Projection>`\ )
  206. Constructs a **Projection** as a copy of the given **Projection**.
  207. .. rst-class:: classref-item-separator
  208. ----
  209. .. rst-class:: classref-constructor
  210. :ref:`Projection<class_Projection>` **Projection**\ (\ from\: :ref:`Transform3D<class_Transform3D>`\ )
  211. Constructs a Projection as a copy of the given :ref:`Transform3D<class_Transform3D>`.
  212. .. rst-class:: classref-item-separator
  213. ----
  214. .. rst-class:: classref-constructor
  215. :ref:`Projection<class_Projection>` **Projection**\ (\ x_axis\: :ref:`Vector4<class_Vector4>`, y_axis\: :ref:`Vector4<class_Vector4>`, z_axis\: :ref:`Vector4<class_Vector4>`, w_axis\: :ref:`Vector4<class_Vector4>`\ )
  216. Constructs a Projection from four :ref:`Vector4<class_Vector4>` values (matrix columns).
  217. .. rst-class:: classref-section-separator
  218. ----
  219. .. rst-class:: classref-descriptions-group
  220. Method Descriptions
  221. -------------------
  222. .. _class_Projection_method_create_depth_correction:
  223. .. rst-class:: classref-method
  224. :ref:`Projection<class_Projection>` **create_depth_correction**\ (\ flip_y\: :ref:`bool<class_bool>`\ ) |static| :ref:`🔗<class_Projection_method_create_depth_correction>`
  225. Creates a new **Projection** that projects positions from a depth range of ``-1`` to ``1`` to one that ranges from ``0`` to ``1``, and flips the projected positions vertically, according to ``flip_y``.
  226. .. rst-class:: classref-item-separator
  227. ----
  228. .. _class_Projection_method_create_fit_aabb:
  229. .. rst-class:: classref-method
  230. :ref:`Projection<class_Projection>` **create_fit_aabb**\ (\ aabb\: :ref:`AABB<class_AABB>`\ ) |static| :ref:`🔗<class_Projection_method_create_fit_aabb>`
  231. Creates a new **Projection** that scales a given projection to fit around a given :ref:`AABB<class_AABB>` in projection space.
  232. .. rst-class:: classref-item-separator
  233. ----
  234. .. _class_Projection_method_create_for_hmd:
  235. .. rst-class:: classref-method
  236. :ref:`Projection<class_Projection>` **create_for_hmd**\ (\ eye\: :ref:`int<class_int>`, aspect\: :ref:`float<class_float>`, intraocular_dist\: :ref:`float<class_float>`, display_width\: :ref:`float<class_float>`, display_to_lens\: :ref:`float<class_float>`, oversample\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| :ref:`🔗<class_Projection_method_create_for_hmd>`
  237. Creates a new **Projection** for projecting positions onto a head-mounted display with the given X:Y aspect ratio, distance between eyes, display width, distance to lens, oversampling factor, and depth clipping planes.
  238. \ ``eye`` creates the projection for the left eye when set to 1, or the right eye when set to 2.
  239. .. rst-class:: classref-item-separator
  240. ----
  241. .. _class_Projection_method_create_frustum:
  242. .. rst-class:: classref-method
  243. :ref:`Projection<class_Projection>` **create_frustum**\ (\ left\: :ref:`float<class_float>`, right\: :ref:`float<class_float>`, bottom\: :ref:`float<class_float>`, top\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| :ref:`🔗<class_Projection_method_create_frustum>`
  244. Creates a new **Projection** that projects positions in a frustum with the given clipping planes.
  245. .. rst-class:: classref-item-separator
  246. ----
  247. .. _class_Projection_method_create_frustum_aspect:
  248. .. rst-class:: classref-method
  249. :ref:`Projection<class_Projection>` **create_frustum_aspect**\ (\ size\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, offset\: :ref:`Vector2<class_Vector2>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| :ref:`🔗<class_Projection_method_create_frustum_aspect>`
  250. Creates a new **Projection** that projects positions in a frustum with the given size, X:Y aspect ratio, offset, and clipping planes.
  251. \ ``flip_fov`` determines whether the projection's field of view is flipped over its diagonal.
  252. .. rst-class:: classref-item-separator
  253. ----
  254. .. _class_Projection_method_create_light_atlas_rect:
  255. .. rst-class:: classref-method
  256. :ref:`Projection<class_Projection>` **create_light_atlas_rect**\ (\ rect\: :ref:`Rect2<class_Rect2>`\ ) |static| :ref:`🔗<class_Projection_method_create_light_atlas_rect>`
  257. Creates a new **Projection** that projects positions into the given :ref:`Rect2<class_Rect2>`.
  258. .. rst-class:: classref-item-separator
  259. ----
  260. .. _class_Projection_method_create_orthogonal:
  261. .. rst-class:: classref-method
  262. :ref:`Projection<class_Projection>` **create_orthogonal**\ (\ left\: :ref:`float<class_float>`, right\: :ref:`float<class_float>`, bottom\: :ref:`float<class_float>`, top\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`\ ) |static| :ref:`🔗<class_Projection_method_create_orthogonal>`
  263. Creates a new **Projection** that projects positions using an orthogonal projection with the given clipping planes.
  264. .. rst-class:: classref-item-separator
  265. ----
  266. .. _class_Projection_method_create_orthogonal_aspect:
  267. .. rst-class:: classref-method
  268. :ref:`Projection<class_Projection>` **create_orthogonal_aspect**\ (\ size\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| :ref:`🔗<class_Projection_method_create_orthogonal_aspect>`
  269. Creates a new **Projection** that projects positions using an orthogonal projection with the given size, X:Y aspect ratio, and clipping planes.
  270. \ ``flip_fov`` determines whether the projection's field of view is flipped over its diagonal.
  271. .. rst-class:: classref-item-separator
  272. ----
  273. .. _class_Projection_method_create_perspective:
  274. .. rst-class:: classref-method
  275. :ref:`Projection<class_Projection>` **create_perspective**\ (\ fovy\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>` = false\ ) |static| :ref:`🔗<class_Projection_method_create_perspective>`
  276. Creates a new **Projection** that projects positions using a perspective projection with the given Y-axis field of view (in degrees), X:Y aspect ratio, and clipping planes.
  277. \ ``flip_fov`` determines whether the projection's field of view is flipped over its diagonal.
  278. .. rst-class:: classref-item-separator
  279. ----
  280. .. _class_Projection_method_create_perspective_hmd:
  281. .. rst-class:: classref-method
  282. :ref:`Projection<class_Projection>` **create_perspective_hmd**\ (\ fovy\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`, z_near\: :ref:`float<class_float>`, z_far\: :ref:`float<class_float>`, flip_fov\: :ref:`bool<class_bool>`, eye\: :ref:`int<class_int>`, intraocular_dist\: :ref:`float<class_float>`, convergence_dist\: :ref:`float<class_float>`\ ) |static| :ref:`🔗<class_Projection_method_create_perspective_hmd>`
  283. Creates a new **Projection** that projects positions using a perspective projection with the given Y-axis field of view (in degrees), X:Y aspect ratio, and clipping distances. The projection is adjusted for a head-mounted display with the given distance between eyes and distance to a point that can be focused on.
  284. \ ``eye`` creates the projection for the left eye when set to 1, or the right eye when set to 2.
  285. \ ``flip_fov`` determines whether the projection's field of view is flipped over its diagonal.
  286. .. rst-class:: classref-item-separator
  287. ----
  288. .. _class_Projection_method_determinant:
  289. .. rst-class:: classref-method
  290. :ref:`float<class_float>` **determinant**\ (\ ) |const| :ref:`🔗<class_Projection_method_determinant>`
  291. Returns a scalar value that is the signed factor by which areas are scaled by this matrix. If the sign is negative, the matrix flips the orientation of the area.
  292. The determinant can be used to calculate the invertibility of a matrix or solve linear systems of equations involving the matrix, among other applications.
  293. .. rst-class:: classref-item-separator
  294. ----
  295. .. _class_Projection_method_flipped_y:
  296. .. rst-class:: classref-method
  297. :ref:`Projection<class_Projection>` **flipped_y**\ (\ ) |const| :ref:`🔗<class_Projection_method_flipped_y>`
  298. Returns a copy of this **Projection** with the signs of the values of the Y column flipped.
  299. .. rst-class:: classref-item-separator
  300. ----
  301. .. _class_Projection_method_get_aspect:
  302. .. rst-class:: classref-method
  303. :ref:`float<class_float>` **get_aspect**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_aspect>`
  304. Returns the X:Y aspect ratio of this **Projection**'s viewport.
  305. .. rst-class:: classref-item-separator
  306. ----
  307. .. _class_Projection_method_get_far_plane_half_extents:
  308. .. rst-class:: classref-method
  309. :ref:`Vector2<class_Vector2>` **get_far_plane_half_extents**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_far_plane_half_extents>`
  310. Returns the dimensions of the far clipping plane of the projection, divided by two.
  311. .. rst-class:: classref-item-separator
  312. ----
  313. .. _class_Projection_method_get_fov:
  314. .. rst-class:: classref-method
  315. :ref:`float<class_float>` **get_fov**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_fov>`
  316. Returns the horizontal field of view of the projection (in degrees).
  317. .. rst-class:: classref-item-separator
  318. ----
  319. .. _class_Projection_method_get_fovy:
  320. .. rst-class:: classref-method
  321. :ref:`float<class_float>` **get_fovy**\ (\ fovx\: :ref:`float<class_float>`, aspect\: :ref:`float<class_float>`\ ) |static| :ref:`🔗<class_Projection_method_get_fovy>`
  322. Returns the vertical field of view of the projection (in degrees) associated with the given horizontal field of view (in degrees) and aspect ratio.
  323. \ **Note:** Unlike most methods of **Projection**, ``aspect`` is expected to be 1 divided by the X:Y aspect ratio.
  324. .. rst-class:: classref-item-separator
  325. ----
  326. .. _class_Projection_method_get_lod_multiplier:
  327. .. rst-class:: classref-method
  328. :ref:`float<class_float>` **get_lod_multiplier**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_lod_multiplier>`
  329. Returns the factor by which the visible level of detail is scaled by this **Projection**.
  330. .. rst-class:: classref-item-separator
  331. ----
  332. .. _class_Projection_method_get_pixels_per_meter:
  333. .. rst-class:: classref-method
  334. :ref:`int<class_int>` **get_pixels_per_meter**\ (\ for_pixel_width\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_Projection_method_get_pixels_per_meter>`
  335. Returns the number of pixels with the given pixel width displayed per meter, after this **Projection** is applied.
  336. .. rst-class:: classref-item-separator
  337. ----
  338. .. _class_Projection_method_get_projection_plane:
  339. .. rst-class:: classref-method
  340. :ref:`Plane<class_Plane>` **get_projection_plane**\ (\ plane\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_Projection_method_get_projection_plane>`
  341. Returns the clipping plane of this **Projection** whose index is given by ``plane``.
  342. \ ``plane`` should be equal to one of :ref:`PLANE_NEAR<class_Projection_constant_PLANE_NEAR>`, :ref:`PLANE_FAR<class_Projection_constant_PLANE_FAR>`, :ref:`PLANE_LEFT<class_Projection_constant_PLANE_LEFT>`, :ref:`PLANE_TOP<class_Projection_constant_PLANE_TOP>`, :ref:`PLANE_RIGHT<class_Projection_constant_PLANE_RIGHT>`, or :ref:`PLANE_BOTTOM<class_Projection_constant_PLANE_BOTTOM>`.
  343. .. rst-class:: classref-item-separator
  344. ----
  345. .. _class_Projection_method_get_viewport_half_extents:
  346. .. rst-class:: classref-method
  347. :ref:`Vector2<class_Vector2>` **get_viewport_half_extents**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_viewport_half_extents>`
  348. Returns the dimensions of the viewport plane that this **Projection** projects positions onto, divided by two.
  349. .. rst-class:: classref-item-separator
  350. ----
  351. .. _class_Projection_method_get_z_far:
  352. .. rst-class:: classref-method
  353. :ref:`float<class_float>` **get_z_far**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_z_far>`
  354. Returns the distance for this **Projection** beyond which positions are clipped.
  355. .. rst-class:: classref-item-separator
  356. ----
  357. .. _class_Projection_method_get_z_near:
  358. .. rst-class:: classref-method
  359. :ref:`float<class_float>` **get_z_near**\ (\ ) |const| :ref:`🔗<class_Projection_method_get_z_near>`
  360. Returns the distance for this **Projection** before which positions are clipped.
  361. .. rst-class:: classref-item-separator
  362. ----
  363. .. _class_Projection_method_inverse:
  364. .. rst-class:: classref-method
  365. :ref:`Projection<class_Projection>` **inverse**\ (\ ) |const| :ref:`🔗<class_Projection_method_inverse>`
  366. Returns a **Projection** that performs the inverse of this **Projection**'s projective transformation.
  367. .. rst-class:: classref-item-separator
  368. ----
  369. .. _class_Projection_method_is_orthogonal:
  370. .. rst-class:: classref-method
  371. :ref:`bool<class_bool>` **is_orthogonal**\ (\ ) |const| :ref:`🔗<class_Projection_method_is_orthogonal>`
  372. Returns ``true`` if this **Projection** performs an orthogonal projection.
  373. .. rst-class:: classref-item-separator
  374. ----
  375. .. _class_Projection_method_jitter_offseted:
  376. .. rst-class:: classref-method
  377. :ref:`Projection<class_Projection>` **jitter_offseted**\ (\ offset\: :ref:`Vector2<class_Vector2>`\ ) |const| :ref:`🔗<class_Projection_method_jitter_offseted>`
  378. Returns a **Projection** with the X and Y values from the given :ref:`Vector2<class_Vector2>` added to the first and second values of the final column respectively.
  379. .. rst-class:: classref-item-separator
  380. ----
  381. .. _class_Projection_method_perspective_znear_adjusted:
  382. .. rst-class:: classref-method
  383. :ref:`Projection<class_Projection>` **perspective_znear_adjusted**\ (\ new_znear\: :ref:`float<class_float>`\ ) |const| :ref:`🔗<class_Projection_method_perspective_znear_adjusted>`
  384. Returns a **Projection** with the near clipping distance adjusted to be ``new_znear``.
  385. \ **Note:** The original **Projection** must be a perspective projection.
  386. .. rst-class:: classref-section-separator
  387. ----
  388. .. rst-class:: classref-descriptions-group
  389. Operator Descriptions
  390. ---------------------
  391. .. _class_Projection_operator_neq_Projection:
  392. .. rst-class:: classref-operator
  393. :ref:`bool<class_bool>` **operator !=**\ (\ right\: :ref:`Projection<class_Projection>`\ ) :ref:`🔗<class_Projection_operator_neq_Projection>`
  394. Returns ``true`` if the projections are not equal.
  395. \ **Note:** Due to floating-point precision errors, this may return ``true``, even if the projections are virtually equal. An ``is_equal_approx`` method may be added in a future version of Godot.
  396. .. rst-class:: classref-item-separator
  397. ----
  398. .. _class_Projection_operator_mul_Projection:
  399. .. rst-class:: classref-operator
  400. :ref:`Projection<class_Projection>` **operator ***\ (\ right\: :ref:`Projection<class_Projection>`\ ) :ref:`🔗<class_Projection_operator_mul_Projection>`
  401. Returns a **Projection** that applies the combined transformations of this **Projection** and ``right``.
  402. .. rst-class:: classref-item-separator
  403. ----
  404. .. _class_Projection_operator_mul_Vector4:
  405. .. rst-class:: classref-operator
  406. :ref:`Vector4<class_Vector4>` **operator ***\ (\ right\: :ref:`Vector4<class_Vector4>`\ ) :ref:`🔗<class_Projection_operator_mul_Vector4>`
  407. Projects (multiplies) the given :ref:`Vector4<class_Vector4>` by this **Projection** matrix.
  408. .. rst-class:: classref-item-separator
  409. ----
  410. .. _class_Projection_operator_eq_Projection:
  411. .. rst-class:: classref-operator
  412. :ref:`bool<class_bool>` **operator ==**\ (\ right\: :ref:`Projection<class_Projection>`\ ) :ref:`🔗<class_Projection_operator_eq_Projection>`
  413. Returns ``true`` if the projections are equal.
  414. \ **Note:** Due to floating-point precision errors, this may return ``false``, even if the projections are virtually equal. An ``is_equal_approx`` method may be added in a future version of Godot.
  415. .. rst-class:: classref-item-separator
  416. ----
  417. .. _class_Projection_operator_idx_int:
  418. .. rst-class:: classref-operator
  419. :ref:`Vector4<class_Vector4>` **operator []**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_Projection_operator_idx_int>`
  420. Returns the column of the **Projection** with the given index.
  421. Indices are in the following order: x, y, z, w.
  422. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  423. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  424. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  425. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  426. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  427. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  428. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
  429. .. |void| replace:: :abbr:`void (No return value.)`