Search in sources :

Example 6 with Matrix4f

use of org.terasology.math.geom.Matrix4f in project Terasology by MovingBlocks.

the class ColladaLoader method positionFromFloat16ArrayData.

private Vector3f[] positionFromFloat16ArrayData(float[] inverseBindMatrixArray) {
    Vector3f[] translationVectorArray = new Vector3f[inverseBindMatrixArray.length / 16];
    for (int i = 0; i < inverseBindMatrixArray.length / 16; ++i) {
        int offset = i * 16;
        Matrix4f matrix4f = new Matrix4f(Arrays.copyOfRange(inverseBindMatrixArray, offset, offset + 16));
        Vector3f translationVector = matrix4f.getTranslation();
        translationVectorArray[i] = translationVector;
    }
    return translationVectorArray;
}
Also used : Matrix4f(org.terasology.math.geom.Matrix4f) Vector3f(org.terasology.math.geom.Vector3f)

Example 7 with Matrix4f

use of org.terasology.math.geom.Matrix4f in project Terasology by MovingBlocks.

the class TreeGeneratorLSystem method generate.

@Override
public void generate(BlockManager blockManager, CoreChunk view, Random rand, int posX, int posY, int posZ) {
    Vector3f position = new Vector3f(0f, 0f, 0f);
    Matrix4f rotation = new Matrix4f(new Quat4f(new Vector3f(0f, 0f, 1f), (float) Math.PI / 2f), Vector3f.ZERO, 1.0f);
    float angleOffset = rand.nextFloat(-MAX_ANGLE_OFFSET, MAX_ANGLE_OFFSET);
    Block bark = blockManager.getBlock(barkType);
    Block leaf = blockManager.getBlock(leafType);
    recursiveGenerator.recurse(view, rand, posX, posY, posZ, angleOffset, new CharSequenceIterator(initialAxiom), position, rotation, bark, leaf, 0, this);
}
Also used : Matrix4f(org.terasology.math.geom.Matrix4f) Vector3f(org.terasology.math.geom.Vector3f) Block(org.terasology.world.block.Block) Quat4f(org.terasology.math.geom.Quat4f) CharSequenceIterator(org.terasology.utilities.collection.CharSequenceIterator)

Example 8 with Matrix4f

use of org.terasology.math.geom.Matrix4f in project Terasology by MovingBlocks.

the class RegionOutlineRenderer method renderOverlay.

@Override
public void renderOverlay() {
    if (entityToRegionOutlineMap.isEmpty()) {
        // skip everything if there is nothing to do to avoid possibly costly draw mode changes
        return;
    }
    glDisable(GL_DEPTH_TEST);
    glLineWidth(2);
    Vector3f cameraPosition = worldRenderer.getActiveCamera().getPosition();
    FloatBuffer tempMatrixBuffer44 = BufferUtils.createFloatBuffer(16);
    FloatBuffer tempMatrixBuffer33 = BufferUtils.createFloatBuffer(12);
    material.setFloat("sunlight", 1.0f, true);
    material.setFloat("blockLight", 1.0f, true);
    material.setMatrix4("projectionMatrix", worldRenderer.getActiveCamera().getProjectionMatrix());
    Vector3f worldPos = new Vector3f();
    Vector3f worldPositionCameraSpace = new Vector3f();
    worldPositionCameraSpace.sub(worldPos, cameraPosition);
    Matrix4f matrixCameraSpace = new Matrix4f(new Quat4f(0, 0, 0, 1), worldPositionCameraSpace, 1.0f);
    Matrix4f modelViewMatrix = MatrixUtils.calcModelViewMatrix(worldRenderer.getActiveCamera().getViewMatrix(), matrixCameraSpace);
    MatrixUtils.matrixToFloatBuffer(modelViewMatrix, tempMatrixBuffer44);
    material.setMatrix4("worldViewMatrix", tempMatrixBuffer44, true);
    MatrixUtils.matrixToFloatBuffer(MatrixUtils.calcNormalMatrix(modelViewMatrix), tempMatrixBuffer33);
    material.setMatrix3("normalMatrix", tempMatrixBuffer33, true);
    for (RegionOutlineComponent regionOutline : entityToRegionOutlineMap.values()) {
        material.setFloat3("colorOffset", regionOutline.color.rf(), regionOutline.color.gf(), regionOutline.color.bf(), true);
        drawRegionOutline(regionOutline);
    }
    glEnable(GL_DEPTH_TEST);
}
Also used : Matrix4f(org.terasology.math.geom.Matrix4f) Vector3f(org.terasology.math.geom.Vector3f) FloatBuffer(java.nio.FloatBuffer) Quat4f(org.terasology.math.geom.Quat4f)

Example 9 with Matrix4f

use of org.terasology.math.geom.Matrix4f in project Terasology by MovingBlocks.

the class SkeletonRenderer method renderOpaque.

@Override
public void renderOpaque() {
    Vector3f cameraPosition = worldRenderer.getActiveCamera().getPosition();
    Quat4f worldRot = new Quat4f();
    Vector3f worldPos = new Vector3f();
    Quat4f inverseWorldRot = new Quat4f();
    FloatBuffer tempMatrixBuffer44 = BufferUtils.createFloatBuffer(16);
    FloatBuffer tempMatrixBuffer33 = BufferUtils.createFloatBuffer(12);
    for (EntityRef entity : entityManager.getEntitiesWith(SkeletalMeshComponent.class, LocationComponent.class)) {
        SkeletalMeshComponent skeletalMesh = entity.getComponent(SkeletalMeshComponent.class);
        if (skeletalMesh.mesh == null || skeletalMesh.material == null || skeletalMesh.boneEntities == null || !skeletalMesh.material.isRenderable()) {
            continue;
        }
        AABB aabb;
        MeshAnimation animation = skeletalMesh.animation;
        if (animation != null) {
            aabb = animation.getAabb();
        } else {
            aabb = skeletalMesh.mesh.getStaticAabb();
        }
        LocationComponent location = entity.getComponent(LocationComponent.class);
        location.getWorldRotation(worldRot);
        inverseWorldRot.inverse(worldRot);
        location.getWorldPosition(worldPos);
        float worldScale = location.getWorldScale();
        aabb = aabb.transform(worldRot, worldPos, worldScale);
        if (!worldRenderer.getActiveCamera().hasInSight(aabb)) {
            continue;
        }
        skeletalMesh.material.enable();
        skeletalMesh.material.setFloat("sunlight", 1.0f, true);
        skeletalMesh.material.setFloat("blockLight", 1.0f, true);
        skeletalMesh.material.setFloat3("colorOffset", skeletalMesh.color.rf(), skeletalMesh.color.gf(), skeletalMesh.color.bf(), true);
        skeletalMesh.material.setMatrix4("projectionMatrix", worldRenderer.getActiveCamera().getProjectionMatrix());
        skeletalMesh.material.bindTextures();
        Vector3f worldPositionCameraSpace = new Vector3f();
        worldPositionCameraSpace.sub(worldPos, cameraPosition);
        worldPos.y -= skeletalMesh.heightOffset;
        Matrix4f matrixCameraSpace = new Matrix4f(worldRot, worldPositionCameraSpace, worldScale);
        Matrix4f modelViewMatrix = MatrixUtils.calcModelViewMatrix(worldRenderer.getActiveCamera().getViewMatrix(), matrixCameraSpace);
        MatrixUtils.matrixToFloatBuffer(modelViewMatrix, tempMatrixBuffer44);
        skeletalMesh.material.setMatrix4("worldViewMatrix", tempMatrixBuffer44, true);
        MatrixUtils.matrixToFloatBuffer(MatrixUtils.calcNormalMatrix(modelViewMatrix), tempMatrixBuffer33);
        skeletalMesh.material.setMatrix3("normalMatrix", tempMatrixBuffer33, true);
        skeletalMesh.material.setFloat("sunlight", worldRenderer.getMainLightIntensityAt(worldPos), true);
        skeletalMesh.material.setFloat("blockLight", worldRenderer.getBlockLightIntensityAt(worldPos), true);
        List<Vector3f> bonePositions = Lists.newArrayListWithCapacity(skeletalMesh.mesh.getVertexCount());
        List<Quat4f> boneRotations = Lists.newArrayListWithCapacity(skeletalMesh.mesh.getVertexCount());
        for (Bone bone : skeletalMesh.mesh.getBones()) {
            EntityRef boneEntity = skeletalMesh.boneEntities.get(bone.getName());
            if (boneEntity == null) {
                boneEntity = EntityRef.NULL;
            }
            LocationComponent boneLocation = boneEntity.getComponent(LocationComponent.class);
            if (boneLocation != null) {
                Vector3f pos = boneLocation.getWorldPosition();
                pos.sub(worldPos);
                inverseWorldRot.rotate(pos, pos);
                bonePositions.add(pos);
                Quat4f rot = new Quat4f(inverseWorldRot);
                rot.mul(boneLocation.getWorldRotation());
                boneRotations.add(rot);
            } else {
                logger.warn("Unable to resolve bone \"{}\"", bone.getName());
                bonePositions.add(new Vector3f());
                boneRotations.add(new Quat4f());
            }
        }
        ((OpenGLSkeletalMesh) skeletalMesh.mesh).setScaleTranslate(skeletalMesh.scale, skeletalMesh.translate);
        ((OpenGLSkeletalMesh) skeletalMesh.mesh).render(bonePositions, boneRotations);
    }
}
Also used : FloatBuffer(java.nio.FloatBuffer) LocationComponent(org.terasology.logic.location.LocationComponent) Matrix4f(org.terasology.math.geom.Matrix4f) OpenGLSkeletalMesh(org.terasology.rendering.opengl.OpenGLSkeletalMesh) Vector3f(org.terasology.math.geom.Vector3f) BaseVector3f(org.terasology.math.geom.BaseVector3f) MeshAnimation(org.terasology.rendering.assets.animation.MeshAnimation) Bone(org.terasology.rendering.assets.skeletalmesh.Bone) EntityRef(org.terasology.entitySystem.entity.EntityRef) BaseQuat4f(org.terasology.math.geom.BaseQuat4f) Quat4f(org.terasology.math.geom.Quat4f) AABB(org.terasology.math.AABB)

Example 10 with Matrix4f

use of org.terasology.math.geom.Matrix4f in project Terasology by MovingBlocks.

the class LwjglCanvasRenderer method preRender.

@Override
public void preRender() {
    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 0, 2048f);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    modelView = new Matrix4f();
    modelView.setIdentity();
    modelView.setTranslation(new Vector3f(0, 0, -1024f));
    MatrixUtils.matrixToFloatBuffer(modelView, matrixBuffer);
    glLoadMatrix(matrixBuffer);
    matrixBuffer.rewind();
    requestedCropRegion = Rect2i.createFromMinAndSize(0, 0, Display.getWidth(), Display.getHeight());
    currentTextureCropRegion = requestedCropRegion;
    textureMat.setFloat4(CROPPING_BOUNDARIES_PARAM, requestedCropRegion.minX(), requestedCropRegion.maxX(), requestedCropRegion.minY(), requestedCropRegion.maxY());
}
Also used : Matrix4f(org.terasology.math.geom.Matrix4f) Vector3f(org.terasology.math.geom.Vector3f)

Aggregations

Matrix4f (org.terasology.math.geom.Matrix4f)17 Vector3f (org.terasology.math.geom.Vector3f)12 Quat4f (org.terasology.math.geom.Quat4f)8 FloatBuffer (java.nio.FloatBuffer)4 EntityRef (org.terasology.entitySystem.entity.EntityRef)4 LocationComponent (org.terasology.logic.location.LocationComponent)4 AABB (org.terasology.math.AABB)3 BaseQuat4f (org.terasology.math.geom.BaseQuat4f)2 BaseVector3f (org.terasology.math.geom.BaseVector3f)2 Material (org.terasology.rendering.assets.material.Material)2 CharSequenceIterator (org.terasology.utilities.collection.CharSequenceIterator)2 Quaternionf (org.joml.Quaternionf)1 Vector4f (org.joml.Vector4f)1 LSystemRule (org.terasology.math.LSystemRule)1 Transform (org.terasology.math.Transform)1 MeshAnimation (org.terasology.rendering.assets.animation.MeshAnimation)1 Bone (org.terasology.rendering.assets.skeletalmesh.Bone)1 LightComponent (org.terasology.rendering.logic.LightComponent)1 OpenGLMesh (org.terasology.rendering.opengl.OpenGLMesh)1 OpenGLSkeletalMesh (org.terasology.rendering.opengl.OpenGLSkeletalMesh)1