Чи можна написати ігровий движок на node js
Хто це вже робив розкажіть з чого треба починати
Ответы
Ответ:
Да
Объяснение:
Начинать нужно с нахождения библиотеки отрисовки базовой графики
Мы будем использовать Three.js
npm install three
И библиотека для локального сервера
npm install express
Давай напишем 3D графику
app.js:
const express = require('express');
const http = require('http');
const path = require('path');
const { Scene, PerspectiveCamera, WebGLRenderer, Raycaster, Vector2, Vector3, BoxGeometry, MeshBasicMaterial, Mesh } = require('three');
const app = express();
const server = http.createServer(app);
const io = require('socket.io')(server);
app.use(express.static(path.join(__dirname, 'public')));
const scene = new Scene();
const camera = new PerspectiveCamera(75, 800 / 600, 0.1, 1000);
const renderer = new WebGLRenderer();
const raycaster = new Raycaster();
const mouse = new Vector2();
camera.position.z = 5;
const geometry = new BoxGeometry();
const material = new MeshBasicMaterial({ color: 0x00ff00 });
const cube = new Mesh(geometry, material);
scene.add(cube);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('mousemove', (data) => {
mouse.x = (data.x / 800) * 2 - 1;
mouse.y = -(data.y / 600) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
const intersects = raycaster.intersectObjects(scene.children);
if (intersects.length > 0) {
intersects[0].object.material.color.set(0xff0000);
}
});
});
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
Использованная технология отрисовки: RayCast
Запуск сервера: node app.js
Откройте браузер и перейдите по адресу http://localhost:3000. При движении мыши над кубом в вашем браузере, его цвет должен измениться на красный. Это простой пример 3D-рейкастинга с использованием Three.js и Node.js.