<commit_before># Kotlin + OpenGL = kool

A simple OpenGL based graphics engine, which works with Desktop Java as well as
in browsers with Javascript/WebGL (and also on Android once I add the platform
bindings)

For now this is just an experiment. However, if you are curious
you can checkout the [javascript demo](https://fabmax.lima-city.de/kool/index.html).

What's working:
- Mesh animation (see [Model Demo](https://fabmax.lima-city.de/kool/index.html?demo=earthDemo), vertex-shader based animation yet to come...)
- OpenStreetMap tile loading (see [OSM Earth Demo](https://fabmax.lima-city.de/kool/index.html?demo=earthDemo))
- Synthie music (see [Synthie Demo](https://fabmax.lima-city.de/kool/index.html?demo=synthieDemo), quite CPU intense...)
- Multi-scene / multi-viewport support
- Some simple UI stuff: Text-Fields, (Toggle-)Buttons, Sliders, Labels
- Meshes with shared geometry
- Instantiatable models (no model loading yet)
- Lazy and delayed texture loading
- Ray picking on scene objects
- Mouse hover events for scene objects
- Simple animations 
- Text rendering using arbitrary fonts. For now character set is fixed but *theoretically* it has unicode support :)
- Mouse controlled camera
- Simple scene graph
- Mesh building functions for several primitive 3D shapes
- Shading with different light (Phong / Gouraud) and color models (vertex, texture or fixed)

Below is the code for a demo scene

## Example:
```kotlin
fun main(args: Array<String>) {
    // Initialize platform and kool context
    val ctx = createContext()
    
    // Create scene contents
    ctx.scenes += scene {<commit_msg>initial implementation of mesh animation<commit_after># Kotlin + OpenGL = kool

A simple OpenGL based graphics engine, which works with Desktop Java as well as
in browsers with Javascript/WebGL (and also on Android once I add the platform
bindings)

For now this is just an experiment. However, if you are curious
you can checkout the [javascript demo](https://fabmax.lima-city.de/kool/index.html).

What's working:
- Mesh animation (see [Model Demo](https://fabmax.lima-city.de/kool/index.html?demo=modelDemo), vertex-shader based animation yet to come...)
- OpenStreetMap tile loading (see [OSM Earth Demo](https://fabmax.lima-city.de/kool/index.html?demo=earthDemo))
- Synthie music (see [Synthie Demo](https://fabmax.lima-city.de/kool/index.html?demo=synthieDemo), quite CPU intense...)
- Multi-scene / multi-viewport support
- Some simple UI stuff: Text-Fields, (Toggle-)Buttons, Sliders, Labels
- Meshes with shared geometry
- Instantiatable models (no model loading yet)
- Lazy and delayed texture loading
- Ray picking on scene objects
- Mouse hover events for scene objects
- Simple animations 
- Text rendering using arbitrary fonts. For now character set is fixed but *theoretically* it has unicode support :)
- Mouse controlled camera
- Simple scene graph
- Mesh building functions for several primitive 3D shapes
- Shading with different light (Phong / Gouraud) and color models (vertex, texture or fixed)

Below is the code for a demo scene

## Example:
```kotlin
fun main(args: Array<String>) {
    // Initialize platform and kool context
    val ctx = createContext()
    
    // Create scene contents
    ctx.scenes += scene {
{'fraction_non_alphanumeric': 0.09266646210494016, 'fraction_numerical': 0.000613685179502915, 'mean_word_length': 4.199362041467305, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '32886', 'n_tokens_mistral': 950, 'n_tokens_neox': 912, 'n_words': 378}