• Stars
    star
    205
  • Rank 191,264 (Top 4 %)
  • Language
    Kotlin
  • License
    MIT License
  • Created over 5 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Three.js port for the JVM (desktop)

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.