CuboidRotation.java
net.minecraft.client.resources.model.cuboid.CuboidRotation
信息
- 全限定名:net.minecraft.client.resources.model.cuboid.CuboidRotation
- 类型:public record
- 包:net.minecraft.client.resources.model.cuboid
- 源码路径:src/main/java/net/minecraft/client/resources/model/cuboid/CuboidRotation.java
- 起始行号:L14
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
net.minecraft.client.resources.model.cuboid.CuboidRotation.EulerXYZRotation- 类型:
record - 修饰符:
public - 源码定位:
L48 - 说明:
TODO
- 类型:
-
net.minecraft.client.resources.model.cuboid.CuboidRotation.RotationValue- 类型:
interface - 修饰符:
public - 源码定位:
L59 - 说明:
TODO
- 类型:
-
net.minecraft.client.resources.model.cuboid.CuboidRotation.SingleAxisRotation- 类型:
record - 修饰符:
public - 源码定位:
L64 - 说明:
TODO
- 类型:
构造器
public CuboidRotation(Vector3fc origin, CuboidRotation.RotationValue value, boolean rescale) @ L15
- 构造器名:CuboidRotation
- 源码定位:L15
- 修饰符:public
参数:
- origin: Vector3fc
- value: CuboidRotation.RotationValue
- rescale: boolean
说明:
TODO
方法
下面的方法块按源码顺序生成。
private static Matrix4f computeTransform(CuboidRotation.RotationValue value, boolean rescale) @ L19
- 方法名:computeTransform
- 源码定位:L19
- 返回类型:Matrix4f
- 修饰符:private static
参数:
- value: CuboidRotation.RotationValue
- rescale: boolean
说明:
TODO
private static Vector3fc computeRescale(Matrix4fc rotation) @ L29
- 方法名:computeRescale
- 源码定位:L29
- 返回类型:Vector3fc
- 修饰符:private static
参数:
- rotation: Matrix4fc
说明:
TODO
private static float scaleFactorForAxis(Matrix4fc rotation, Direction.Axis axis, Vector3f scratch) @ L37
- 方法名:scaleFactorForAxis
- 源码定位:L37
- 返回类型:float
- 修饰符:private static
参数:
- rotation: Matrix4fc
- axis: Direction.Axis
- scratch: Vector3f
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public record CuboidRotation(Vector3fc origin, CuboidRotation.RotationValue value, boolean rescale, Matrix4fc transform) {
public CuboidRotation(Vector3fc origin, CuboidRotation.RotationValue value, boolean rescale) {
this(origin, value, rescale, computeTransform(value, rescale));
}
private static Matrix4f computeTransform(CuboidRotation.RotationValue value, boolean rescale) {
Matrix4f result = value.transformation();
if (rescale && !MatrixUtil.isIdentity(result)) {
Vector3fc scale = computeRescale(result);
result.scale(scale);
}
return result;
}
private static Vector3fc computeRescale(Matrix4fc rotation) {
Vector3f scratch = new Vector3f();
float scaleX = scaleFactorForAxis(rotation, Direction.Axis.X, scratch);
float scaleY = scaleFactorForAxis(rotation, Direction.Axis.Y, scratch);
float scaleZ = scaleFactorForAxis(rotation, Direction.Axis.Z, scratch);
return scratch.set(scaleX, scaleY, scaleZ);
}
private static float scaleFactorForAxis(Matrix4fc rotation, Direction.Axis axis, Vector3f scratch) {
Vector3f axisUnit = scratch.set(axis.getPositive().getUnitVec3f());
Vector3f transformedAxisUnit = rotation.transformDirection(axisUnit);
float absX = Math.abs(transformedAxisUnit.x);
float absY = Math.abs(transformedAxisUnit.y);
float absZ = Math.abs(transformedAxisUnit.z);
float maxComponent = Math.max(Math.max(absX, absY), absZ);
return 1.0F / maxComponent;
}
@OnlyIn(Dist.CLIENT)
public record EulerXYZRotation(float x, float y, float z) implements CuboidRotation.RotationValue {
@Override
public Matrix4f transformation() {
return new Matrix4f()
.rotationZYX(
this.z * (float) (java.lang.Math.PI / 180.0), this.y * (float) (java.lang.Math.PI / 180.0), this.x * (float) (java.lang.Math.PI / 180.0)
);
}
}
@OnlyIn(Dist.CLIENT)
public interface RotationValue {
Matrix4f transformation();
}
@OnlyIn(Dist.CLIENT)
public record SingleAxisRotation(Direction.Axis axis, float angle) implements CuboidRotation.RotationValue {
@Override
public Matrix4f transformation() {
Matrix4f result = new Matrix4f();
if (this.angle == 0.0F) {
return result;
} else {
Vector3fc rotateAround = this.axis.getPositive().getUnitVec3f();
result.rotation(this.angle * (float) (java.lang.Math.PI / 180.0), rotateAround);
return result;
}
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
MatrixUtil.isIdentity()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: