Popularity
5.4
Growing
Activity
7.0
Growing
146
9
9

Programming language: Kotlin
License: MIT License
Tags: Graphics    

three.kt alternatives and similar libraries

Based on the "Graphics" category.
Alternatively, view three.kt alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of three.kt or a related project?

Add another 'Graphics' Library

README

three.kt (Work in progress)

License: MIT contributions welcome

CI Gitter

Kotlin/JVM port of the popular three.js 3D library (r106).

Be warned, while the basics works, such as:

  • Primitives, Points and TubeGeometry
  • All materials and lights
  • OrbitControls
  • 2D textures
  • Raycasting against Mesh
  • OBJ, MTL and STL loaders
  • Other stuff like mirror, sky and water shaders

a lot of features are still missing and the API can change rapidly.

Right now, this is mostly interesting for developers that want to contribute.

API (subject to changes)

Kotlin

Window(antialias = 4).use { window ->

    val scene = Scene().apply {
        setBackground(Color.aliceblue)
    }

    val camera = PerspectiveCamera(75, window.aspect, 0.1, 1000).apply {
        position.z = 5f
    }

    val renderer = GLRenderer(window.size)

    val box = Mesh(BoxGeometry(1f), MeshBasicMaterial().apply {
        color.set(0x00ff00)
    })
    scene.add(box)

    val clock = Clock()
    val controls = OrbitControls(camera, window)
    window.animate {

        val dt = clock.getDelta()
        box.rotation.x += 1f * dt
        box.rotation.y += 1f * dt

        renderer.render(scene, camera)

    }

}
Java
public class JavaExample {

    public static void main(String[] args) {

        try (Window window = new Window()) {

            Scene scene = new Scene();
            PerspectiveCamera camera = new PerspectiveCamera();
            camera.getPosition().z = 5;
            GLRenderer renderer = new GLRenderer(window.getSize());

            BoxBufferGeometry boxBufferGeometry = new BoxBufferGeometry();
            MeshPhongMaterial boxMaterial = new MeshPhongMaterial();
            boxMaterial.getColor().set(Color.getRoyalblue());

            Mesh box = new Mesh(boxBufferGeometry, boxMaterial);
            scene.add(box);

            MeshBasicMaterial wireframeMaterial = new MeshBasicMaterial();
            wireframeMaterial.getColor().set(0x000000);
            wireframeMaterial.setWireframe(true);
            Mesh wireframe = new Mesh(box.getGeometry().clone(), wireframeMaterial);
            scene.add(wireframe);

            AmbientLight light = new AmbientLight();
            scene.add(light);

            OrbitControls orbitControls = new OrbitControls(camera, window);

            window.animate(() -> {
                renderer.render(scene, camera);
            });

        }

    }

}

Artifacts are available through Maven central:

repositories {
    mavenCentral()
}

dependencies {
    def version = "..."
    implementation "info.laht.threekt:core:$version"
}

Screenshots

seascape points ocean pointlights

Looking for the Kotlin/JS wrapper project?

It has been renamed and moved to here.


*Note that all licence references and agreements mentioned in the three.kt README section above are relevant to that project's source code only.