Solidi definiti da funzioni matematiche.
Renderizzati nel browser di chi guarda.

Nessuna mesh, nessun triangolo, nessun dato geometrico salvato. Un solido e una funzione f(x,y,z): il segno decide pieno o vuoto, lo zero e la superficie, il gradiente e la normale. Il raggio non cerca: la funzione dichiara dove viene colpita, in forma chiusa.

Intersezione analitica Superficie = livello zero di f Normale = gradiente Zoom che mantiene il rapporto 100% client-side Zero dipendenze

Il motore gira nel browser

Nessun server calcola immagini. Il rendering avviene sul dispositivo di chi visita: il sito e una cartella statica.

Le API sono una libreria

window.AICAD espone le stesse operazioni di openapi.yaml: due porte sulla stessa stanza, una per il codice, una per le AI.

La funzione dice dov'e

Sfera, piano e cubo rispondono con t in forma chiusa. Nessun passo a tentoni, nessuna approssimazione di ricerca.

Prestazioni misurate dal vivo

La pagina Prestazioni misura raggi/secondo e ms/frame sul tuo dispositivo, in tempo reale.

Il motore in azione

Trascina = orbita. Rotella sopra un punto = quel punto resta fermo. Shift+trascina = spostamento. Mouse fermo su un solido = sonda.

Uso minimo

La libreria e una sola: geometry.js. Espone window.AICAD (e window.GEOMETRY come alias).

// 1. costruisci la scena
const sc = AICAD.scene([
  AICAD.sphere(0, 1.6, 0, 1.6, [0.36,0.62,0.95]),
  AICAD.planeY(0, [0.17,0.20,0.25])
]);

// 2. definisci la camera
const cam = AICAD.camera({ dist: 9.5, fov: 0.84 });

// 3. chiedi al solido dove lo colpisci
const r = cam.ray(0, 0, 1.6);
const hit = sc.trace(r.o, r.d);

// hit = { t, p, obj, normal }
// La superficie e il livello zero:
// f(punto) = 0  ->  sei sulla superficie
// f(punto) < 0  ->  pieno
// f(punto) > 0  ->  vuoto

// La normale non si stima: si calcola.
// Per la sfera e il raggio dal centro.

// Perfino il colore, in futuro, sara
// una funzione g(punto, normale).