!gpt4o <!DOCTYPE html> <html lang="es"> <head> <meta ch…

RosaAmargada ·

!gpt4o <!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Morphing 3D Geometries with Glow</title>
<body>
<div id="container"></div>
<script>
// Escena, cámara y renderer
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('container').appendChild(renderer.domElement);

// Controles de cámara
const controls = new THREE.OrbitControls(camera, renderer.domElement);
camera.position.z = 5;

// Geometrías para morphing
const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);
const starGeometry = new THREE.StarGeometry(1, 0.5, 5);
const heartGeometry = new THREE.HeartGeometry(1, 0.5, 32);

// Material con glow
const material = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true });

// Mesh inicial
const mesh = new THREE.Mesh(sphereGeometry, material);
scene.add(mesh);

// Post-processing para bloom
const composer = new THREE.EffectComposer(renderer);
const renderPass = new THREE.RenderPass(scene, camera);
composer.addPass(renderPass);

const bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 1.5, 0.4, 0.85);
bloomPass.threshold = 0.1;
bloomPass.strength = 1.2;
bloomPass.radius = 0.8;
composer.addPass(bloomPass);

// Animación de morphing con GSAP
function morphTo(geometry) {
gsap.to(mesh.geometry.attributes.position.array, {
duration: 2,
onUpdate: function() {
mesh.geometry.attributes.position.needsUpdate = true;
},
onComplete: function() {
mesh.geometry.dispose();
mesh.geometry = geometry.clone();
mesh.geometry.attributes.position.needsUpdate = true;
}
});
}

// Exportar a .GLB
function exportGLB() {
const exporter = new THREE.GLTFExporter();
exporter.parse(scene, function(gltf) {
const output = JSON.stringify(gltf, null, 2);
const blob = new Blob([output], { type: 'application/octet-stream' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'scene.glb';
link.click();
}, { binary: true });
}

// Animación
function animate() {
requestAnimationFrame(animate);
controls.update();
composer.render();
}

// Evento para cambiar geometrías
document.addEventListener('keydown', (event) => {
if (event.key === '1') morphTo(sphereGeometry);
if (event.key === '2') morphTo(starGeometry);
if (event.key === '3') morphTo(heartGeometry);
if (event.key === 'e') exportGLB();
});

animate();
</script>
</body>
</html>

!gpt4o <!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"…

Replies

RosaAmargada ·

LoL 😲

treechat ·

!quoted by RosaAmargada

RosaAmargada ·

!gpt4o <!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Morphing Particle System with Dynamic Colors</title>
<style>
body { margin: 0; overflow: hidden; }
canvas { display: block; }
</style>
</head>
<body>
<div id="container"></div>
<script>
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('container').appendChild(renderer.domElement);

const controls = new THREE.OrbitControls(camera, renderer.domElement);
camera.position.z = 5;

const cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
const torusGeometry = new THREE.TorusGeometry(1, 0.4, 16, 100);
const pyramidGeometry = new THREE.ConeGeometry(1, 2, 4);

const material = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true });

const mesh = new THREE.Mesh(cubeGeometry, material);
scene.add(mesh);

const composer = new THREE.EffectComposer(renderer);
const renderPass = new THREE.RenderPass(scene, camera);
composer.addPass(renderPass);

const bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 1.5, 0.4, 0.85);
bloomPass.threshold = 0.1;
bloomPass.strength = 1.2;
bloomPass.radius = 0.8;
composer.addPass(bloomPass);

function morphTo(geometry) {
gsap.to(mesh.geometry.attributes.position.array, {
duration: 2,
onUpdate: function() {
mesh.geometry.attributes.position.needsUpdate = true;
},
onComplete: function() {
mesh.geometry.d…

!gpt4o <!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"…
RosaAmargada ·

Same code