class_projection.rst 46 KB

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