3D AI Chat
3D-режим:
Привет, оператор. Я в сети. Чем могу помочь?
Выберите режим ответа:
// === 3D AVATAR SYSTEM ===
let scene, camera, renderer, model;
let is3DActive = true;
function init3DAvatar() {
const container = document.getElementById('canvas-container');
// Создаём сцену
scene = new THREE.Scene();
scene.background = new THREE.Color(0x000a1a);
// Камера
camera = new THREE.PerspectiveCamera(50, container.clientWidth / 200, 0.1, 1000);
camera.position.set(0, 0, 5);
// Рендерер
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(container.clientWidth, 200);
renderer.setPixelRatio(window.devicePixelRatio);
container.appendChild(renderer.domElement);
// Свет
const ambientLight = new THREE.AmbientLight(0x00e6ff, 0.5);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0x00ffff, 1);
directionalLight.position.set(5, 5, 5);
scene.add(directionalLight);
// Загрузка модели
const loader = new THREE.GLTFLoader();
loader.load(
'3d/avatar.glb',
(gltf) => {
model = gltf.scene;
model.scale.set(2, 2, 2);
model.rotation.y = Math.PI;
scene.add(model);
},
undefined,
(error) => {
console.error('Ошибка загрузки 3D-модели:', error);
}
);
// Управление мышью
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
controls.dampingFactor = 0.05;
controls.enableZoom = false;
// Анимация вращения
function animate() {
requestAnimationFrame(animate);
if (model) model.rotation.y += 0.005;
controls.update();
renderer.render(scene, camera);
}
animate();
// Адаптация под размер
window.addEventListener('resize', () => {
camera.aspect = container.clientWidth / 200;
camera.updateProjectionMatrix();
renderer.setSize(container.clientWidth, 200);
});
}
function show3DAvatar() {
if (!is3DActive) return;
const container = document.getElementById('canvas-container');
container.style.display = 'block';
if (!scene) init3DAvatar();
}
function hide3DAvatar() {
document.getElementById('canvas-container').style.display = 'none';
}
function set3DMode(mode) {
is3DActive = mode === 'on';
if (!is3DActive) hide3DAvatar();
document.querySelector('[onclick="set3DMode(\'on\')"]').style.background = mode === 'on' ? '#00e6ff' : '#333';
document.querySelector('[onclick="set3DMode(\'off\')"]').style.background = mode === 'off' ? '#ff0066' : '#333';
}
// === ИНТЕГРАЦИЯ С ЧАТОМ ===
// Замените конец send() на:
/*
messages.innerHTML += `
${reply}
`;
messages.scrollTop = messages.scrollHeight;
// Показ 3D-аватара + озвучка
show3DAvatar();
setTimeout(() => speakText(reply), 500); // Задержка для плавности
// Через 5 сек убираем
setTimeout(hide3DAvatar, 5000);
*/