pus render

This commit is contained in:
Vitaly 2024-03-21 23:42:33 +03:00
commit 2ee0ef3483
3 changed files with 54 additions and 35 deletions

View file

@ -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 = {}

View file

@ -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)

View file

@ -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) {