From 293a6d9553f80c40a249d6029f1cc1c91784a637 Mon Sep 17 00:00:00 2001 From: LabyStudio Date: Mon, 31 Jan 2022 20:15:27 +0100 Subject: [PATCH] refactor project structure, implement tessellator --- .../net/minecraft/client/GameWindow.js | 0 .../net/minecraft/client/Minecraft.js | 0 .../net/minecraft/client/entity/Player.js | 3 +- .../minecraft/client/render/BlockRenderer.js | 81 ++++++++++++++++++ .../minecraft/client/render/Tessellator.js | 38 ++++++++ .../minecraft/client/render/WorldRenderer.js | 16 +++- .../net/minecraft/client/world/Chunk.js | 13 +-- .../minecraft/client/world/ChunkSection.js | 19 ++-- .../net/minecraft/client/world/World.js | 2 +- .../net/minecraft/util/BoundingBox.js | 0 src/{ => js}/net/minecraft/util/Keyboard.js | 0 src/{ => js}/net/minecraft/util/MathHelper.js | 0 src/{ => js}/net/minecraft/util/Timer.js | 0 src/resources/terrain.png | Bin 0 -> 6686 bytes src/start.js | 24 +++--- 15 files changed, 160 insertions(+), 36 deletions(-) rename src/{ => js}/net/minecraft/client/GameWindow.js (100%) rename src/{ => js}/net/minecraft/client/Minecraft.js (100%) rename src/{ => js}/net/minecraft/client/entity/Player.js (99%) create mode 100644 src/js/net/minecraft/client/render/BlockRenderer.js create mode 100644 src/js/net/minecraft/client/render/Tessellator.js rename src/{ => js}/net/minecraft/client/render/WorldRenderer.js (84%) rename src/{ => js}/net/minecraft/client/world/Chunk.js (75%) rename src/{ => js}/net/minecraft/client/world/ChunkSection.js (71%) rename src/{ => js}/net/minecraft/client/world/World.js (98%) rename src/{ => js}/net/minecraft/util/BoundingBox.js (100%) rename src/{ => js}/net/minecraft/util/Keyboard.js (100%) rename src/{ => js}/net/minecraft/util/MathHelper.js (100%) rename src/{ => js}/net/minecraft/util/Timer.js (100%) create mode 100644 src/resources/terrain.png diff --git a/src/net/minecraft/client/GameWindow.js b/src/js/net/minecraft/client/GameWindow.js similarity index 100% rename from src/net/minecraft/client/GameWindow.js rename to src/js/net/minecraft/client/GameWindow.js diff --git a/src/net/minecraft/client/Minecraft.js b/src/js/net/minecraft/client/Minecraft.js similarity index 100% rename from src/net/minecraft/client/Minecraft.js rename to src/js/net/minecraft/client/Minecraft.js diff --git a/src/net/minecraft/client/entity/Player.js b/src/js/net/minecraft/client/entity/Player.js similarity index 99% rename from src/net/minecraft/client/entity/Player.js rename to src/js/net/minecraft/client/entity/Player.js index e05a57f..86a4f95 100644 --- a/src/net/minecraft/client/entity/Player.js +++ b/src/js/net/minecraft/client/entity/Player.js @@ -47,7 +47,8 @@ window.Player = class { } resetPos() { - this.setPos(0, 15, 0); + this.setPos(0, 2, 0); + this.pitch = -90; } setPos(x, y, z) { diff --git a/src/js/net/minecraft/client/render/BlockRenderer.js b/src/js/net/minecraft/client/render/BlockRenderer.js new file mode 100644 index 0000000..695e6ef --- /dev/null +++ b/src/js/net/minecraft/client/render/BlockRenderer.js @@ -0,0 +1,81 @@ +window.BlockRenderer = class { + + constructor(worldRenderer) { + this.worldRenderer = worldRenderer; + this.tessellator = new Tessellator(); + this.tessellator.bindTexture(worldRenderer.terrainTexture); + } + + renderBlock(world, group, typeId, x, y, z) { + let boundingBox = new BoundingBox(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + + for (let face = 0; face < 6; face++) { + this.tessellator.startDrawing(); + this.renderFace(world, typeId, boundingBox, face, x, y, z); + this.tessellator.draw(group); + } + } + + renderFace(world, typeId, boundingBox, face, x, y, z) { + // Vertex mappings + let minX = x + boundingBox.minX; + let minY = y + boundingBox.minY; + let minZ = z + boundingBox.minZ; + let maxX = x + boundingBox.maxX; + let maxY = y + boundingBox.maxY; + let maxZ = z + boundingBox.maxZ; + + // UV Mapping + let textureIndex = typeId; + let minU = (textureIndex % 16) / 16.0; + let maxU = minU + (16 / 256); + let minV = parseInt(textureIndex / 16); // TODO Math.round + let maxV = minV + (16 / 256); + + // Flip V + minV = 1 - minV; + maxV = 1 - maxV; + + if (face === 0) { + this.addBlockCorner(world, face, minX, minY, maxZ, minU, maxV); + this.addBlockCorner(world, face, minX, minY, minZ, minU, minV); + this.addBlockCorner(world, face, maxX, minY, minZ, maxU, minV); + this.addBlockCorner(world, face, maxX, minY, maxZ, maxU, maxV); + } + if (face === 1) { + this.addBlockCorner(world, face, maxX, maxY, maxZ, maxU, maxV); + this.addBlockCorner(world, face, maxX, maxY, minZ, maxU, minV); + this.addBlockCorner(world, face, minX, maxY, minZ, minU, minV); + this.addBlockCorner(world, face, minX, maxY, maxZ, minU, maxV); + } + if (face === 2) { + this.addBlockCorner(world, face, minX, maxY, minZ, maxU, minV); + this.addBlockCorner(world, face, maxX, maxY, minZ, minU, minV); + this.addBlockCorner(world, face, maxX, minY, minZ, minU, maxV); + this.addBlockCorner(world, face, minX, minY, minZ, maxU, maxV); + } + if (face === 3) { + this.addBlockCorner(world, face, minX, maxY, maxZ, minU, minV); + this.addBlockCorner(world, face, minX, minY, maxZ, minU, maxV); + this.addBlockCorner(world, face, maxX, minY, maxZ, maxU, maxV); + this.addBlockCorner(world, face, maxX, maxY, maxZ, maxU, minV); + } + if (face === 4) { + this.addBlockCorner(world, face, minX, maxY, maxZ, maxU, minV); + this.addBlockCorner(world, face, minX, maxY, minZ, minU, minV); + this.addBlockCorner(world, face, minX, minY, minZ, minU, maxV); + this.addBlockCorner(world, face, minX, minY, maxZ, maxU, maxV); + } + if (face === 5) { + this.addBlockCorner(world, face, maxX, minY, maxZ, minU, maxV); + this.addBlockCorner(world, face, maxX, minY, minZ, maxU, maxV); + this.addBlockCorner(world, face, maxX, maxY, minZ, maxU, minV); + this.addBlockCorner(world, face, maxX, maxY, maxZ, minU, minV); + } + } + + addBlockCorner(world, face, x, y, z, u, v) { + this.tessellator.addVertexWithUV(x, y, z, u, v); + } + +} \ No newline at end of file diff --git a/src/js/net/minecraft/client/render/Tessellator.js b/src/js/net/minecraft/client/render/Tessellator.js new file mode 100644 index 0000000..dfb3046 --- /dev/null +++ b/src/js/net/minecraft/client/render/Tessellator.js @@ -0,0 +1,38 @@ +window.Tessellator = class { + + constructor() { + this.material = new THREE.MeshBasicMaterial({ + color: 0xffffff, + side: THREE.BackSide + }); + } + + bindTexture(texture) { + this.material.map = texture; + } + + startDrawing() { + this.verticies = []; + this.uv = []; + } + + addVertexWithUV(x, y, z, u, v) { + this.verticies.push(x); + this.verticies.push(y); + this.verticies.push(z); + + this.uv.push(u); + this.uv.push(v); + } + + draw(group) { + let geometry = new THREE.BufferGeometry(); + geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.verticies), 3)); + geometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(this.uv), 2)); + geometry.setIndex(new THREE.BufferAttribute(new Uint32Array([0, 2, 1, 0, 3, 2]), 1)); + + let mesh = new THREE.Mesh(geometry, this.material); + group.add(mesh); + } + +} \ No newline at end of file diff --git a/src/net/minecraft/client/render/WorldRenderer.js b/src/js/net/minecraft/client/render/WorldRenderer.js similarity index 84% rename from src/net/minecraft/client/render/WorldRenderer.js rename to src/js/net/minecraft/client/render/WorldRenderer.js index 0656c61..60baeed 100644 --- a/src/net/minecraft/client/render/WorldRenderer.js +++ b/src/js/net/minecraft/client/render/WorldRenderer.js @@ -25,14 +25,24 @@ window.WorldRenderer = class { antialias: true }); + // Settings this.webRenderer.shadowMap.enabled = true; this.webRenderer.shadowMap.type = THREE.PCFSoftShadowMap; // default THREE.PCFShadowMap this.webRenderer.autoClear = false; this.webRenderer.setClearColor(0x000000, 0); this.webRenderer.clear(); + // Add lights const nightLight = new THREE.AmbientLight(0x888888, 1.0); this.scene.add(nightLight); + + // Load terrain + this.terrainTexture = new THREE.TextureLoader().load( 'src/resources/terrain.png' ); + this.terrainTexture.magFilter = THREE.NearestFilter; + this.terrainTexture.minFilter = THREE.LinearFilter; + + // Block Renderer + this.blockRenderer = new BlockRenderer(this); } render(partialTicks) { @@ -40,7 +50,7 @@ window.WorldRenderer = class { this.orientCamera(partialTicks); // Render chunks - this.renderChunks(partialTicks); + this.renderChunks(this, partialTicks); // Render window this.webRenderer.render(this.scene, this.camera); @@ -64,7 +74,7 @@ window.WorldRenderer = class { this.camera.updateProjectionMatrix(); } - renderChunks(partialTicks) { + renderChunks(renderer, partialTicks) { let world = this.minecraft.world; const xKeys = Object.keys(world.chunks) @@ -80,7 +90,7 @@ window.WorldRenderer = class { let section = chunk.sections[y]; if (section.dirty) { - section.rebuild(); + section.rebuild(renderer); } } } diff --git a/src/net/minecraft/client/world/Chunk.js b/src/js/net/minecraft/client/world/Chunk.js similarity index 75% rename from src/net/minecraft/client/world/Chunk.js rename to src/js/net/minecraft/client/world/Chunk.js index b718579..bdd88f8 100644 --- a/src/net/minecraft/client/world/Chunk.js +++ b/src/js/net/minecraft/client/world/Chunk.js @@ -1,15 +1,16 @@ window.Chunk = class { - constructor(x, z) { - this.group = new THREE.Object3D(); - + constructor(world, x, z) { + this.world = world; this.x = x; this.z = z; + this.group = new THREE.Object3D(); + // Initialize sections this.sections = []; for (let y = 0; y < 16; y++) { - let section = new ChunkSection(x, y, z); + let section = new ChunkSection(world, x, y, z); this.sections[y] = section; this.group.add(section.group); @@ -20,9 +21,9 @@ window.Chunk = class { return this.sections[y]; } - rebuild() { + rebuild(renderer) { for (let y = 0; y < this.sections.length; y++) { - this.sections[y].rebuild(); + this.sections[y].rebuild(renderer); } } diff --git a/src/net/minecraft/client/world/ChunkSection.js b/src/js/net/minecraft/client/world/ChunkSection.js similarity index 71% rename from src/net/minecraft/client/world/ChunkSection.js rename to src/js/net/minecraft/client/world/ChunkSection.js index aabb776..d049675 100644 --- a/src/net/minecraft/client/world/ChunkSection.js +++ b/src/js/net/minecraft/client/world/ChunkSection.js @@ -4,7 +4,8 @@ window.ChunkSection = class { return 16; } - constructor(x, y, z) { + constructor(world, x, y, z) { + this.world = world; this.x = x; this.y = y; this.z = z; @@ -22,10 +23,11 @@ window.ChunkSection = class { } } - rebuild() { + rebuild(renderer) { this.dirty = false; this.group.clear(); + for (let x = 0; x < ChunkSection.SIZE; x++) { for (let y = 0; y < ChunkSection.SIZE; y++) { for (let z = 0; z < ChunkSection.SIZE; z++) { @@ -36,18 +38,7 @@ window.ChunkSection = class { let absoluteY = this.y * ChunkSection.SIZE + y; let absoluteZ = this.z * ChunkSection.SIZE + z; - // Debug stuff - let color = 0x888888 | (Math.random() * 223); - - let geometry = new THREE.BoxGeometry(1, 1, 1); - let material = new THREE.MeshBasicMaterial({ - color: color - }); - - let cube = new THREE.Mesh(geometry, material); - cube.position.set(absoluteX + 0.5, absoluteY + 0.5, absoluteZ + 0.5); - - this.group.add(cube); + renderer.blockRenderer.renderBlock(this.world, this.group, typeId, absoluteX, absoluteY, absoluteZ); } } } diff --git a/src/net/minecraft/client/world/World.js b/src/js/net/minecraft/client/world/World.js similarity index 98% rename from src/net/minecraft/client/world/World.js rename to src/js/net/minecraft/client/world/World.js index e3d31f9..5229e89 100644 --- a/src/net/minecraft/client/world/World.js +++ b/src/js/net/minecraft/client/world/World.js @@ -70,7 +70,7 @@ window.World = class { let chunk = zArray[z]; if (typeof chunk === 'undefined') { - chunk = new Chunk(x, z); + chunk = new Chunk(this, x, z); this.chunks[x][z] = chunk; this.group.add(chunk.group); } diff --git a/src/net/minecraft/util/BoundingBox.js b/src/js/net/minecraft/util/BoundingBox.js similarity index 100% rename from src/net/minecraft/util/BoundingBox.js rename to src/js/net/minecraft/util/BoundingBox.js diff --git a/src/net/minecraft/util/Keyboard.js b/src/js/net/minecraft/util/Keyboard.js similarity index 100% rename from src/net/minecraft/util/Keyboard.js rename to src/js/net/minecraft/util/Keyboard.js diff --git a/src/net/minecraft/util/MathHelper.js b/src/js/net/minecraft/util/MathHelper.js similarity index 100% rename from src/net/minecraft/util/MathHelper.js rename to src/js/net/minecraft/util/MathHelper.js diff --git a/src/net/minecraft/util/Timer.js b/src/js/net/minecraft/util/Timer.js similarity index 100% rename from src/net/minecraft/util/Timer.js rename to src/js/net/minecraft/util/Timer.js diff --git a/src/resources/terrain.png b/src/resources/terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e796fcb519e0097734a61ade632fe39a5708f5 GIT binary patch literal 6686 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 literal 0 HcmV?d00001 diff --git a/src/start.js b/src/start.js index dad6e6d..7875963 100644 --- a/src/start.js +++ b/src/start.js @@ -47,17 +47,19 @@ loadScripts([ "libraries/three.min.js", // Minecraft Source - "src/net/minecraft/util/Timer.js", - "src/net/minecraft/util/MathHelper.js", - "src/net/minecraft/util/BoundingBox.js", - "src/net/minecraft/util/Keyboard.js", - "src/net/minecraft/client/GameWindow.js", - "src/net/minecraft/client/world/ChunkSection.js", - "src/net/minecraft/client/world/Chunk.js", - "src/net/minecraft/client/world/World.js", - "src/net/minecraft/client/entity/Player.js", - "src/net/minecraft/client/Minecraft.js", - "src/net/minecraft/client/render/WorldRenderer.js" + "src/js/net/minecraft/util/Timer.js", + "src/js/net/minecraft/util/MathHelper.js", + "src/js/net/minecraft/util/BoundingBox.js", + "src/js/net/minecraft/util/Keyboard.js", + "src/js/net/minecraft/client/GameWindow.js", + "src/js/net/minecraft/client/world/ChunkSection.js", + "src/js/net/minecraft/client/world/Chunk.js", + "src/js/net/minecraft/client/world/World.js", + "src/js/net/minecraft/client/entity/Player.js", + "src/js/net/minecraft/client/Minecraft.js", + "src/js/net/minecraft/client/render/Tessellator.js", + "src/js/net/minecraft/client/render/WorldRenderer.js", + "src/js/net/minecraft/client/render/BlockRenderer.js" ]).then(() => { // Remove pre status document.getElementById("pre-status").remove();