Fix typos with codespell
Using codespell 2.1.0. Method: ``` $ cat > ../godot-word-whitelist.txt << EOF ang curvelinear dof doubleclick fave findn GIRD leapyear lod merchantibility nd numer ois ony que readded seeked statics synching te uint unselect webp EOF $ codespell -w -q 3 -I ../godot-word-whitelist.txt --skip="./thirdparty,*.po" $ git diff // undo unwanted changes ```
This commit is contained in:
parent
7da5753f00
commit
b197de6f5f
28 changed files with 45 additions and 45 deletions
|
@ -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<HMACContext> ctx = Ref<HMACContext>(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);
|
||||
|
|
|
@ -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<Element *, AL> pairable_elements;
|
||||
|
|
|
@ -340,7 +340,7 @@
|
|||
Filmic tonemapper operator.
|
||||
</constant>
|
||||
<constant name="TONE_MAPPER_ACES" value="3" enum="ToneMapper">
|
||||
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.
|
||||
</constant>
|
||||
<constant name="TONE_MAPPER_ACES_FITTED" value="4" enum="ToneMapper">
|
||||
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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
The distance to search for other agents.
|
||||
</member>
|
||||
<member name="path_max_distance" type="float" setter="set_path_max_distance" getter="get_path_max_distance" default="3.0">
|
||||
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.
|
||||
</member>
|
||||
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="10.0">
|
||||
The radius of the agent.
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<method name="bake_navigation_mesh">
|
||||
<return type="void" />
|
||||
<description>
|
||||
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].
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
|
|
|
@ -50,9 +50,9 @@
|
|||
<argument index="1" name="compression_mode" type="int" default="0" />
|
||||
<description>
|
||||
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.
|
||||
</description>
|
||||
</method>
|
||||
<method name="empty">
|
||||
|
|
|
@ -1330,7 +1330,7 @@
|
|||
<member name="rendering/portals/advanced/flip_imported_portals" type="bool" setter="" getter="" default="false">
|
||||
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.
|
||||
</member>
|
||||
<member name="rendering/portals/debug/logging" type="bool" setter="" getter="" default="true">
|
||||
Show conversion logs.
|
||||
|
|
|
@ -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 ""
|
||||
|
||||
|
|
|
@ -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<uint8_t *>(const_cast<char *>(*s));
|
||||
ctx.update(bytes, strlen(*s));
|
||||
|
|
|
@ -128,7 +128,7 @@ public:
|
|||
static ShaderCacheGLES3 *shader_cache;
|
||||
static ThreadedCallableQueue<GLuint> *cache_write_queue;
|
||||
|
||||
static ThreadedCallableQueue<GLuint> *compile_queue; // Non-null if using queued asynchronous compilation (via seconday context)
|
||||
static ThreadedCallableQueue<GLuint> *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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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<StringName> 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<StringName> 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<StringName> 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<StringName> 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<StringName> 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<StringName> names;
|
||||
|
|
|
@ -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;
|
||||
|
|
2
misc/dist/windows/modpath.pas
vendored
2
misc/dist/windows/modpath.pas
vendored
|
@ -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;
|
||||
|
|
|
@ -702,7 +702,7 @@ namespace Godot
|
|||
|
||||
/// <summary>
|
||||
/// Returns <see langword="true"/> 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
|
||||
/// <c>res://</c>, <c>user://</c>, <c>C:\</c>, <c>/</c>, etc.
|
||||
/// </summary>
|
||||
/// <seealso cref="IsRelPath(string)"/>
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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")) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
/**
|
||||
@author Bastiaan Olij <mux213@gmail.com>
|
||||
|
||||
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.
|
||||
|
||||
|
|
|
@ -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]]);
|
||||
|
|
|
@ -270,7 +270,7 @@ int PortalTracer::trace_globals(const LocalVector<Plane> &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]]);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue