Search in sources :

Example 1 with Matrix4

use of org.sunflow.math.Matrix4 in project joons-renderer by joonhyublee.

the class JoonsRenderer method buildInstance.

private void buildInstance(JRFiller temp, int i) {
    //render the respective objects with the above defined shaders
    //generic mesh method
    //np is the number of points, or vertices
    api.parameter("points", "point", "vertex", temp.verticesToArray());
    //nt is the number of triangle faces.
    api.parameter("triangles", temp.triangleIndicesToArray());
    api.geometry("Object_" + i, "triangle_mesh");
    api.parameter("shaders", "Shader_" + i);
    api.instance("Object_" + i + ".instance", "Object_" + i);
    //render the respective spheres
    ArrayList<Float> spheres = temp.getSpheres();
    int noOfSpheres = spheres.size() / 4;
    for (int j = 0; j < noOfSpheres; j++) {
        float x = spheres.get(j * 4);
        float y = spheres.get(j * 4 + 1);
        float z = spheres.get(j * 4 + 2);
        float r = spheres.get(j * 4 + 3);
        Matrix4 translate = Matrix4.IDENTITY.multiply(Matrix4.translation(x, y, z));
        Matrix4 scale = Matrix4.IDENTITY.multiply(Matrix4.scale(r, r, r));
        Matrix4 m = Matrix4.IDENTITY;
        m = scale.multiply(m);
        m = translate.multiply(m);
        api.geometry("Sphere_" + i + "_" + j, "sphere");
        api.parameter("shaders", "Shader_" + i);
        api.parameter("transform", m);
        api.instance("Sphere_" + i + "_" + j + ".instance", "Sphere_" + i + "_" + j);
    }
}
Also used : Matrix4(org.sunflow.math.Matrix4)

Example 2 with Matrix4

use of org.sunflow.math.Matrix4 in project JWildfire by thargor6.

the class AddSceneObjectsVisitor method calcTransform.

private Matrix4 calcTransform(PositionableSceneElement pElement) {
    Matrix4 transform = Matrix4.IDENTITY;
    List<Matrix4> transforms = new ArrayList<Matrix4>();
    PositionableSceneElement element = pElement;
    while (element != null) {
        transforms.add(Matrix4.scale(element.getSize().getX(), element.getSize().getY(), element.getSize().getZ()));
        if (MathLib.fabs(element.getOrientation().getAlpha()) > MathLib.EPSILON) {
            transforms.add(Matrix4.rotateX((float) Math.toRadians(element.getOrientation().getAlpha())));
        }
        if (MathLib.fabs(element.getOrientation().getBeta()) > MathLib.EPSILON) {
            transforms.add(Matrix4.rotateY((float) Math.toRadians(element.getOrientation().getBeta())));
        }
        if (MathLib.fabs(element.getOrientation().getGamma()) > MathLib.EPSILON) {
            transforms.add(Matrix4.rotateZ((float) Math.toRadians(element.getOrientation().getGamma())));
        }
        transforms.add(Matrix4.translation(element.getPosition().getX(), element.getPosition().getY(), element.getPosition().getZ()));
        element = element.getParent();
    }
    for (int i = transforms.size() - 1; i >= 0; i--) {
        transform = transform.multiply(transforms.get(i));
    }
    return transform;
}
Also used : PositionableSceneElement(org.jwildfire.create.eden.scene.PositionableSceneElement) ArrayList(java.util.ArrayList) Matrix4(org.sunflow.math.Matrix4)

Example 3 with Matrix4

use of org.sunflow.math.Matrix4 in project JWildfire by thargor6.

the class AddSceneObjectsVisitor method addPositionableSceneElement.

private void addPositionableSceneElement(PositionableSceneElement pSceneElement) {
    Matrix4 matrix = calcTransform(pSceneElement);
    if (pSceneElement instanceof Sphere) {
        Sphere sphere = (Sphere) pSceneElement;
        if (useMatrix) {
            sceneBuilder.addSphere().withShader(sphere.getMaterial()).withTransform().withMatrix(matrix);
        } else {
            sceneBuilder.addSphere().withShader(sphere.getMaterial()).withTransform().withScaleX(sphere.getSize().getX()).withScaleY(sphere.getSize().getY()).withScaleZ(sphere.getSize().getZ()).withTranslateX(sphere.getPosition().getX()).withTranslateY(sphere.getPosition().getY()).withTranslateZ(sphere.getPosition().getZ());
        }
    } else if (pSceneElement instanceof Cylinder) {
        Cylinder cylinder = (Cylinder) pSceneElement;
        if (useMatrix) {
            sceneBuilder.addCylinder().withShader(cylinder.getMaterial()).withTransform().withMatrix(matrix);
        } else {
            sceneBuilder.addCylinder().withShader(cylinder.getMaterial()).withTransform().withScaleX(cylinder.getSize().getX()).withScaleY(cylinder.getSize().getY()).withScaleZ(cylinder.getSize().getZ()).withTranslateX(cylinder.getPosition().getX()).withTranslateY(cylinder.getPosition().getY()).withTranslateZ(cylinder.getPosition().getZ()).withRotateX(cylinder.getOrientation().getAlpha()).withRotateY(cylinder.getOrientation().getBeta()).withRotateZ(cylinder.getOrientation().getGamma());
        }
    } else if (pSceneElement instanceof Box) {
        Box box = (Box) pSceneElement;
        if (useMatrix) {
            sceneBuilder.addBox().withShader(box.getMaterial()).withTransform().withMatrix(matrix);
        } else {
            sceneBuilder.addBox().withShader(box.getMaterial()).withTransform().withScaleX(box.getSize().getX()).withScaleY(box.getSize().getY()).withScaleZ(box.getSize().getZ()).withTranslateX(box.getPosition().getX()).withTranslateY(box.getPosition().getY()).withTranslateZ(box.getPosition().getZ()).withRotateX(box.getOrientation().getAlpha()).withRotateY(box.getOrientation().getBeta()).withRotateZ(box.getOrientation().getGamma());
        }
    } else if (pSceneElement instanceof Mesh) {
        Mesh mesh = (Mesh) pSceneElement;
        if (useMatrix) {
            sceneBuilder.addMesh().withShader(mesh.getMaterial()).withMesh(mesh).withTransform().withMatrix(matrix);
        } else {
            sceneBuilder.addMesh().withShader(mesh.getMaterial()).withMesh(mesh).withTransform().withScaleX(mesh.getSize().getX()).withScaleY(mesh.getSize().getY()).withScaleZ(mesh.getSize().getZ()).withTranslateX(mesh.getPosition().getX()).withTranslateY(mesh.getPosition().getY()).withTranslateZ(mesh.getPosition().getZ());
        }
    } else if (pSceneElement instanceof PointLight) {
        PointLight light = (PointLight) pSceneElement;
        sceneBuilder.addLight().withType(LightType.POINT).withColor(light.getColor().getR(), light.getColor().getG(), light.getColor().getB()).withP(light.getPosition().getX(), light.getPosition().getY(), light.getPosition().getZ()).withPower(light.getIntensity() * 2000000.0);
    } else if (pSceneElement instanceof SkyLight) {
        SkyLight light = (SkyLight) pSceneElement;
        sceneBuilder.addSkyLight().withUp(light.getUp().getX(), light.getUp().getY(), light.getUp().getZ()).withEast(light.getEast().getX(), light.getEast().getY(), light.getEast().getZ()).withSundir(light.getSundir().getX(), light.getSundir().getY(), light.getSundir().getZ()).withTurbidity(light.getTurbidity()).withSamples(light.getSamples());
    } else if (pSceneElement instanceof Camera) {
        Camera camera = (Camera) pSceneElement;
        sceneBuilder.openCamera().withType(CameraType.PINHOLE).withEye(camera.getEye().getX(), camera.getEye().getY(), camera.getEye().getZ()).withTarget(camera.getTarget().getX(), camera.getTarget().getY(), camera.getTarget().getZ()).withUp(camera.getUp().getX(), camera.getUp().getY(), camera.getUp().getZ()).withFov(camera.getFov()).withAspect(camera.getAspect());
    } else if (pSceneElement instanceof Scene || pSceneElement instanceof MaterialGroup) {
    } else {
        System.out.println("Unknown positionable element " + pSceneElement);
    }
}
Also used : Sphere(org.jwildfire.create.eden.scene.primitive.Sphere) Cylinder(org.jwildfire.create.eden.scene.primitive.Cylinder) SkyLight(org.jwildfire.create.eden.scene.light.SkyLight) MaterialGroup(org.jwildfire.create.eden.scene.MaterialGroup) Mesh(org.jwildfire.create.eden.scene.primitive.Mesh) Box(org.jwildfire.create.eden.scene.primitive.Box) Camera(org.jwildfire.create.eden.scene.camera.Camera) PointLight(org.jwildfire.create.eden.scene.light.PointLight) Scene(org.jwildfire.create.eden.scene.Scene) Matrix4(org.sunflow.math.Matrix4)

Aggregations

Matrix4 (org.sunflow.math.Matrix4)3 ArrayList (java.util.ArrayList)1 MaterialGroup (org.jwildfire.create.eden.scene.MaterialGroup)1 PositionableSceneElement (org.jwildfire.create.eden.scene.PositionableSceneElement)1 Scene (org.jwildfire.create.eden.scene.Scene)1 Camera (org.jwildfire.create.eden.scene.camera.Camera)1 PointLight (org.jwildfire.create.eden.scene.light.PointLight)1 SkyLight (org.jwildfire.create.eden.scene.light.SkyLight)1 Box (org.jwildfire.create.eden.scene.primitive.Box)1 Cylinder (org.jwildfire.create.eden.scene.primitive.Cylinder)1 Mesh (org.jwildfire.create.eden.scene.primitive.Mesh)1 Sphere (org.jwildfire.create.eden.scene.primitive.Sphere)1