pus render
This commit is contained in:
parent
73a5e9d8ba
commit
2ee0ef3483
3 changed files with 54 additions and 35 deletions
|
|
@ -184,9 +184,9 @@ async function main () {
|
|||
const cameraPos = targetPos.offset(2, 2, 2)
|
||||
const pitch = THREE.MathUtils.degToRad(-45)
|
||||
const yaw = THREE.MathUtils.degToRad(45)
|
||||
// viewer.camera.rotation.set(pitch, yaw, 0, 'ZYX')
|
||||
// viewer.camera.lookAt(targetPos.x + 0.5, targetPos.y + 0.5, targetPos.z + 0.5)
|
||||
// viewer.camera.position.set(cameraPos.x + 0.5, cameraPos.y + 0.5, cameraPos.z + 0.5)
|
||||
viewer.camera.rotation.set(pitch, yaw, 0, 'ZYX')
|
||||
viewer.camera.lookAt(targetPos.x + 0.5, targetPos.y + 0.5, targetPos.z + 0.5)
|
||||
viewer.camera.position.set(cameraPos.x + 0.5, cameraPos.y + 0.5, cameraPos.z + 0.5)
|
||||
// controls.update()
|
||||
|
||||
let blockProps = {}
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@ export const makeRender = () => {
|
|||
renderLoop()
|
||||
}
|
||||
|
||||
let CubePositions = [] as [number, number, number][]
|
||||
export const cubePositions = [] as [number, number, number, string][]
|
||||
|
||||
export const addCubes = (positions: [number, number, number][]) => {
|
||||
CubePositions.push(...positions)
|
||||
// CubePositions.push(...positions)
|
||||
}
|
||||
|
||||
export const initWeblRenderer = async (version) => {
|
||||
|
|
@ -80,12 +80,12 @@ export const initWeblRenderer = async (version) => {
|
|||
])
|
||||
|
||||
// write random coordinates to cube positions xyz ten cubes;
|
||||
for (let i = 0; i < 100_000; i++) {
|
||||
let x = Math.random() * 100 - 50;
|
||||
let y = Math.random() * 100 - 50;
|
||||
let z = Math.random() * 100 - 100;
|
||||
CubePositions.push([x, y, z]);
|
||||
}
|
||||
// for (let i = 0; i < 100_000; i++) {
|
||||
// let x = Math.random() * 100 - 50;
|
||||
// let y = Math.random() * 100 - 50;
|
||||
// let z = Math.random() * 100 - 100;
|
||||
// CubePositions.push([x, y, z]);
|
||||
// }
|
||||
|
||||
let VBO, VAO = gl.createVertexArray();
|
||||
VBO = gl.createBuffer();
|
||||
|
|
@ -142,6 +142,12 @@ export const initWeblRenderer = async (version) => {
|
|||
if (code === 'KeyD') {
|
||||
viewer.camera.position.x += 1
|
||||
}
|
||||
if (code === 'ShiftLeft') {
|
||||
viewer.camera.position.y += 0.5
|
||||
}
|
||||
if (code === 'Space') {
|
||||
viewer.camera.position.y -= 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
window.addEventListener('keydown', keys)
|
||||
|
|
@ -234,11 +240,12 @@ export const initWeblRenderer = async (version) => {
|
|||
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height)
|
||||
|
||||
view = m4.identity();
|
||||
// view = viewer.camera.matrix.elements
|
||||
const yaw = viewer.camera.rotation.y
|
||||
const pitch = viewer.camera.rotation.x
|
||||
m4.rotateX(view, yaw * Math.PI / 180, view)
|
||||
m4.rotateY(view, pitch * Math.PI / 180, view)
|
||||
m4.translate(view, [viewer.camera.position.x, viewer.camera.position.y, viewer.camera.position.z], view)
|
||||
m4.translate(view, [-viewer.camera.position.x, -viewer.camera.position.y, -viewer.camera.position.z], view)
|
||||
|
||||
gl.clearColor(0.1, 0, 0, 0);
|
||||
gl.clear(gl.COLOR_BUFFER_BIT)
|
||||
|
|
@ -255,25 +262,35 @@ export const initWeblRenderer = async (version) => {
|
|||
|
||||
|
||||
let i = 0
|
||||
CubePositions.forEach((cubePosition) => {
|
||||
const model = m4.identity()
|
||||
// CubePositions = [[
|
||||
// 2, 90, 2
|
||||
// ]]
|
||||
const cubePositions = Object.values(viewer.world.newChunks).map((chunk: any) => {
|
||||
return Object.entries(chunk.blocks).map(([pos, block]) => {
|
||||
return [...pos.split(',').map(Number), block] as [number, number, number, string]
|
||||
})
|
||||
}).flat()
|
||||
cubePositions.forEach(([x, y, z, name]) => {
|
||||
const result = findTextureInBlockStates(name)?.north.texture!
|
||||
if (result) {
|
||||
const model = m4.identity()
|
||||
|
||||
m4.translate(model, [cubePosition[0], cubePosition[1], cubePosition[2]], model);
|
||||
//m4.rotateX(model, performance / 1000*i/800 + Math.random() / 100, model);
|
||||
//m4.rotateY(model, performance / 2500*i/800 + Math.random() / 100, model)
|
||||
//m4.rotateZ(model, Math.random() / 1010, model)
|
||||
const result = findTextureInBlockStates(i % 2 ? 'dirt' : 'cobblestone')?.north.texture!
|
||||
gl.uniformMatrix4fv(ModelUniform, false, model);
|
||||
// const u = 4 * 1 / 64;
|
||||
// const v = 0 * 1 / 64;
|
||||
const u = result.u + result.su
|
||||
const v = result.v
|
||||
gl.uniform2fv(uvUniform, [u, v])
|
||||
//m4.rotateX(model, performance / 1000*i/800 + Math.random() / 100, model);
|
||||
//m4.rotateY(model, performance / 2500*i/800 + Math.random() / 100, model)
|
||||
//m4.rotateZ(model, Math.random() / 1010, model)
|
||||
m4.translate(model, [x, y, z], model);
|
||||
gl.uniformMatrix4fv(ModelUniform, false, model);
|
||||
// const u = 4 * 1 / 64;
|
||||
// const v = 0 * 1 / 64;
|
||||
const u = result.u + result.su
|
||||
const v = result.v
|
||||
gl.uniform2fv(uvUniform, [u, v])
|
||||
|
||||
i++
|
||||
// i %= 800;
|
||||
i++
|
||||
// i %= 800;
|
||||
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 36);
|
||||
gl.drawArrays(gl.TRIANGLES, 0, 36);
|
||||
}
|
||||
})
|
||||
///model.translate([0, 0, 0], model)
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import { toMajor } from './version.js'
|
|||
import PrismarineChatLoader from 'prismarine-chat'
|
||||
import { renderSign } from '../sign-renderer/'
|
||||
import { chunkPos, sectionPos } from './simpleUtils'
|
||||
import { addCubes } from '../../examples/webglRenderer'
|
||||
import { addCubes, cubePositions } from '../../examples/webglRenderer'
|
||||
|
||||
function mod (x, n) {
|
||||
return ((x % n) + n) % n
|
||||
|
|
@ -57,6 +57,7 @@ export class WorldRenderer {
|
|||
droppedFpsPercentage = 0
|
||||
initialChunksLoad = true
|
||||
enableChunksLoadDelay = false
|
||||
newChunks = {}
|
||||
|
||||
texturesVersion?: string
|
||||
|
||||
|
|
@ -88,9 +89,10 @@ export class WorldRenderer {
|
|||
const chunkCoords = data.key.split(',')
|
||||
if (/* !this.loadedChunks[chunkCoords[0] + ',' + chunkCoords[2]] || */ !this.active) return
|
||||
|
||||
addCubes(Object.entries(data.geometry.blocks).map(([pos, block]) => {
|
||||
return pos.split(',').map(Number) as [number, number, number]
|
||||
}))
|
||||
this.newChunks[data.key] = data.geometry
|
||||
// cubePositions.push(...Object.entries(data.geometry.blocks).map(([pos, block]) => {
|
||||
// return [...pos.split(',').map(Number), block] as [number, number, number, string]
|
||||
// }))
|
||||
|
||||
|
||||
// if (!this.initialChunksLoad && this.enableChunksLoadDelay) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue