Java 类org.lwjgl.util.vector.Matrix3f 实例源码

项目:ObsidianSuite    文件:Shape.java   
public static Matrix3f rotationMatrix(float angle, float x, float y, float z)
{
    angle *= (float)Math.PI/180f;
    Vector3f axis = new Vector3f(x,y,z);
    axis.normalise();
    float s = (float)Math.sin(angle);
    float c = (float)Math.cos(angle);
    float oc = 1.0f - c;

    Matrix3f mat = new Matrix3f();
    mat.m00 = oc * axis.x * axis.x + c;
    mat.m01 = oc * axis.x * axis.y - axis.z * s;
    mat.m02 = oc * axis.z * axis .x + axis.y * s;
    mat.m10 = oc * axis.x * axis.y + axis.z * s;
    mat.m11 = oc * axis.y * axis.y + c;
    mat.m12 = oc * axis.y * axis.z - axis.x * s;
    mat.m20 = oc * axis.z * axis.x - axis.y * s;
    mat.m21 = oc * axis.y * axis.z + axis.x * s;
    mat.m22 = oc * axis.z * axis.z + c;
    return mat;
}
项目:VivecraftForgeExtensions    文件:Vector3.java   
public static Matrix3f lookMatrix(Vector3 forward, Vector3 up) {
    Vector3 vector = forward.normalized();
    Vector3 vector2 = up.cross(vector).normalized();
    Vector3 vector3 = vector.cross(vector2);
    Matrix3f matrix = new Matrix3f();
    matrix.m00 = vector2.x;
    matrix.m01 = vector2.y;
    matrix.m02 = vector2.z;
    matrix.m10 = vector3.x;
    matrix.m11 = vector3.y;
    matrix.m12 = vector3.z;
    matrix.m20 = vector.x;
    matrix.m21 = vector.y;
    matrix.m22 = vector.z;
    return matrix;
}
项目:tcn2obj    文件:Shape.java   
public static Matrix3f rotationMatrix(float angle, float x, float y, float z)
{
    angle *= (float)Math.PI/180f;
    Vector3f axis = new Vector3f(x,y,z);
    axis.normalise();
    float s = (float)Math.sin(angle);
    float c = (float)Math.cos(angle);
    float oc = 1.0f - c;

    Matrix3f mat = new Matrix3f();
    mat.m00 = oc * axis.x * axis.x + c;
    mat.m01 = oc * axis.x * axis.y - axis.z * s;
    mat.m02 = oc * axis.z * axis .x + axis.y * s;
       mat.m10 = oc * axis.x * axis.y + axis.z * s;
    mat.m11 = oc * axis.y * axis.y + c;
    mat.m12 = oc * axis.y * axis.z - axis.x * s;
    mat.m20 = oc * axis.z * axis.x - axis.y * s;
    mat.m21 = oc * axis.y * axis.z + axis.x * s;
    mat.m22 = oc * axis.z * axis.z + c;
    return mat;
}
项目:ShearMadness    文件:ClothDeviceTransformations.java   
@Override
public void defineParts() {
    final Matrix4f rotate = new Matrix4f().rotate((float) Math.toRadians(-90), new Vector3f(1, 0, 0));
    bodyPartDefinition = Optional.of(new PartDefinition(
            new Vector3f(0.0f, 5.0f, 2.0f),
            Matrix4f.mul(
                    createPartMatrix(
                            new Vector3f(12, 20, 10),
                            new Vector3f(0, -1, -6)), rotate, null),
            new Matrix3f()
    ));
}
项目:ShearMadness    文件:TeslaCoilTransformations.java   
@Override
public void defineParts() {
    final Matrix4f rotate = new Matrix4f().rotate((float) Math.toRadians(-90), new Vector3f(1, 0, 0));
    bodyPartDefinition = Optional.of(new PartDefinition(
            new Vector3f(0.0f, 5.0f, 2.0f),
            Matrix4f.mul(
                    createPartMatrix(
                            new Vector3f(32, 32, 32),
                            new Vector3f(0, -1, offsetY == null ? 0 : offsetY.get())), rotate, null),
            new Matrix3f()
    ));
}
项目:ShearMadness    文件:EntityMesh.java   
/**
 * Add a BakedQuad to the mesh. It will be processed in batch when the model is rendered for the first time.
 * @param bakedQuads the list of quads to add to the model
 */
public void addBakedQuads(Matrix4f positionTransform, Matrix3f textureTransform, Collection<BakedQuad> bakedQuads)
{
    if (bakedQuads != null && bakedQuads.size() > 0) {
        allBakedQuads.add(new FutureQuad<>(bakedQuads, positionTransform, textureTransform));
    }
}
项目:ShearMadness    文件:PartDefinition.java   
public PartDefinition(Vector3f rotationPoint, Matrix4f positionTransform, Matrix3f textureTransform)
{

    this.rotationPoint = rotationPoint;
    this.positionTransform = positionTransform;
    this.textureTransform = textureTransform;
}
项目:VivecraftForgeExtensions    文件:Util.java   
@SideOnly(Side.CLIENT)
public static Matrix4f matrix3to4(Matrix3f matrix) {
    Matrix4f mat = new Matrix4f();
    mat.m00 = matrix.m00;
    mat.m01 = matrix.m01;
    mat.m02 = matrix.m02;
    mat.m10 = matrix.m10;
    mat.m11 = matrix.m11;
    mat.m12 = matrix.m12;
    mat.m20 = matrix.m20;
    mat.m21 = matrix.m21;
    mat.m22 = matrix.m22;
    return mat;
}
项目:IvToolkit    文件:IvShaderInstance.java   
public boolean setUniformMatrix(String key, Matrix matrix)
{
    if (shaderID <= 0 || !shaderActive)
    {
        return false;
    }

    int width;
    if (matrix instanceof Matrix2f)
        width = 2;
    else if (matrix instanceof Matrix3f)
        width = 3;
    else if (matrix instanceof Matrix4f)
        width = 4;
    else
        throw new IllegalArgumentException();

    FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(width * width);
    matrix.store(floatBuffer);
    floatBuffer.position(0);

    switch (width)
    {
        case 2:
            OpenGlHelper.glUniformMatrix2(getUniformLocation(key), false, floatBuffer);
            break;
        case 3:
            OpenGlHelper.glUniformMatrix3(getUniformLocation(key), false, floatBuffer);
            break;
        default:
            OpenGlHelper.glUniformMatrix4(getUniformLocation(key), false, floatBuffer);
            break;
    }

    return true;
}
项目:OpenGL-Bullet-engine    文件:Quat4.java   
public void set(Matrix3f m1){
    float ww=0.25f*(m1.m00+m1.m11+m1.m22+1.0f);

    if(ww>=0){
        if(ww>=EPS2){
            w=(float)Math.sqrt(ww);
            ww=0.25f/w;
            x=(m1.m21-m1.m12)*ww;
            y=(m1.m02-m1.m20)*ww;
            z=(m1.m10-m1.m01)*ww;
            return;
        }
    }else{
        w=x=y=z=1;
        return;
    }

    w=0;
    ww=-0.5f*(m1.m11+m1.m22);
    if(ww>=0){
        if(ww>=EPS2){
            x=(float)Math.sqrt(ww);
            ww=0.5f/x;
            y=m1.m10*ww;
            z=m1.m20*ww;
            return;
        }
    }else{
        x=0;
        y=0;
        z=1;
        return;
    }

    x=0;
    ww=0.5f*(1.0f-m1.m22);
    if(ww>=EPS2){
        y=(float)Math.sqrt(ww);
        z=m1.m21/(2.0f*y);
        return;
    }

    y=0;
    z=1;
}
项目:ShearMadness    文件:ImmersiveEngineeringPostModelMaker.java   
@Override
public ModelQuadruped createModel(ItemStack itemStack, EntityLivingBase entity)
{
    ModelQuadruped quadruped = super.createModel(itemStack, entity);

    quadruped.body = new ModelRenderer(new ModelSheep1(), 0, 0);
    quadruped.head = createModelRenderer(getTransforms().getHeadPartDefinition().get());

    final EntityMesh mesh = new EntityMesh(quadruped.head);
    quadruped.head.cubeList.add(mesh);

    final Matrix4f antenna1Matrix = new Matrix4f();

    antenna1Matrix.translate(new Vector3f(1, -3, -4));
    antenna1Matrix.scale(new Vector3f(20, -20, 20));
    antenna1Matrix.rotate(fifteenDegrees, new Vector3f(1, 0, 0));
    antenna1Matrix.rotate(-thirtyDegrees, new Vector3f(0, 0, 1));
    antenna1Matrix.rotate(-nintyDegrees, new Vector3f(0, 1, 0));
    antenna1Matrix.translate(new Vector3f(-0.5f, -0.5f, -0.5f));

    final IBakedModel bakedModelForItem = getBakedModelForItem(itemStack, entity);
    addBlockModelToEntityMesh(mesh,
            new PartDefinition(
                    new Vector3f(0, 0, 0),
                    antenna1Matrix,
                    new Matrix3f()),
            null,
            bakedModelForItem
    );

    final Matrix4f antenna2Matrix = new Matrix4f();

    antenna2Matrix.translate(new Vector3f(-1, -3, -4));
    antenna2Matrix.scale(new Vector3f(20, -20, 20));
    antenna2Matrix.rotate(fifteenDegrees, new Vector3f(1, 0, 0));
    antenna2Matrix.rotate(thirtyDegrees, new Vector3f(0, 0, 1));
    antenna2Matrix.rotate(nintyDegrees, new Vector3f(0, 1, 0));
    antenna2Matrix.translate(new Vector3f(-0.5f, -0.5f, -0.5f));

    addBlockModelToEntityMesh(mesh,
            new PartDefinition(
                    new Vector3f(0, 0, 0),
                    antenna2Matrix,
                    new Matrix3f()),
            null,
            bakedModelForItem
    );

    return quadruped;
}
项目:ShearMadness    文件:ImmersiveEngineeringWallMountModelMaker.java   
@Override
public ModelQuadruped createModel(ItemStack itemStack, EntityLivingBase entity)
{
    ModelQuadruped quadruped = super.createModel(itemStack, entity);

    final float nintyDegrees = (float) Math.toRadians(90);

    quadruped.body = new ModelRenderer(new ModelSheep1(), 0, 0);
    quadruped.head = createModelRenderer(getTransforms().getHeadPartDefinition().get());

    final EntityMesh mesh = new EntityMesh(quadruped.head);
    quadruped.head.cubeList.add(mesh);

    final Matrix4f antenna1Matrix = new Matrix4f();

    antenna1Matrix.translate(new Vector3f(8, 0, -2));
    antenna1Matrix.scale(new Vector3f(20, -20, 20));
    antenna1Matrix.rotate(-nintyDegrees, new Vector3f(0, 1, 0));
    antenna1Matrix.translate(new Vector3f(-0.5f, -0.5f, -0.5f));

    final IBakedModel bakedModelForItem = getBakedModelForItem(itemStack, entity);
    addBlockModelToEntityMesh(mesh,
            new PartDefinition(
                    new Vector3f(0, 0, 0),
                    antenna1Matrix,
                    new Matrix3f()),
            null,
            bakedModelForItem
    );

    final Matrix4f antenna2Matrix = new Matrix4f();

    antenna2Matrix.translate(new Vector3f(-8, 0, -2));
    antenna2Matrix.scale(new Vector3f(20, -20, 20));
    antenna2Matrix.rotate(nintyDegrees, new Vector3f(0, 1, 0));
    antenna2Matrix.translate(new Vector3f(-0.5f, -0.5f, -0.5f));

    addBlockModelToEntityMesh(mesh,
            new PartDefinition(
                    new Vector3f(0, 0, 0),
                    antenna2Matrix,
                    new Matrix3f()),
            null,
            bakedModelForItem
    );

    return quadruped;
}
项目:ShearMadness    文件:EntityMesh.java   
public void addTexturedQuads(Matrix4f positionTransform, Matrix3f textureTransform, Collection<TexturedQuad> texturedQuads) {
    if (texturedQuads != null && texturedQuads.size() > 0) {
        allTexturedQuads.add(new FutureQuad<>(texturedQuads, positionTransform, textureTransform));
    }
}
项目:ShearMadness    文件:EntityMesh.java   
public void addTexturedQuads(Matrix4f positionTransform, Matrix3f textureTransform, TexturedQuad... texturedQuads) {
    if (texturedQuads != null && texturedQuads.length > 0) {
        allTexturedQuads.add(new FutureQuad<>(Lists.newArrayList(texturedQuads), positionTransform, textureTransform));
    }
}
项目:ShearMadness    文件:EntityMesh.java   
@SuppressWarnings("ObjectAllocationInLoop")
@Override
@SideOnly(Side.CLIENT)
public void render(VertexBuffer renderer, float scale)
{
    if (quadList == null)
    {
        final List<TexturedQuad> outputQuads = Lists.newArrayList();

        for (final FutureQuad<TexturedQuad> texturedQuads : allTexturedQuads) {
            for (final TexturedQuad texturedQuad : texturedQuads.quads) {
                final PositionTextureVertex[] newPositions = new PositionTextureVertex[4];
                for (int i = 0; i < texturedQuad.vertexPositions.length; i++)
                {
                    final PositionTextureVertex vertexPosition = texturedQuad.vertexPositions[i];
                    @SuppressWarnings("NumericCastThatLosesPrecision")
                    final Vector4f position = new Vector4f((float) vertexPosition.vector3D.xCoord,
                            (float) vertexPosition.vector3D.yCoord,
                            (float) vertexPosition.vector3D.zCoord, 1);

                    final Vector3f textureCoords = new Vector3f(
                            vertexPosition.texturePositionX,
                            vertexPosition.texturePositionY,
                            1);

                    final Vector4f transformedPosition = Matrix4f.transform(texturedQuads.positionTransform, position, null);
                    final Vector3f transformedTexture = Matrix3f.transform(texturedQuads.textureTransform, textureCoords, null);

                    newPositions[i] = new PositionTextureVertex(
                            transformedPosition.getX(),
                            transformedPosition.getY(),
                            transformedPosition.getZ(),
                            transformedTexture.getX(),
                            transformedTexture.getY()
                    );
                }

                outputQuads.add(new TexturedQuad(newPositions));
            }

        }

        for (final FutureQuad<BakedQuad> bakedQuads : allBakedQuads)
        {
            for (final BakedQuad bakedQuad : bakedQuads.quads) {
                try {
                    final VertexConsumer consumer = new VertexConsumer(bakedQuad.getFormat(), bakedQuads.positionTransform, bakedQuads.textureTransform);
                    bakedQuad.pipe(consumer);
                    outputQuads.add(consumer.getOutputQuad());
                } catch (Exception e) {
                    if (!errored) {
                        LogManager.getLogger("ShearMadnessAPI").log(Level.ERROR, "Error creating chiseled model", e);
                    }
                    errored = true;
                }
            }
        }

        quadList = new TexturedQuad[outputQuads.size()];
        quadList = outputQuads.toArray(quadList);
    }

    for (final TexturedQuad texturedquad : quadList)
    {
        texturedquad.draw(renderer, scale);
    }
}
项目:ShearMadness    文件:EntityMesh.java   
FutureQuad(Collection<T> quads, Matrix4f positionTransform, Matrix3f textureTransform) {
    this.quads = quads;
    this.positionTransform = positionTransform;
    this.textureTransform = textureTransform;
}
项目:ShearMadness    文件:VertexConsumer.java   
VertexConsumer(VertexFormat vertexFormat, Matrix4f positionTransform, Matrix3f textureTransform)
{
    this.vertexFormat = vertexFormat;
    this.positionTransform = positionTransform;
    this.textureTransform = textureTransform;
}
项目:ShearMadness    文件:VertexConsumer.java   
@Override
public void put(int element, float... data)
{
    if (element == 0)
    {
        ++currentVertexIndex;
    }

    final VertexFormatElement element1 = vertexFormat.getElement(element);
    switch (element1.getUsage())
    {
        case POSITION:
            if (data.length < 3)
            {
                currentPosition = null;
                return;
            }
            final Vector4f position = new Vector4f(data[0], data[1], data[2], 1);
            final Vector4f transform = Matrix4f.transform(positionTransform, position, null);
            currentPosition = new Vec3d(transform.x, transform.y, transform.z);

            break;
        case UV:
            if (data.length < 2)
            {
                currentTexture = null;
                return;
            }

            final Vector3f uvs = new Vector3f(data[0], data[1], 1);
            final Vector3f transformedTexture = Matrix3f.transform(textureTransform, uvs, null);
            currentTexture = new Vector3f(transformedTexture.x, transformedTexture.y, transformedTexture.z);
            break;
        default:
            break;
    }

    if (element == vertexFormat.getElementCount() - 1)
    {
        if (currentPosition == null || currentTexture == null) {
            String vertexInfo = "";
            for (final VertexFormatElement vertexFormatElement : vertexFormat.getElements()) {
                vertexInfo += String.format("Element %d - %s\n", vertexFormatElement.getIndex(), vertexFormatElement.getUsage());
            }

            throw new RuntimeException("Unexpected Vertex Format:\n" + vertexInfo);
        }

        vertices[currentVertexIndex] = new PositionTextureVertex(currentPosition, currentTexture.x, currentTexture.y);
        currentPosition = null;
        currentTexture = null;
    }
}
项目:ShearMadness    文件:PartDefinition.java   
public Matrix3f getTextureTransform()
{
    return textureTransform;
}
项目:ShearMadness    文件:PartDefinition.java   
public void setTextureTransform(Matrix3f textureTransform)
{
    this.textureTransform = textureTransform;
}
项目:ShearMadness    文件:QuadrupedTransformDefinition.java   
public void defineParts()
{
    final Matrix4f rotate = new Matrix4f().rotate((float) Math.toRadians(-90), new Vector3f(1, 0, 0));
    bodyPartDefinition = Optional.of(new PartDefinition(
            new Vector3f(0.0f, 5.0f, 2.0f),
            Matrix4f.mul(
                    createPartMatrix(
                            new Vector3f(12, 20, 10),
                            new Vector3f(0, -2, -14)), rotate, null),
            new Matrix3f()
    ));

    headPartDefinition = Optional.of(new PartDefinition(
            new Vector3f(0.0f, 6.0f, -8.0f),
            createPartMatrix(
                    new Vector3f(8, 8, 8),
                    new Vector3f(0, -1, -1)),
            new Matrix3f()
    ));

    leg1PartDefinition = Optional.of(new PartDefinition(
            new Vector3f(-3.0f, 12.0f, 7.0f),
            createPartMatrix(
                    new Vector3f(5.6f, 7.4f, 5.6f),
                    new Vector3f(0, 3, 0.1f)),
            new Matrix3f()
    ));

    leg2PartDefinition = Optional.of(new PartDefinition(
            new Vector3f(3.0f, 12.0f, 7.0f),
            createPartMatrix(
                    new Vector3f(5.6f, 7.4f, 5.6f),
                    new Vector3f(0, 3, 0.1f)),
            new Matrix3f()
    ));

    leg3PartDefinition = Optional.of(new PartDefinition(
            new Vector3f(-3.0f, 12.0f, -5.0f),
            createPartMatrix(
                    new Vector3f(5.6f, 7.4f, 5.6f),
                    new Vector3f(0, 3, 0.1f)),
            new Matrix3f()
    ));

    leg4PartDefinition = Optional.of(new PartDefinition(
            new Vector3f(3.0f, 12.0f, -5.0f),
            createPartMatrix(
                    new Vector3f(5.6f, 7.4f, 5.6f),
                    new Vector3f(0, 3, 0.1f)),
            new Matrix3f()
    ));
}
项目:VivecraftForgeExtensions    文件:Vector3.java   
public Vector3 multiply(Matrix3f matrix) {
    float newX = matrix.m00 * x + matrix.m01 * y + matrix.m02 * z;
    float newY = matrix.m10 * x + matrix.m11 * y + matrix.m12 * z;
    float newZ = matrix.m20 * x + matrix.m21 * y + matrix.m22 * z;
    return new Vector3(newX, newY, newZ);
}
项目:VivecraftForgeExtensions    文件:Quaternion.java   
public Quaternion(Matrix3f matrix) {
    this(matrix.m00, matrix.m01, matrix.m02, matrix.m10, matrix.m11, matrix.m12, matrix.m20, matrix.m21, matrix.m22);
}
项目:senjin    文件:UniformMatrix3.java   
public void set(Matrix3f m) {
    m.store(matrixBuffer);
    matrixBuffer.rewind();
}
项目:ObsidianSuite    文件:Shape.java   
/**
 * 
 * @param angle (in degrees)
 * @param x
 * @param y
 * @param z
 */
public void rotate(float angle, float x, float y, float z){
    Matrix3f rotationMatrix = rotationMatrix(angle, x, y, z);
    for (Vertex vertex : vertices){
        Matrix3f.transform(rotationMatrix, vertex.position, vertex.position);
    }
}
项目:tcn2obj    文件:Shape.java   
/**
 * 
 * @param angle (in degrees)
 * @param x
 * @param y
 * @param z
 */
public void rotate(float angle, float x, float y, float z){
    Matrix3f rotationMatrix = rotationMatrix(angle, x, y, z);
    for (Vertex vertex : vertices){
        Matrix3f.transform(rotationMatrix, vertex.position, vertex.position);
    }
}