PoseStack.java
com.mojang.blaze3d.vertex.PoseStack
信息
- 全限定名:com.mojang.blaze3d.vertex.PoseStack
- 类型:public class
- 包:com.mojang.blaze3d.vertex
- 源码路径:src/main/java/com/mojang/blaze3d/vertex/PoseStack.java
- 起始行号:L19
- 职责:
TODO
字段/常量
-
poses- 类型:
List<PoseStack.Pose> - 修饰符:
private final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
lastIndex- 类型:
int - 修饰符:
private - 源码定位:
L21 - 说明:
TODO
- 类型:
内部类/嵌套类型
com.mojang.blaze3d.vertex.PoseStack.Pose- 类型:
class - 修饰符:
public static final - 源码定位:
L90 - 说明:
TODO
- 类型:
构造器
public PoseStack() @ L23
- 构造器名:PoseStack
- 源码定位:L23
- 修饰符:public
参数:
- 无
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void translate(double xo, double yo, double zo) @ L27
- 方法名:translate
- 源码定位:L27
- 返回类型:void
- 修饰符:public
参数:
- xo: double
- yo: double
- zo: double
说明:
TODO
public void translate(float xo, float yo, float zo) @ L31
- 方法名:translate
- 源码定位:L31
- 返回类型:void
- 修饰符:public
参数:
- xo: float
- yo: float
- zo: float
说明:
TODO
public void translate(Vec3 offset) @ L35
- 方法名:translate
- 源码定位:L35
- 返回类型:void
- 修饰符:public
参数:
- offset: Vec3
说明:
TODO
public void scale(float xScale, float yScale, float zScale) @ L39
- 方法名:scale
- 源码定位:L39
- 返回类型:void
- 修饰符:public
参数:
- xScale: float
- yScale: float
- zScale: float
说明:
TODO
public void mulPose(Quaternionfc by) @ L43
- 方法名:mulPose
- 源码定位:L43
- 返回类型:void
- 修饰符:public
参数:
- by: Quaternionfc
说明:
TODO
public void rotateAround(Quaternionfc rotation, float pivotX, float pivotY, float pivotZ) @ L47
- 方法名:rotateAround
- 源码定位:L47
- 返回类型:void
- 修饰符:public
参数:
- rotation: Quaternionfc
- pivotX: float
- pivotY: float
- pivotZ: float
说明:
TODO
public void pushPose() @ L51
- 方法名:pushPose
- 源码定位:L51
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void popPose() @ L61
- 方法名:popPose
- 源码定位:L61
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public PoseStack.Pose last() @ L69
- 方法名:last
- 源码定位:L69
- 返回类型:PoseStack.Pose
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isEmpty() @ L73
- 方法名:isEmpty
- 源码定位:L73
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setIdentity() @ L77
- 方法名:setIdentity
- 源码定位:L77
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void mulPose(Matrix4fc matrix) @ L81
- 方法名:mulPose
- 源码定位:L81
- 返回类型:void
- 修饰符:public
参数:
- matrix: Matrix4fc
说明:
TODO
public void mulPose(Transformation matrix) @ L85
- 方法名:mulPose
- 源码定位:L85
- 返回类型:void
- 修饰符:public
参数:
- matrix: Transformation
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class PoseStack {
private final List<PoseStack.Pose> poses = new ArrayList<>(16);
private int lastIndex;
public PoseStack() {
this.poses.add(new PoseStack.Pose());
}
public void translate(double xo, double yo, double zo) {
this.translate((float)xo, (float)yo, (float)zo);
}
public void translate(float xo, float yo, float zo) {
this.last().translate(xo, yo, zo);
}
public void translate(Vec3 offset) {
this.translate(offset.x, offset.y, offset.z);
}
public void scale(float xScale, float yScale, float zScale) {
this.last().scale(xScale, yScale, zScale);
}
public void mulPose(Quaternionfc by) {
this.last().rotate(by);
}
public void rotateAround(Quaternionfc rotation, float pivotX, float pivotY, float pivotZ) {
this.last().rotateAround(rotation, pivotX, pivotY, pivotZ);
}
public void pushPose() {
PoseStack.Pose lastPose = this.last();
this.lastIndex++;
if (this.lastIndex >= this.poses.size()) {
this.poses.add(lastPose.copy());
} else {
this.poses.get(this.lastIndex).set(lastPose);
}
}
public void popPose() {
if (this.lastIndex == 0) {
throw new NoSuchElementException();
} else {
this.lastIndex--;
}
}
public PoseStack.Pose last() {
return this.poses.get(this.lastIndex);
}
public boolean isEmpty() {
return this.lastIndex == 0;
}
public void setIdentity() {
this.last().setIdentity();
}
public void mulPose(Matrix4fc matrix) {
this.last().mulPose(matrix);
}
public void mulPose(Transformation matrix) {
this.last().mulPose(matrix);
}
@OnlyIn(Dist.CLIENT)
public static final class Pose {
private final Matrix4f pose = new Matrix4f();
private final Matrix3f normal = new Matrix3f();
private boolean trustedNormals = true;
private void computeNormalMatrix() {
this.normal.set(this.pose).invert().transpose();
this.trustedNormals = false;
}
public void set(PoseStack.Pose pose) {
this.pose.set(pose.pose);
this.normal.set(pose.normal);
this.trustedNormals = pose.trustedNormals;
}
public Matrix4f pose() {
return this.pose;
}
public Matrix3f normal() {
return this.normal;
}
public Vector3f transformNormal(Vector3fc normal, Vector3f destination) {
return this.transformNormal(normal.x(), normal.y(), normal.z(), destination);
}
public Vector3f transformNormal(float x, float y, float z, Vector3f destination) {
Vector3f result = this.normal.transform(x, y, z, destination);
return this.trustedNormals ? result : result.normalize();
}
public Matrix4f translate(float xo, float yo, float zo) {
return this.pose.translate(xo, yo, zo);
}
public void scale(float xScale, float yScale, float zScale) {
this.pose.scale(xScale, yScale, zScale);
if (Math.abs(xScale) == Math.abs(yScale) && Math.abs(yScale) == Math.abs(zScale)) {
if (xScale < 0.0F || yScale < 0.0F || zScale < 0.0F) {
this.normal.scale(Math.signum(xScale), Math.signum(yScale), Math.signum(zScale));
}
} else {
this.normal.scale(1.0F / xScale, 1.0F / yScale, 1.0F / zScale);
this.trustedNormals = false;
}
}
public void rotate(Quaternionfc by) {
this.pose.rotate(by);
this.normal.rotate(by);
}
public void rotateAround(Quaternionfc rotation, float pivotX, float pivotY, float pivotZ) {
this.pose.rotateAround(rotation, pivotX, pivotY, pivotZ);
this.normal.rotate(rotation);
}
public void setIdentity() {
this.pose.identity();
this.normal.identity();
this.trustedNormals = true;
}
public void mulPose(Matrix4fc matrix) {
this.pose.mul(matrix);
if (!MatrixUtil.isPureTranslation(matrix)) {
if (MatrixUtil.checkPropertyRaw(matrix, 16)) {
this.normal.mul(new Matrix3f(matrix));
} else {
this.computeNormalMatrix();
}
}
}
public void mulPose(Transformation transformation) {
this.mulPose(transformation.getMatrix());
}
public PoseStack.Pose copy() {
PoseStack.Pose pose = new PoseStack.Pose();
pose.set(this);
return pose;
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
MatrixUtil.checkPropertyRaw(), MatrixUtil.isPureTranslation()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: