aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/Terrain.kt44
-rw-r--r--src/main/resources/skybox/nx.jpgbin0 -> 691739 bytes
-rw-r--r--src/main/resources/skybox/ny.jpgbin0 -> 26645 bytes
-rw-r--r--src/main/resources/skybox/nz.jpgbin0 -> 757745 bytes
-rw-r--r--src/main/resources/skybox/px.jpgbin0 -> 652760 bytes
-rw-r--r--src/main/resources/skybox/py.jpgbin0 -> 47605 bytes
-rw-r--r--src/main/resources/skybox/pz.jpgbin0 -> 729702 bytes
7 files changed, 41 insertions, 3 deletions
diff --git a/src/main/kotlin/Terrain.kt b/src/main/kotlin/Terrain.kt
index 73f0321..8b1bca2 100644
--- a/src/main/kotlin/Terrain.kt
+++ b/src/main/kotlin/Terrain.kt
@@ -13,12 +13,14 @@ import info.laht.threekt.lights.Light
import info.laht.threekt.loaders.TextureLoader
import info.laht.threekt.materials.Material
import info.laht.threekt.materials.MeshPhongMaterial
+import info.laht.threekt.materials.ShaderMaterial
import info.laht.threekt.math.Color
import info.laht.threekt.math.ColorConstants
import info.laht.threekt.objects.Mesh
import info.laht.threekt.renderers.WebGLRenderer
import info.laht.threekt.renderers.WebGLRendererParams
import info.laht.threekt.scenes.Scene
+import info.laht.threekt.textures.CubeTexture
import info.laht.threekt.textures.Texture
import org.w3c.fetch.Request
import kotlin.browser.document
@@ -59,7 +61,7 @@ class Terrain {
scene.add(AmbientLight(0xeeeeee))
- light = DirectionalLight(0xffffff, 0.8)
+ light = DirectionalLight(0xffffff, 1)
.apply {
castShadow = true
position.set(60, 170, -110)
@@ -78,6 +80,8 @@ class Terrain {
controls = OrbitControls(camera, renderer.domElement)
controls.autoRotate = true
+ initSkybox()
+
seedNoise()
generateTerrain()
@@ -225,6 +229,40 @@ class Terrain {
}
}
+ // TODO add wrapper for CubeTextureLoader and ShaderLib
+ private fun initSkybox() {
+ val cubeTexture = js(
+ """new THREE.CubeTextureLoader()
+ .setPath('skybox/')
+ .load([
+ 'px.jpg',
+ 'nx.jpg',
+ 'py.jpg',
+ 'ny.jpg',
+ 'pz.jpg',
+ 'nz.jpg'
+ ]);"""
+ ) as CubeTexture
+
+ cubeTexture.format = THREE.RGBFormat
+
+ val cubeShader = js("THREE.ShaderLib['cube'];")
+ js("cubeShader.uniforms['tCube'].value = cubeTexture;")
+
+ val skyboxMaterial = js(
+ """new THREE.ShaderMaterial({
+ fragmentShader: cubeShader.fragmentShader,
+ vertexShader: cubeShader.vertexShader,
+ uniforms: cubeShader.uniforms,
+ depthWrite: false,
+ side: THREE.BackSide
+ });"""
+ ) as ShaderMaterial
+
+ Mesh(BoxGeometry(1000000, 1000000, 1000000), skyboxMaterial)
+ .also(scene::add)
+ }
+
@Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE")
fun initGui() {
@@ -250,8 +288,8 @@ class Terrain {
(it.add(this.options, "scalingFactor") as NumberController).apply {
min(0)
- .max(50)
- .step(0.1)
+ .max(4)
+ .step(0.05)
.onFinishChange { regenerateTerrain() }
}
diff --git a/src/main/resources/skybox/nx.jpg b/src/main/resources/skybox/nx.jpg
new file mode 100644
index 0000000..1aafd45
--- /dev/null
+++ b/src/main/resources/skybox/nx.jpg
Binary files differ
diff --git a/src/main/resources/skybox/ny.jpg b/src/main/resources/skybox/ny.jpg
new file mode 100644
index 0000000..80da6ed
--- /dev/null
+++ b/src/main/resources/skybox/ny.jpg
Binary files differ
diff --git a/src/main/resources/skybox/nz.jpg b/src/main/resources/skybox/nz.jpg
new file mode 100644
index 0000000..2e791a6
--- /dev/null
+++ b/src/main/resources/skybox/nz.jpg
Binary files differ
diff --git a/src/main/resources/skybox/px.jpg b/src/main/resources/skybox/px.jpg
new file mode 100644
index 0000000..cad1896
--- /dev/null
+++ b/src/main/resources/skybox/px.jpg
Binary files differ
diff --git a/src/main/resources/skybox/py.jpg b/src/main/resources/skybox/py.jpg
new file mode 100644
index 0000000..953d182
--- /dev/null
+++ b/src/main/resources/skybox/py.jpg
Binary files differ
diff --git a/src/main/resources/skybox/pz.jpg b/src/main/resources/skybox/pz.jpg
new file mode 100644
index 0000000..eb7266d
--- /dev/null
+++ b/src/main/resources/skybox/pz.jpg
Binary files differ