diff --git a/core/crypto/crypto.cpp b/core/crypto/crypto.cpp index 78a1b1dda7e..d80b0240e9b 100644 --- a/core/crypto/crypto.cpp +++ b/core/crypto/crypto.cpp @@ -100,7 +100,7 @@ void Crypto::load_default_certificates(String p_path) { PoolByteArray Crypto::hmac_digest(HashingContext::HashType p_hash_type, PoolByteArray p_key, PoolByteArray p_msg) { Ref ctx = Ref(HMACContext::create()); - ERR_FAIL_COND_V_MSG(ctx.is_null(), PoolByteArray(), "HMAC is not available witout mbedtls module."); + ERR_FAIL_COND_V_MSG(ctx.is_null(), PoolByteArray(), "HMAC is not available without mbedtls module."); Error err = ctx->start(p_hash_type, p_key); ERR_FAIL_COND_V(err != OK, PoolByteArray()); err = ctx->update(p_msg); diff --git a/core/math/octree_definition.inc b/core/math/octree_definition.inc index 3aafa6dce4e..f90b395a57a 100644 --- a/core/math/octree_definition.inc +++ b/core/math/octree_definition.inc @@ -135,7 +135,7 @@ private: Octant *parent; Octant *children[8]; - int children_count; // cache for amount of childrens (fast check for removal) + int children_count; // cache for amount of children (fast check for removal) int parent_index; // cache for parent index (fast check for removal) List pairable_elements; diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 5b2b9ad555c..de663418a94 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -340,7 +340,7 @@ Filmic tonemapper operator. - Academy Color Encoding System tonemapper operator. Performs an aproximation of the ACES tonemapping curve. + Academy Color Encoding System tonemapper operator. Performs an approximation of the ACES tonemapping curve. High quality Academy Color Encoding System tonemapper operator that matches the industry standard. Performs a more physically accurate curve fit which better simulates how light works in the real world. The color of lights and emissive materials will become lighter as the emissive energy increases, and will eventually become white if the light is bright enough to saturate the camera sensor. diff --git a/doc/classes/HMACContext.xml b/doc/classes/HMACContext.xml index ae7c9742e24..eea5c4ed3bc 100644 --- a/doc/classes/HMACContext.xml +++ b/doc/classes/HMACContext.xml @@ -14,7 +14,7 @@ var err = ctx.start(HashingContext.HASH_SHA256, key) assert(err == OK) var msg1 = "this is ".to_utf8() - var msg2 = "vewy vewy secret".to_utf8() + var msg2 = "super duper secret".to_utf8() err = ctx.update(msg1) assert(err == OK) err = ctx.update(msg2) @@ -37,7 +37,7 @@ Error err = ctx.Start(HashingContext.HASH_SHA256, key); GD.Assert(err == OK); PoolByteArray msg1 = String("this is ").to_utf8(); - PoolByteArray msg2 = String("vewy vew secret").to_utf8(); + PoolByteArray msg2 = String("super duper secret").to_utf8(); err = ctx.Update(msg1); GD.Assert(err == OK); err = ctx.Update(msg2); diff --git a/doc/classes/NavigationAgent2D.xml b/doc/classes/NavigationAgent2D.xml index 877c17eddc3..bc3fa79c8c4 100644 --- a/doc/classes/NavigationAgent2D.xml +++ b/doc/classes/NavigationAgent2D.xml @@ -102,7 +102,7 @@ The distance to search for other agents. - The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceded, it recalculates the ideal path. + The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceeded, it recalculates the ideal path. The radius of the agent. diff --git a/doc/classes/NavigationMeshInstance.xml b/doc/classes/NavigationMeshInstance.xml index df723ab3d11..6866f0e2a75 100644 --- a/doc/classes/NavigationMeshInstance.xml +++ b/doc/classes/NavigationMeshInstance.xml @@ -12,7 +12,7 @@ - Bakes the [NavigationMesh]. The baking is done in a seperate thread because navigation baking is not a cheap operation. This can be done at runtime. When it is completed, it automatically sets the new [NavigationMesh]. + Bakes the [NavigationMesh]. The baking is done in a separate thread because navigation baking is not a cheap operation. This can be done at runtime. When it is completed, it automatically sets the new [NavigationMesh]. diff --git a/doc/classes/PoolByteArray.xml b/doc/classes/PoolByteArray.xml index 9301e4ff11b..9bde635a393 100644 --- a/doc/classes/PoolByteArray.xml +++ b/doc/classes/PoolByteArray.xml @@ -50,9 +50,9 @@ Returns a new [PoolByteArray] with the data decompressed. Set the compression mode using one of [enum File.CompressionMode]'s constants. [b]This method only accepts gzip and deflate compression modes.[/b] - This method is potentially slower than [code]decompress[/code], as it may have to re-allocate it's output buffer multiple times while decompressing, where as [code]decompress[/code] knows it's output buffer size from the begining. + This method is potentially slower than [code]decompress[/code], as it may have to re-allocate its output buffer multiple times while decompressing, where as [code]decompress[/code] knows its output buffer size from the beginning. - GZIP has a maximal compression ratio of 1032:1, meaning it's very possible for a small compressed payload to decompress to a potentially very large output. To guard against this, you may provide a maximum size this function is allowed to allocate in bytes via [code]max_output_size[/code]. Passing -1 will allow for unbounded output. If any positive value is passed, and the decompression exceeds that ammount in bytes, then an error will be returned. + GZIP has a maximal compression ratio of 1032:1, meaning it's very possible for a small compressed payload to decompress to a potentially very large output. To guard against this, you may provide a maximum size this function is allowed to allocate in bytes via [code]max_output_size[/code]. Passing -1 will allow for unbounded output. If any positive value is passed, and the decompression exceeds that amount in bytes, then an error will be returned. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 170e8290b87..fdda2d09062 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -1330,7 +1330,7 @@ The default convention is for portal normals to point outward (face outward) from the source room. If you accidentally build your level with portals facing the wrong way, this setting can fix the problem. - It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial convertion to [Portal] nodes. + It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial conversion to [Portal] nodes. Show conversion logs. diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot index 2dd90f52afe..5ba2c39dd33 100644 --- a/doc/translations/classes.pot +++ b/doc/translations/classes.pot @@ -22770,7 +22770,7 @@ msgstr "" #: doc/classes/Environment.xml msgid "" -"Academy Color Encoding System tonemapper operator. Performs an aproximation " +"Academy Color Encoding System tonemapper operator. Performs an approximation " "of the ACES tonemapping curve." msgstr "" diff --git a/drivers/gles3/shader_cache_gles3.cpp b/drivers/gles3/shader_cache_gles3.cpp index 73d04246382..61b033d08d6 100644 --- a/drivers/gles3/shader_cache_gles3.cpp +++ b/drivers/gles3/shader_cache_gles3.cpp @@ -41,7 +41,7 @@ String ShaderCacheGLES3::hash_program(const char *const *p_strings_platform, con CryptoCore::SHA256Context ctx; ctx.start(); - // GL may already reject a binary program if harware/software has changed, but just in case + // GL may already reject a binary program if hardware/software has changed, but just in case for (const char *const *s = p_strings_platform; *s; s++) { uint8_t *bytes = reinterpret_cast(const_cast(*s)); ctx.update(bytes, strlen(*s)); diff --git a/drivers/gles3/shader_gles3.h b/drivers/gles3/shader_gles3.h index 301c058697c..49213d57e18 100644 --- a/drivers/gles3/shader_gles3.h +++ b/drivers/gles3/shader_gles3.h @@ -128,7 +128,7 @@ public: static ShaderCacheGLES3 *shader_cache; static ThreadedCallableQueue *cache_write_queue; - static ThreadedCallableQueue *compile_queue; // Non-null if using queued asynchronous compilation (via seconday context) + static ThreadedCallableQueue *compile_queue; // Non-null if using queued asynchronous compilation (via secondary context) static bool parallel_compile_supported; // True if using natively supported asyncrhonous compilation static bool async_hidden_forbidden; diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 52a310f71da..1733184e8f2 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -1450,7 +1450,7 @@ float EditorSettings::get_auto_display_scale() const { return OS::get_singleton()->get_screen_max_scale(); #else const int screen = OS::get_singleton()->get_current_screen(); - // Use the smallest dimension to use a correct display scale on portait displays. + // Use the smallest dimension to use a correct display scale on portrait displays. const int smallest_dimension = MIN(OS::get_singleton()->get_screen_size(screen).x, OS::get_singleton()->get_screen_size(screen).y); if (OS::get_singleton()->get_screen_dpi(screen) >= 192 && smallest_dimension >= 1400) { // hiDPI display. diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index d4637aab3f5..e4576e1d3fe 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -714,7 +714,7 @@ void ThemeItemImportTree::_import_selected() { return; } - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); ProgressDialog::get_singleton()->add_task("import_theme_items", TTR("Importing Theme Items"), selected_items.size() + 2); @@ -1444,7 +1444,7 @@ void ThemeItemEditorDialog::_add_theme_item(Theme::DataType p_data_type, String void ThemeItemEditorDialog::_remove_data_type_items(Theme::DataType p_data_type, String p_item_type) { List names; - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); edited_theme->get_theme_item_list(p_data_type, p_item_type, &names); @@ -1459,7 +1459,7 @@ void ThemeItemEditorDialog::_remove_data_type_items(Theme::DataType p_data_type, void ThemeItemEditorDialog::_remove_class_items() { List names; - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) { @@ -1483,7 +1483,7 @@ void ThemeItemEditorDialog::_remove_class_items() { void ThemeItemEditorDialog::_remove_custom_items() { List names; - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) { @@ -1507,7 +1507,7 @@ void ThemeItemEditorDialog::_remove_custom_items() { void ThemeItemEditorDialog::_remove_all_items() { List names; - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); for (int dt = 0; dt < Theme::DATA_TYPE_MAX; dt++) { @@ -2498,7 +2498,7 @@ void ThemeTypeEditor::_add_default_type_items() { List names; updating = true; - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); { @@ -2775,7 +2775,7 @@ void ThemeTypeEditor::_update_stylebox_from_leading() { return; } - // Prevent changes from immediatelly being reported while the operation is still ongoing. + // Prevent changes from immediately being reported while the operation is still ongoing. edited_theme->_freeze_change_propagation(); List names; diff --git a/main/main.cpp b/main/main.cpp index 7542996b153..e1741cef9ad 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1949,7 +1949,7 @@ bool Main::start() { String stretch_mode = GLOBAL_DEF("display/window/stretch/mode", "disabled"); String stretch_aspect = GLOBAL_DEF("display/window/stretch/aspect", "ignore"); Size2i stretch_size = Size2(GLOBAL_DEF("display/window/size/width", 0), GLOBAL_DEF("display/window/size/height", 0)); - // out of compatability reasons stretch_scale is called shrink when exposed to the user. + // out of compatibility reasons stretch_scale is called shrink when exposed to the user. real_t stretch_scale = GLOBAL_DEF("display/window/stretch/shrink", 1.0); SceneTree::StretchMode sml_sm = SceneTree::STRETCH_MODE_DISABLED; diff --git a/misc/dist/windows/modpath.pas b/misc/dist/windows/modpath.pas index c55ec60163c..540739850e1 100644 --- a/misc/dist/windows/modpath.pas +++ b/misc/dist/windows/modpath.pas @@ -144,7 +144,7 @@ begin end; end; -// Split a string into an array using passed delimeter +// Split a string into an array using passed delimiter procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String); var i: Integer; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs index cac3e67012a..3f3dd92ad6d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs @@ -702,7 +702,7 @@ namespace Godot /// /// Returns if the string is a path to a file or - /// directory and its startign point is explicitly defined. This includes + /// directory and its starting point is explicitly defined. This includes /// res://, user://, C:\, /, etc. /// /// diff --git a/modules/navigation/godot_navigation_server.cpp b/modules/navigation/godot_navigation_server.cpp index e220cb30f95..d7e5742aa22 100644 --- a/modules/navigation/godot_navigation_server.cpp +++ b/modules/navigation/godot_navigation_server.cpp @@ -41,7 +41,7 @@ */ /// Creates a struct for each function and a function that once called creates -/// an instance of that struct with the submited parameters. +/// an instance of that struct with the submitted parameters. /// Then, that struct is stored in an array; the `sync` function consume that array. #define COMMAND_1(F_NAME, T_0, D_0) \ diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp index 22fdd13e651..fa5c147d765 100644 --- a/modules/navigation/nav_map.cpp +++ b/modules/navigation/nav_map.cpp @@ -668,10 +668,10 @@ void NavMap::sync() { } const float ecm_squared(edge_connection_margin * edge_connection_margin); -#define LEN_TOLLERANCE 0.1 -#define DIR_TOLLERANCE 0.9 - // In front of tollerance -#define IFO_TOLLERANCE 0.5 +#define LEN_TOLERANCE 0.1 +#define DIR_TOLERANCE 0.9 + // In front of tolerance +#define IFO_TOLERANCE 0.5 // Find the compatible near edges. // @@ -693,9 +693,9 @@ void NavMap::sync() { Vector3 rel_centers = other_edge.edge_center - edge.edge_center; if (ecm_squared > rel_centers.length_squared() // Are enough closer? - && ABS(edge.edge_len_squared - other_edge.edge_len_squared) < LEN_TOLLERANCE // Are the same length? - && ABS(edge.edge_dir.dot(other_edge.edge_dir)) > DIR_TOLLERANCE // Are alligned? - && ABS(rel_centers.normalized().dot(edge.edge_dir)) < IFO_TOLLERANCE // Are one in front the other? + && ABS(edge.edge_len_squared - other_edge.edge_len_squared) < LEN_TOLERANCE // Are the same length? + && ABS(edge.edge_dir.dot(other_edge.edge_dir)) > DIR_TOLERANCE // Are aligned? + && ABS(rel_centers.normalized().dot(edge.edge_dir)) < IFO_TOLERANCE // Are one in front the other? ) { // The edges can be connected edge.is_free = false; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 73f7399f1a3..5b58b8c18bb 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -2277,7 +2277,7 @@ String OS_OSX::get_cache_path() const { if (get_environment("XDG_CACHE_HOME").is_abs_path()) { return get_environment("XDG_CACHE_HOME"); } else { - WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Libary/Caches` or `get_config_path()` per the XDG Base Directory specification."); + WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Library/Caches` or `get_config_path()` per the XDG Base Directory specification."); } } if (has_environment("HOME")) { diff --git a/scene/3d/portal.cpp b/scene/3d/portal.cpp index 45eb78dd8de..ebfed6cf25d 100644 --- a/scene/3d/portal.cpp +++ b/scene/3d/portal.cpp @@ -551,7 +551,7 @@ void Portal::_sanitize_points() { // may not be necessary, no idea how fast it is _pts_local = Geometry::convex_hull_2d(raw); - // some pecularity of convex_hull_2d function, it duplicates the last point for some reason + // some peculiarity of convex_hull_2d function, it duplicates the last point for some reason if (_pts_local.size() > 1) { _pts_local.resize(_pts_local.size() - 1); } diff --git a/scene/3d/portal.h b/scene/3d/portal.h index 7b225797dba..7712273ac23 100644 --- a/scene/3d/portal.h +++ b/scene/3d/portal.h @@ -98,7 +98,7 @@ public: static bool _portal_plane_convention; private: - // updates world coords when the tranform changes, and updates the visual server + // updates world coords when the transform changes, and updates the visual server void portal_update(); void set_linked_room_internal(const NodePath &link_path); diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp index d9391833afe..f6fdc51d264 100644 --- a/scene/3d/ray_cast.cpp +++ b/scene/3d/ray_cast.cpp @@ -429,10 +429,10 @@ void RayCast::_update_debug_shape_material(bool p_check_collision) { if (p_check_collision && collided) { if ((color.get_h() < 0.055 || color.get_h() > 0.945) && color.get_s() > 0.5 && color.get_v() > 0.5) { - // If base color is already quite reddish, hightlight collision with green color + // If base color is already quite reddish, highlight collision with green color color = Color(0.0, 1.0, 0.0, color.a); } else { - // Else, hightlight collision with red color + // Else, highlight collision with red color color = Color(1.0, 0, 0, color.a); } } diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 97d507e7a12..a62b81e115f 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -581,7 +581,7 @@ void Control::_notification(int p_notification) { } break; case NOTIFICATION_MOVED_IN_PARENT: { - // some parents need to know the order of the childrens to draw (like TabContainer) + // some parents need to know the order of the children to draw (like TabContainer) // update if necessary if (data.parent) { data.parent->update(); diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 329c5d442f2..3a1249b8fa0 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -176,7 +176,7 @@ void GraphNode::_resort() { } stretch_avail += stretch_diff - sb->get_margin(MARGIN_BOTTOM) - sb->get_margin(MARGIN_TOP); //available stretch space. - /** Second, pass sucessively to discard elements that can't be stretched, this will run while stretchable + /** Second, pass successively to discard elements that can't be stretched, this will run while stretchable elements exist */ while (stretch_ratio_total > 0) { // first of all, don't even be here if no stretchable objects exist diff --git a/servers/arvr/arvr_interface.h b/servers/arvr/arvr_interface.h index 292ed9d1feb..5739f1f298b 100644 --- a/servers/arvr/arvr_interface.h +++ b/servers/arvr/arvr_interface.h @@ -39,7 +39,7 @@ /** @author Bastiaan Olij - The ARVR interface is a template class ontop of which we build interface to different AR, VR and tracking SDKs. + The ARVR interface is a template class on top of which we build interface to different AR, VR and tracking SDKs. The idea is that we subclass this class, implement the logic, and then instantiate a singleton of each interface when Godot starts. These instances do not initialize themselves but register themselves with the AR/VR server. diff --git a/servers/visual/portals/portal_pvs_builder.cpp b/servers/visual/portals/portal_pvs_builder.cpp index 5cbe1fcc80b..7087d355ff4 100644 --- a/servers/visual/portals/portal_pvs_builder.cpp +++ b/servers/visual/portals/portal_pvs_builder.cpp @@ -508,7 +508,7 @@ void PVSBuilder::trace_rooms_recursive(int p_depth, int p_source_room_id, int p_ // if portal is totally inside the planes, don't copy the old planes .. // i.e. we can now cull using the portal and forget about the rest of the frustum (yay) if (overall_res != VSPortal::ClipResult::CLIP_INSIDE) { - // if it WASNT totally inside the existing frustum, we also need to add any existing planes + // if it WASN'T totally inside the existing frustum, we also need to add any existing planes // that cut the portal. for (uint32_t n = 0; n < partial_planes.size(); n++) planes.push_back(p_planes[partial_planes[n]]); @@ -644,7 +644,7 @@ void PVSBuilder::trace_rooms_recursive_simple(int p_depth, int p_source_room_id, // if portal is totally inside the planes, don't copy the old planes .. // i.e. we can now cull using the portal and forget about the rest of the frustum (yay) if (overall_res != VSPortal::ClipResult::CLIP_INSIDE) { - // if it WASNT totally inside the existing frustum, we also need to add any existing planes + // if it WASN'T totally inside the existing frustum, we also need to add any existing planes // that cut the portal. for (uint32_t n = 0; n < partial_planes.size(); n++) planes.push_back(p_planes[partial_planes[n]]); diff --git a/servers/visual/portals/portal_tracer.cpp b/servers/visual/portals/portal_tracer.cpp index 8cbaf073f19..e7f741dd8e9 100644 --- a/servers/visual/portals/portal_tracer.cpp +++ b/servers/visual/portals/portal_tracer.cpp @@ -270,7 +270,7 @@ int PortalTracer::trace_globals(const LocalVector &p_planes, VSInstance * // If we are overriding the camera there is a potential problem in the editor: // gizmos BEHIND the override camera will not be drawn. // As this should be editor only and performance is not critical, we will just disable - // frustum culling for global objects when the camera is overriden. + // frustum culling for global objects when the camera is overridden. for (uint32_t n = 0; n < num_globals; n++) { const PortalRenderer::Moving &moving = _portal_renderer->get_moving_global(n); @@ -490,7 +490,7 @@ void PortalTracer::trace_recursive(const TraceParams &p_params, int p_depth, int // note that this loses the far clipping plane .. but that shouldn't be important usually? // (maybe we might need to account for this in future .. look for issues) if (overall_res != VSPortal::ClipResult::CLIP_INSIDE) { - // if it WASNT totally inside the existing frustum, we also need to add any existing planes + // if it WASN'T totally inside the existing frustum, we also need to add any existing planes // that cut the portal. for (uint32_t n = 0; n < partial_planes.size(); n++) { new_planes.push_back(p_planes[partial_planes[n]]); diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 457aa17713e..b7f6146d884 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -334,7 +334,7 @@ RID VisualServer::get_white_texture() { #define SMALL_VEC2 Vector2(0.00001, 0.00001) #define SMALL_VEC3 Vector3(0.00001, 0.00001, 0.00001) -// Maps normalized vector to an octohedron projected onto the cartesian plane +// Maps normalized vector to an octahedron projected onto the cartesian plane // Resulting 2D vector in range [-1, 1] // See http://jcgt.org/published/0003/02/01/ for details Vector2 VisualServer::norm_to_oct(const Vector3 v) {