Merge pull request #60727 from aaronfranke/basis-axis-column
This commit is contained in:
commit
1b2992799b
50 changed files with 285 additions and 305 deletions
|
|
@ -788,8 +788,8 @@ void CPUParticles2D::_particles_process(double p_delta) {
|
|||
if (emission_shape == EMISSION_SHAPE_DIRECTED_POINTS && emission_normals.size() == pc) {
|
||||
Vector2 normal = emission_normals.get(random_idx);
|
||||
Transform2D m2;
|
||||
m2.set_axis(0, normal);
|
||||
m2.set_axis(1, normal.orthogonal());
|
||||
m2.columns[0] = normal;
|
||||
m2.columns[1] = normal.orthogonal();
|
||||
p.velocity = m2.basis_xform(p.velocity);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -114,8 +114,8 @@ void GPUParticles2D::set_use_local_coordinates(bool p_enable) {
|
|||
void GPUParticles2D::_update_particle_emission_transform() {
|
||||
Transform2D xf2d = get_global_transform();
|
||||
Transform3D xf;
|
||||
xf.basis.set_axis(0, Vector3(xf2d.get_axis(0).x, xf2d.get_axis(0).y, 0));
|
||||
xf.basis.set_axis(1, Vector3(xf2d.get_axis(1).x, xf2d.get_axis(1).y, 0));
|
||||
xf.basis.set_column(0, Vector3(xf2d.columns[0].x, xf2d.columns[0].y, 0));
|
||||
xf.basis.set_column(1, Vector3(xf2d.columns[1].x, xf2d.columns[1].y, 0));
|
||||
xf.set_origin(Vector3(xf2d.get_origin().x, xf2d.get_origin().y, 0));
|
||||
|
||||
RS::get_singleton()->particles_set_emission_transform(particles, xf);
|
||||
|
|
@ -346,8 +346,8 @@ void GPUParticles2D::_validate_property(PropertyInfo &property) const {
|
|||
|
||||
void GPUParticles2D::emit_particle(const Transform2D &p_transform2d, const Vector2 &p_velocity2d, const Color &p_color, const Color &p_custom, uint32_t p_emit_flags) {
|
||||
Transform3D transform;
|
||||
transform.basis.set_axis(0, Vector3(p_transform2d.get_axis(0).x, p_transform2d.get_axis(0).y, 0));
|
||||
transform.basis.set_axis(1, Vector3(p_transform2d.get_axis(1).x, p_transform2d.get_axis(1).y, 0));
|
||||
transform.basis.set_column(0, Vector3(p_transform2d.columns[0].x, p_transform2d.columns[0].y, 0));
|
||||
transform.basis.set_column(1, Vector3(p_transform2d.columns[1].x, p_transform2d.columns[1].y, 0));
|
||||
transform.set_origin(Vector3(p_transform2d.get_origin().x, p_transform2d.get_origin().y, 0));
|
||||
Vector3 velocity = Vector3(p_velocity2d.x, p_velocity2d.y, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ void Area3D::_initialize_wind() {
|
|||
Node3D *p_wind_source = Object::cast_to<Node3D>(get_node(wind_source_path));
|
||||
ERR_FAIL_NULL(p_wind_source);
|
||||
Transform3D global_transform = p_wind_source->get_transform();
|
||||
wind_direction = -global_transform.basis.get_axis(Vector3::AXIS_Z).normalized();
|
||||
wind_direction = -global_transform.basis.get_column(Vector3::AXIS_Z).normalized();
|
||||
wind_source = global_transform.origin;
|
||||
temp_magnitude = wind_force_magnitude;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() {
|
|||
|
||||
if (emission_angle_enabled) {
|
||||
Vector3 listenertopos = global_pos - listener_node->get_global_transform().origin;
|
||||
float c = listenertopos.normalized().dot(get_global_transform().basis.get_axis(2).normalized()); //it's z negative
|
||||
float c = listenertopos.normalized().dot(get_global_transform().basis.get_column(2).normalized()); //it's z negative
|
||||
float angle = Math::rad2deg(Math::acos(c));
|
||||
if (angle > emission_angle) {
|
||||
db_att -= -emission_angle_filter_attenuation_db;
|
||||
|
|
|
|||
|
|
@ -144,8 +144,8 @@ void Camera3D::_notification(int p_what) {
|
|||
|
||||
Transform3D Camera3D::get_camera_transform() const {
|
||||
Transform3D tr = get_global_transform().orthonormalized();
|
||||
tr.origin += tr.basis.get_axis(1) * v_offset;
|
||||
tr.origin += tr.basis.get_axis(0) * h_offset;
|
||||
tr.origin += tr.basis.get_column(1) * v_offset;
|
||||
tr.origin += tr.basis.get_column(0) * h_offset;
|
||||
return tr;
|
||||
}
|
||||
|
||||
|
|
@ -307,7 +307,7 @@ Vector3 Camera3D::project_ray_origin(const Point2 &p_pos) const {
|
|||
|
||||
bool Camera3D::is_position_behind(const Vector3 &p_pos) const {
|
||||
Transform3D t = get_global_transform();
|
||||
Vector3 eyedir = -t.basis.get_axis(2).normalized();
|
||||
Vector3 eyedir = -t.basis.get_column(2).normalized();
|
||||
return eyedir.dot(p_pos - t.origin) < near;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -833,8 +833,8 @@ void CPUParticles3D::_particles_process(double p_delta) {
|
|||
Vector3 normal = emission_normals.get(random_idx);
|
||||
Vector2 normal_2d(normal.x, normal.y);
|
||||
Transform2D m2;
|
||||
m2.set_axis(0, normal_2d);
|
||||
m2.set_axis(1, normal_2d.orthogonal());
|
||||
m2.columns[0] = normal_2d;
|
||||
m2.columns[1] = normal_2d.orthogonal();
|
||||
Vector2 velocity_2d(p.velocity.x, p.velocity.y);
|
||||
velocity_2d = m2.basis_xform(velocity_2d);
|
||||
p.velocity.x = velocity_2d.x;
|
||||
|
|
@ -845,9 +845,9 @@ void CPUParticles3D::_particles_process(double p_delta) {
|
|||
Vector3 tangent = v0.cross(normal).normalized();
|
||||
Vector3 bitangent = tangent.cross(normal).normalized();
|
||||
Basis m3;
|
||||
m3.set_axis(0, tangent);
|
||||
m3.set_axis(1, bitangent);
|
||||
m3.set_axis(2, normal);
|
||||
m3.set_column(0, tangent);
|
||||
m3.set_column(1, bitangent);
|
||||
m3.set_column(2, normal);
|
||||
p.velocity = m3.xform(p.velocity);
|
||||
}
|
||||
}
|
||||
|
|
@ -1068,33 +1068,33 @@ void CPUParticles3D::_particles_process(double p_delta) {
|
|||
if (particle_flags[PARTICLE_FLAG_DISABLE_Z]) {
|
||||
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
|
||||
if (p.velocity.length() > 0.0) {
|
||||
p.transform.basis.set_axis(1, p.velocity.normalized());
|
||||
p.transform.basis.set_column(1, p.velocity.normalized());
|
||||
} else {
|
||||
p.transform.basis.set_axis(1, p.transform.basis.get_axis(1));
|
||||
p.transform.basis.set_column(1, p.transform.basis.get_column(1));
|
||||
}
|
||||
p.transform.basis.set_axis(0, p.transform.basis.get_axis(1).cross(p.transform.basis.get_axis(2)).normalized());
|
||||
p.transform.basis.set_axis(2, Vector3(0, 0, 1));
|
||||
p.transform.basis.set_column(0, p.transform.basis.get_column(1).cross(p.transform.basis.get_column(2)).normalized());
|
||||
p.transform.basis.set_column(2, Vector3(0, 0, 1));
|
||||
|
||||
} else {
|
||||
p.transform.basis.set_axis(0, Vector3(Math::cos(p.custom[0]), -Math::sin(p.custom[0]), 0.0));
|
||||
p.transform.basis.set_axis(1, Vector3(Math::sin(p.custom[0]), Math::cos(p.custom[0]), 0.0));
|
||||
p.transform.basis.set_axis(2, Vector3(0, 0, 1));
|
||||
p.transform.basis.set_column(0, Vector3(Math::cos(p.custom[0]), -Math::sin(p.custom[0]), 0.0));
|
||||
p.transform.basis.set_column(1, Vector3(Math::sin(p.custom[0]), Math::cos(p.custom[0]), 0.0));
|
||||
p.transform.basis.set_column(2, Vector3(0, 0, 1));
|
||||
}
|
||||
|
||||
} else {
|
||||
//orient particle Y towards velocity
|
||||
if (particle_flags[PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY]) {
|
||||
if (p.velocity.length() > 0.0) {
|
||||
p.transform.basis.set_axis(1, p.velocity.normalized());
|
||||
p.transform.basis.set_column(1, p.velocity.normalized());
|
||||
} else {
|
||||
p.transform.basis.set_axis(1, p.transform.basis.get_axis(1).normalized());
|
||||
p.transform.basis.set_column(1, p.transform.basis.get_column(1).normalized());
|
||||
}
|
||||
if (p.transform.basis.get_axis(1) == p.transform.basis.get_axis(0)) {
|
||||
p.transform.basis.set_axis(0, p.transform.basis.get_axis(1).cross(p.transform.basis.get_axis(2)).normalized());
|
||||
p.transform.basis.set_axis(2, p.transform.basis.get_axis(0).cross(p.transform.basis.get_axis(1)).normalized());
|
||||
if (p.transform.basis.get_column(1) == p.transform.basis.get_column(0)) {
|
||||
p.transform.basis.set_column(0, p.transform.basis.get_column(1).cross(p.transform.basis.get_column(2)).normalized());
|
||||
p.transform.basis.set_column(2, p.transform.basis.get_column(0).cross(p.transform.basis.get_column(1)).normalized());
|
||||
} else {
|
||||
p.transform.basis.set_axis(2, p.transform.basis.get_axis(0).cross(p.transform.basis.get_axis(1)).normalized());
|
||||
p.transform.basis.set_axis(0, p.transform.basis.get_axis(1).cross(p.transform.basis.get_axis(2)).normalized());
|
||||
p.transform.basis.set_column(2, p.transform.basis.get_column(0).cross(p.transform.basis.get_column(1)).normalized());
|
||||
p.transform.basis.set_column(0, p.transform.basis.get_column(1).cross(p.transform.basis.get_column(2)).normalized());
|
||||
}
|
||||
} else {
|
||||
p.transform.basis.orthonormalize();
|
||||
|
|
@ -1159,7 +1159,7 @@ void CPUParticles3D::_update_particle_data_buffer() {
|
|||
ERR_FAIL_NULL(get_viewport());
|
||||
Camera3D *c = get_viewport()->get_camera_3d();
|
||||
if (c) {
|
||||
Vector3 dir = c->get_global_transform().basis.get_axis(2); //far away to close
|
||||
Vector3 dir = c->get_global_transform().basis.get_column(2); //far away to close
|
||||
|
||||
if (local_coords) {
|
||||
// will look different from Particles in editor as this is based on the camera in the scenetree
|
||||
|
|
|
|||
|
|
@ -594,8 +594,8 @@ void GPUParticlesCollisionHeightField3D::_notification(int p_what) {
|
|||
Camera3D *cam = get_viewport()->get_camera_3d();
|
||||
if (cam) {
|
||||
Transform3D xform = get_global_transform();
|
||||
Vector3 x_axis = xform.basis.get_axis(Vector3::AXIS_X).normalized();
|
||||
Vector3 z_axis = xform.basis.get_axis(Vector3::AXIS_Z).normalized();
|
||||
Vector3 x_axis = xform.basis.get_column(Vector3::AXIS_X).normalized();
|
||||
Vector3 z_axis = xform.basis.get_column(Vector3::AXIS_Z).normalized();
|
||||
float x_len = xform.basis.get_scale().x;
|
||||
float z_len = xform.basis.get_scale().z;
|
||||
|
||||
|
|
|
|||
|
|
@ -887,13 +887,13 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa
|
|||
Color linear_color = light->get_color().srgb_to_linear();
|
||||
if (Object::cast_to<DirectionalLight3D>(light)) {
|
||||
DirectionalLight3D *l = Object::cast_to<DirectionalLight3D>(light);
|
||||
lightmapper->add_directional_light(light->get_bake_mode() == Light3D::BAKE_STATIC, -xf.basis.get_axis(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_SIZE));
|
||||
lightmapper->add_directional_light(light->get_bake_mode() == Light3D::BAKE_STATIC, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_SIZE));
|
||||
} else if (Object::cast_to<OmniLight3D>(light)) {
|
||||
OmniLight3D *l = Object::cast_to<OmniLight3D>(light);
|
||||
lightmapper->add_omni_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SIZE));
|
||||
} else if (Object::cast_to<SpotLight3D>(light)) {
|
||||
SpotLight3D *l = Object::cast_to<SpotLight3D>(light);
|
||||
lightmapper->add_spot_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, -xf.basis.get_axis(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SPOT_ANGLE), l->get_param(Light3D::PARAM_SPOT_ATTENUATION), l->get_param(Light3D::PARAM_SIZE));
|
||||
lightmapper->add_spot_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SPOT_ANGLE), l->get_param(Light3D::PARAM_SPOT_ATTENUATION), l->get_param(Light3D::PARAM_SIZE));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < probes_found.size(); i++) {
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ void PathFollow3D::_update_transform(bool p_update_xyz_rot) {
|
|||
Vector3 sideways = up.cross(forward).normalized();
|
||||
up = forward.cross(sideways).normalized();
|
||||
|
||||
t.basis.set(sideways, up, forward);
|
||||
t.basis.set_columns(sideways, up, forward);
|
||||
t.basis.scale_local(scale);
|
||||
|
||||
t.origin = pos + sideways * h_offset + up * v_offset;
|
||||
|
|
|
|||
|
|
@ -991,7 +991,7 @@ TypedArray<String> RigidDynamicBody3D::get_configuration_warnings() const {
|
|||
|
||||
TypedArray<String> warnings = Node::get_configuration_warnings();
|
||||
|
||||
if (ABS(t.basis.get_axis(0).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(1).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(2).length() - 1.0) > 0.05) {
|
||||
if (ABS(t.basis.get_column(0).length() - 1.0) > 0.05 || ABS(t.basis.get_column(1).length() - 1.0) > 0.05 || ABS(t.basis.get_column(2).length() - 1.0) > 0.05) {
|
||||
warnings.push_back(RTR("Size changes to RigidDynamicBody will be overridden by the physics engine when running.\nChange the size in children collision shapes instead."));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ TypedArray<String> SoftDynamicBody3D::get_configuration_warnings() const {
|
|||
}
|
||||
|
||||
Transform3D t = get_transform();
|
||||
if ((ABS(t.basis.get_axis(0).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(1).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(2).length() - 1.0) > 0.05)) {
|
||||
if ((ABS(t.basis.get_column(0).length() - 1.0) > 0.05 || ABS(t.basis.get_column(1).length() - 1.0) > 0.05 || ABS(t.basis.get_column(2).length() - 1.0) > 0.05)) {
|
||||
warnings.push_back(RTR("Size changes to SoftDynamicBody3D will be overridden by the physics engine when running.\nChange the size in children collision shapes instead."));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -90,8 +90,8 @@ void VehicleWheel3D::_notification(int p_what) {
|
|||
cb->wheels.push_back(this);
|
||||
|
||||
m_chassisConnectionPointCS = get_transform().origin;
|
||||
m_wheelDirectionCS = -get_transform().basis.get_axis(Vector3::AXIS_Y).normalized();
|
||||
m_wheelAxleCS = get_transform().basis.get_axis(Vector3::AXIS_X).normalized();
|
||||
m_wheelDirectionCS = -get_transform().basis.get_column(Vector3::AXIS_Y).normalized();
|
||||
m_wheelAxleCS = get_transform().basis.get_column(Vector3::AXIS_X).normalized();
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_EXIT_TREE: {
|
||||
|
|
@ -684,7 +684,7 @@ void VehicleBody3D::_update_friction(PhysicsDirectBodyState3D *s) {
|
|||
|
||||
Basis wheelBasis0 = wheelInfo.m_worldTransform.basis; //get_global_transform().basis;
|
||||
|
||||
m_axle.write[i] = wheelBasis0.get_axis(Vector3::AXIS_X);
|
||||
m_axle.write[i] = wheelBasis0.get_column(Vector3::AXIS_X);
|
||||
//m_axle[i] = wheelInfo.m_raycastInfo.m_wheelAxleWS;
|
||||
|
||||
const Vector3 &surfNormalWS = wheelInfo.m_raycastInfo.m_contactNormalWS;
|
||||
|
|
|
|||
|
|
@ -577,7 +577,7 @@ Plane XRAnchor3D::get_plane() const {
|
|||
Vector3 location = get_position();
|
||||
Basis orientation = get_transform().basis;
|
||||
|
||||
Plane plane(orientation.get_axis(1).normalized(), location);
|
||||
Plane plane(orientation.get_column(1).normalized(), location);
|
||||
|
||||
return plane;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1023,7 +1023,7 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform,
|
|||
|
||||
// Keep only the scale
|
||||
Basis basis = p_base_transform.get_basis();
|
||||
Vector3 scale = Vector3(basis.get_axis(0).length(), basis.get_axis(1).length(), basis.get_axis(2).length());
|
||||
Vector3 scale = Vector3(basis.get_column(0).length(), basis.get_column(1).length(), basis.get_column(2).length());
|
||||
|
||||
Transform3D transform;
|
||||
transform.scale(scale);
|
||||
|
|
|
|||
|
|
@ -1827,7 +1827,7 @@ Error ArrayMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform, flo
|
|||
|
||||
// Keep only the scale
|
||||
Basis basis = p_base_transform.get_basis();
|
||||
Vector3 scale = Vector3(basis.get_axis(0).length(), basis.get_axis(1).length(), basis.get_axis(2).length());
|
||||
Vector3 scale = Vector3(basis.get_column(0).length(), basis.get_column(1).length(), basis.get_column(2).length());
|
||||
|
||||
Transform3D transform;
|
||||
transform.scale(scale);
|
||||
|
|
|
|||
|
|
@ -5548,9 +5548,9 @@ Transform3D VisualShaderNodeTransformUniform::get_default_value() const {
|
|||
String VisualShaderNodeTransformUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
|
||||
String code = _get_qual_str() + "uniform mat4 " + get_uniform_name();
|
||||
if (default_value_enabled) {
|
||||
Vector3 row0 = default_value.basis.get_row(0);
|
||||
Vector3 row1 = default_value.basis.get_row(1);
|
||||
Vector3 row2 = default_value.basis.get_row(2);
|
||||
Vector3 row0 = default_value.basis.rows[0];
|
||||
Vector3 row1 = default_value.basis.rows[1];
|
||||
Vector3 row2 = default_value.basis.rows[2];
|
||||
Vector3 origin = default_value.origin;
|
||||
code += " = mat4(" + vformat("vec4(%.6f, %.6f, %.6f, 0.0)", row0.x, row0.y, row0.z) + vformat(", vec4(%.6f, %.6f, %.6f, 0.0)", row1.x, row1.y, row1.z) + vformat(", vec4(%.6f, %.6f, %.6f, 0.0)", row2.x, row2.y, row2.z) + vformat(", vec4(%.6f, %.6f, %.6f, 1.0)", origin.x, origin.y, origin.z) + ")";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue