Change the rotate function of Spatial to be local, makes more sense. Closes #14569
This commit is contained in:
parent
b8c849205c
commit
c1153f5041
4 changed files with 17 additions and 7 deletions
|
@ -311,6 +311,15 @@ void Basis::rotate(const Vector3 &p_axis, real_t p_phi) {
|
||||||
*this = rotated(p_axis, p_phi);
|
*this = rotated(p_axis, p_phi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Basis::rotate_local(const Vector3 &p_axis, real_t p_phi) {
|
||||||
|
|
||||||
|
*this = rotated_local(p_axis, p_phi);
|
||||||
|
}
|
||||||
|
Basis Basis::rotated_local(const Vector3 &p_axis, real_t p_phi) const {
|
||||||
|
|
||||||
|
return (*this) * Basis(p_axis, p_phi);
|
||||||
|
}
|
||||||
|
|
||||||
Basis Basis::rotated(const Vector3 &p_euler) const {
|
Basis Basis::rotated(const Vector3 &p_euler) const {
|
||||||
return Basis(p_euler) * (*this);
|
return Basis(p_euler) * (*this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,9 @@ public:
|
||||||
void rotate(const Vector3 &p_axis, real_t p_phi);
|
void rotate(const Vector3 &p_axis, real_t p_phi);
|
||||||
Basis rotated(const Vector3 &p_axis, real_t p_phi) const;
|
Basis rotated(const Vector3 &p_axis, real_t p_phi) const;
|
||||||
|
|
||||||
|
void rotate_local(const Vector3 &p_axis, real_t p_phi);
|
||||||
|
Basis rotated_local(const Vector3 &p_axis, real_t p_phi) const;
|
||||||
|
|
||||||
void rotate(const Vector3 &p_euler);
|
void rotate(const Vector3 &p_euler);
|
||||||
Basis rotated(const Vector3 &p_euler) const;
|
Basis rotated(const Vector3 &p_euler) const;
|
||||||
|
|
||||||
|
|
|
@ -558,27 +558,27 @@ bool Spatial::is_visible() const {
|
||||||
void Spatial::rotate(const Vector3 &p_normal, float p_radians) {
|
void Spatial::rotate(const Vector3 &p_normal, float p_radians) {
|
||||||
|
|
||||||
Transform t = get_transform();
|
Transform t = get_transform();
|
||||||
t.basis.rotate(p_normal, p_radians);
|
t.basis.rotate_local(p_normal, p_radians); //use local rotation here, as it makes more sense here in tree hierarchy
|
||||||
set_transform(t);
|
set_transform(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spatial::rotate_x(float p_radians) {
|
void Spatial::rotate_x(float p_radians) {
|
||||||
|
|
||||||
Transform t = get_transform();
|
Transform t = get_transform();
|
||||||
t.basis.rotate(Vector3(1, 0, 0), p_radians);
|
t.basis.rotate_local(Vector3(1, 0, 0), p_radians);
|
||||||
set_transform(t);
|
set_transform(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spatial::rotate_y(float p_radians) {
|
void Spatial::rotate_y(float p_radians) {
|
||||||
|
|
||||||
Transform t = get_transform();
|
Transform t = get_transform();
|
||||||
t.basis.rotate(Vector3(0, 1, 0), p_radians);
|
t.basis.rotate_local(Vector3(0, 1, 0), p_radians);
|
||||||
set_transform(t);
|
set_transform(t);
|
||||||
}
|
}
|
||||||
void Spatial::rotate_z(float p_radians) {
|
void Spatial::rotate_z(float p_radians) {
|
||||||
|
|
||||||
Transform t = get_transform();
|
Transform t = get_transform();
|
||||||
t.basis.rotate(Vector3(0, 0, 1), p_radians);
|
t.basis.rotate_local(Vector3(0, 0, 1), p_radians);
|
||||||
set_transform(t);
|
set_transform(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1799,7 +1799,6 @@ Vector3 VoxelLightBaker::_compute_ray_trace_at_pos(const Vector3 &p_pos, const V
|
||||||
|
|
||||||
void VoxelLightBaker::_lightmap_bake_point(uint32_t p_x, LightMap *p_line) {
|
void VoxelLightBaker::_lightmap_bake_point(uint32_t p_x, LightMap *p_line) {
|
||||||
|
|
||||||
|
|
||||||
LightMap *pixel = &p_line[p_x];
|
LightMap *pixel = &p_line[p_x];
|
||||||
if (pixel->pos == Vector3())
|
if (pixel->pos == Vector3())
|
||||||
return;
|
return;
|
||||||
|
@ -1814,7 +1813,6 @@ void VoxelLightBaker::_lightmap_bake_point(uint32_t p_x, LightMap *p_line) {
|
||||||
// pixel->light = Vector3(1, 1, 1);
|
// pixel->light = Vector3(1, 1, 1);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Error VoxelLightBaker::make_lightmap(const Transform &p_xform, Ref<Mesh> &p_mesh, LightMapData &r_lightmap, bool (*p_bake_time_func)(void *, float, float), void *p_bake_time_ud) {
|
Error VoxelLightBaker::make_lightmap(const Transform &p_xform, Ref<Mesh> &p_mesh, LightMapData &r_lightmap, bool (*p_bake_time_func)(void *, float, float), void *p_bake_time_ud) {
|
||||||
|
@ -1882,7 +1880,7 @@ Error VoxelLightBaker::make_lightmap(const Transform &p_xform, Ref<Mesh> &p_mesh
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
|
|
||||||
thread_process_array(width,this,&VoxelLightBaker::_lightmap_bake_point,&lightmap_ptr[i*width]);
|
thread_process_array(width, this, &VoxelLightBaker::_lightmap_bake_point, &lightmap_ptr[i * width]);
|
||||||
|
|
||||||
lines = MAX(lines, i); //for multithread
|
lines = MAX(lines, i); //for multithread
|
||||||
if (p_bake_time_func) {
|
if (p_bake_time_func) {
|
||||||
|
|
Loading…
Reference in a new issue