XCMODEL: un sistema per la modellazione e resa di curve e superfici
NURBS trimmate
Giulio Casciola
Dipartimento di Matematica
Università di Bologna
Giornate di Studio su Temi
dell'Analisi Numerica
Milano 17/6/99
Cos'è
XCMODEL
XCMODEL vuol essere un laboratorio di didattica e ricerca,
per apprendere e sperimentare,
un ambiente ideale per sviluppare, mettere a punto e
confrontare
metodi ed algoritmi della modellazione geometrica e della
grafica al calcolatore.
Curve e Superfici in forma parametrica
NURBS Non Uniform Rational B-Spline (standard de facto per la
rappresentazione di informazioni geometriche e scambio dati)
dove
con
wi>0
P |
(u,v)= |
|
|
|
PijRi,h,j,k(u,v) |
dove
con
wij>0
Curve e Superfici in forma parametrica
NURBS Trimmate Curve e Superfici NURBS definite su un sottodominio
del dominio parametrico (definito mediante un albero o una
lista di curve piane lineari a tratti o NURBS)
Un esempio di modellazione e resa
-
Progettazione su carta (aereoplano)
- Modellazione delle sue parti (ali, timoni, motori, fusoliera)
- Assemblaggio/Composizione
- Descrizione della scena
- Resa
Modellazione di un'ala
Le sezioni sono curve piane ottenute con il modellatore 2D; la superficie
dell'ala è stata ottenuta per interpolazione delle curve 2D
usando il modellatore 3D (skinning surface).
Modellazione di un motore
curva 2D, sezione del motore
La curva sezione è stata realizzata con il modellatore 2D; con il
modellatore 3D si è generata la superficie dell'intero motore
(revolving surface).
Modellazione di ali e timoni
Le altre ali: la seconda ala, i timoni di profondità e di direzione,
sono state prodotte come copie, opportunamente traslate, scalate e ruotate,
dell'ala precedente modellata.
Modellazione del corpo centrale
Le parti del corpo centrale sono state ottenute per interpolazione di
opportune curve sezione (skinning surface).
Assemblaggio del corpo centrale
Join (glue) operation.
Assemblaggio dell'intero aereo
Posizionamento dei vari componenti.
Descrizione scena interattiva
I componenti della scena sono:
-
Camera
- Ambient light
- Background
- Luci
- Attori
- Attributi
Descrizione scena procedurale
#include "descriptor/descriptor.h"
#define NUM_NURBS_OBJ 10
#define OBJ_ARR { \
{"upfuso.db", 0, 0.5, 0}, \
{"upaladx.db", 0, 0.5, 0}, \
{"upalasx.db", 0, 0.5, 0}, \
{"upmuso.db", 0, 0.5, 0}, \
{"upmotoredx.db", 0, 0.5, 0}, \
{"upmotoresx.db", 0, 0.5, 0}, \
{"uppianocdx.db", 0, 0.5, 0}, \
{"uppianocsx.db", 0, 0.5, 0}, \
{"upcoda.db", 0, 0.5, 0}, \
{"uptimone.db", 0, 0.5, 0} \
}
typedef struct {
char name[50];
double r, g, b;
} Obj_t;
static Obj_t obj_desc[NUM_NURBS_OBJ] = OBJ_ARR;
int main(void) {
int x,y,z,nogg;
ITEM oggetto[NUM_NURBS_OBJ],piano,lista,
attributo,attr_piano;
set_background(0.678,0.854,1,TRUE);
create_point_light(0.5,39.6,139.7,1,1,1,1,0,"luce_1");
attributo = create_attribute("materiale_boing");
set_color(attributo,0, 0.5, 0.5, 0.4, 0.5);
set_reflectivity(attributo, 0.4, 2);
attr_piano = create_attribute("materiale_piano");
set_color(attr_piano, 0.623, 0.529, 0.196, 0.4, 0.5);
set_reflectivity(attributo, 0.4, 20);
for(nogg = 0; nogg < NUM_NURBS_OBJ; nogg++) {
oggetto[nogg] = read_nurbs(obj_desc[nogg].name);
set_attribute(oggetto[nogg], attributo);
}
piano = read_nurbs("piano.db");
set_attribute(piano,attr_piano);
lista = create_list(oggetto[0], "boeing");
for (nogg = 1; nogg < NUM_NURBS_OBJ; nogg++)
lista = insert_in_list(lista, oggetto[nogg]);
lista = insert_in_list(lista,piano);
save_scene("boeing.md", "boeing", lista);
return(0);
}
Resa della scena
L'algortimo usato per la resa realistica e` il Ray-Tracing.
I pacchetti di XCMODEL
-
xccurv
- modellatore 2D
- xcsurf
- modellatore 3D
- xcbool
- composizione solida
-
xcssi
- l'intersecatore
- tree2dbe
- il convertitore di formato
- xcrayt
- descrittore di scena e resa
-
xhrayt,hrayt
- il ray-tracer
- xmovie,xframe
- il visualizzatore di immagini
Le librerie di XCMODEL
-
MATRIX
- elaborazione vettori e matrici
- descriptor
- descrittore di scena
- xtools
- la GUI del sistema
Caratteristiche di XCMODEL
-
figura utente
- sperimentazione e didattica
- autonomia dei pacchetti
- evoluzione del sistema
Caratteristiche tecniche
-
o portabilità su più piattaforme: Linux, Solaris, SGI
(sistemi UNIX e Xwindow: Xlib, Xpm library)
- o linguaggio C: uniformità del codice in ANSI-C
- o definizione dei formati dei file dati (18 formati di file dati:
prorietari e standard)
- o struttura delle directory: codice (sorgente, include, proto),
eseguibili, librerie, dati
- o creazione di librerie comuni per i pacchetti
- o sorgente strutturato modularmente
- o variabili d'ambiente
- o GUI proprietaria
xcxccurv
c2dcurves2d
c3dcurves3d
xsxcsurf
ssurfaces
xbxcbool
oobjects
xrxcrayt
ttextures
mmodels
Caratteristiche tecniche (continua)
-
compatibilità con i Window Manager e schermi X
- file di configurazione dei pacchetti
- documentazione utente e documentazione per lo sviluppo
- divulgazione e distribuzione
- necessaria evoluzione dei pacchetti verso il sistema
-
la GUI di xccurv
- composizione booleana interattivo/grafica
- maggior assistenza nella modellazione 3D
Schema attuale di XCMODEL
xcxccurv
xsxcsurf
xbxcbool
xcsxcssi
t2dtree2dbe
xrxcrayt
xhxhrayt/hrayt
xmxmovie
xfxframe
ddescriptor
mMATRIX
xtxtools
xlXlib
xpXpm
This document was tranlated from LATEX by
HEVEA and HACHA.