60
U N I V E R S I T Ä T KOBLENZ · LANDAU (2) Hierarchien Vorlesung „Computergraphik 2“ S. Müller

Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

(2) Hierarchien

Vorlesung

„Computergraphik 2“

S. Müller

Page 2: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Organisatorisches

Page 3: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 3 -

Vorlesung CG 2+3

Die Veranstaltung besteht aus 2 Teilen, wobei in der

Mitte und am Ende eine Klausur geschrieben wird.

Für den Diplomstudiengang bilden beide Noten die

CG2-Veranstaltung im Hauptdiplom CV.

Für Bachelor zählt der erste Teil als CG2.

Für Master der zweite Teil als CG3.

Keine Voraussetzungen zur Teilnahme an der Klausur

Page 4: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 4 -

Übersicht zur Vorlesung CG 2:

Hierarchische Strukturen und Szenengraphen

Transformations- und Bounding –Volume-Hierarchien, Open-Inventor, OpenSG, 3D Engine

GPU

Vertex- und Fragment-Shader, Schatten

Beleuchtung

Beleuchtungsmodelle, Beschleunigung von Ray-Tracing, Echtzeit Raytracing, GPU, Radiosity

CG 3 (Beginn: 24.6.):

Kurven und Flächen

Delaunay, Voronoi, Winged-Edge, B-Splines, NURBS, Flächen, Meshes

Wissenschaftliche technische Visualisierung

Grundlagen, Volumenrendering

Klausuren (voraussichtlich):

8. 6. 2012

19. 7. 2012

Page 5: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Vorlesung Plan (CG2)

S. Müller - 5 -

19.04.2012 1 3D Engines

20.04.2012 2 Hierachien

26.04.2012 3 Buffer 23.04.2012 1. Übung 3D Engines

27.04.2012 4 Beleuchtung

03.05.2012 5 Shading Languages 30.04.2012 2. Übung Buffer/Bel

04.05.2012 6 GPU 2

10.05.2012 7 Normal Mapping 07.05.2012 3. Übung GPU2

11.05.2012 8 Schatten

17.05.2012 Himmelfahrt 14.05.2012 4. Übung Schatten/Normalen

18.05.2012 9 RT-Beschleunigungen

24.05.2012 10 Radiosity

25.05.2012 WIEDERHOLUNG

31.05.2012 Pfingsten

01.06.2012 Pfingsten

07.06.2012 Fronleichnam 04.06.2012 5. Übung RT Beschl./Radiosity

08.06.2012 KLAUSUR

Page 6: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 6 -

Literatur

OpenGL Programming

Guide: The Official Guide to

Learning OpenGL, Version

1.2 (3rd Edition) by Mason

Woo, Jackie Neider, Tom

Davis, Dave Shreiner,

Addison-Wesley, 1999

Peter Shirley: Fundamentals

of Computer Graphics, A K

Peters LTD, 2002

Eric Haines, Tomas Möller: Real-

Time Rendering, 3rd Edition

Rick Parent: Computer

Animation

David Rogers: An Introduction to

NURBS

Alan Watt: 3D Computer

Graphics (3rd Edition)

Page 7: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 7 -

Wdh. I: OpenGL Rendering Pipeline

pRTSTVp

MODELVIEWM

'

''' pMMMp

PROJECTIONM

LRPERSPORTHO

Division durch homogene Koordinate

Kamera im Ursprung, Blickrichtung entlang

der negativen z-Achse (Rechtssystem)

Linkssystem: z-Achse nicht-linear skaliert,

kanonisches Volumen vor perspektivischer

Division, hier wird geclippt.

Kanonisches Volumen

Bildschirm- bzw.

Fensterkoordinaten,

z-Wert zwischen

(0,1), Rasterisierung

Viewport-Transformation

Page 8: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 8 -

Wdh. II: Wo wird beleuchtet? Nach der Modelview-Transformation

sind Normalen und Eckpunkte im

Kamerakoordinatensystem. Diese

Werte werden für die Beleuchtung

verwendet.

Page 9: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 9 -

Wdh. III: Wo wird texturiert?

Während der Rasterisierung

Page 10: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Hierarchien

Page 11: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 11 -

Karosserie

Räder

Transformationen

Radgeometrie

Beispiel: Auto

Vorgehen beim Rendern

Zeichne die Karosserie

Merke dir wo du bist

Transformation zum rechten

Vorderrad

Zeichne das Rad und werfe

die letzte Transformaiton weg

(also zurück zum Ursprung

der Karosserie)

Merke dir wo du bist

Transformation zum linken

Vorderrad…

Radgeometrie ist um den Ursprung modelliert

Page 12: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 12 -

Matrizenstack

Die bisher „aktuelle“ Matrix genannte Matrix ist

tatsächlich als Stack implementiert.

Oft benötigt man einen Zwischenspeicher für Matrizen

Lösung: Matrixstack

glPushMatrix();

kopiert die oberste Matrix („merke dir wo du bist“)

glPopMatrix();

entfernt die oberste Matrix („gehe dahin zurück, wo du warst“)

Push und Pop bilden quasi Klammern um

Transformationen

der Matrixstack kann min. 32 Einträge fassen

Page 13: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 13 -

Matrizenstack

C B A C B A C

C B A C B A D glPopMatrix();

entfernt die oberste Matrix

„ gehe dahin zurück, wo du warst“

glPushMatrix();

kopiert die oberste Matrix

„merke dir wo du bist“ : MMODELVIEW

Page 14: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 14 -

Beispiel: Auto

Karosserie um den Ursprung

mit Breite 2, Höhe 0.5 und

Tiefe 1

Schreiben sie ein Programm,

das die Karosserie aus einem

Einheitswürfel erzeugt

(Bereich (-0.5,0.5) mit

gluWireCube(1.0))

Setze die Räder (Kugeln mit

Radius 0.1) in die Ecken mit

glutWireSphere(0.1,10,10);

x

z

y

Breite: 2

Höhe: 0.5

Tiefe: 1

Page 15: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 15 -

Als Szenengraph

z

y

2

Tiefe: 1

0.5

Trafo

Auto

x

Trafo

Karosserie

Trafo

Rad 1

Trafo

Rad 2

Trafo

Rad 4

Trafo

Rad 3

Auto

Page 16: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 16 -

Beispiel-Code

glPushMatrix();

glScalef(2,0.5,1);

glutWireCube(1.0);

glPopMatrix();

glPushMatrix();

glTranslatef(-1,-0.25,-0.5);

glutWireSphere(0.1,10,10);

glPopMatrix();

glPushMatrix();

glTranslatef(1,-0.25,-0.5);

glutWireSphere(0.1,10,10);

glPopMatrix();

glPushMatrix();

glTranslatef(1,-0.25,0.5);

glutWireSphere(0.1,10,10);

glPopMatrix();

glPushMatrix();

glTranslatef(-1,-0.25,0.5);

glutWireSphere(0.1,10,10);

glPopMatrix();

x

z

y

2

0.5

Page 17: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 17 -

Beispiel: Auto

glPushMatrix();

glScalef(2,0.5,1);

glutWireCube(1.0);

glPopMatrix();

glPushMatrix();

glTranslatef(-1,-0.25,-0.5);

glutWireSphere(0.1,10,10);

glPopMatrix();

x

z

y

2

0.5

glRotatef(alpha, 0.0, 0.0, 1.0);

Aufgabe: Auto fährt und

Räder drehen sich

glTranslatef( x, 0, 0);

Page 18: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Lokale Koordinatensysteme

S. Müller - 18 -

rp

y

x

z

y

x

z

y

x

z

R

A

W

1ba

2R1R

Auto in Welt:

Rad in Auto:

Rad in Welt:

aw pap

1RT

ra pbp

2RT

rw pbap 21 RTRT

ap

Page 19: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 19 -

Beispiel: Armbewegung

Ober- und Unterarm seien durch

Quader mit den angegebenen

Ausdehnungen modelliert

Schreiben sie ein Programm,

das den Arm an dem

Schultergelenk (s) und dem

Ellbogen (e) durch Eingabe der

Werte im Wertebereich bewegt

Verwenden sie dazu als einzige

geometrische Primitive Würfel

im Bereich (-0.5,0.5) mit

gluWireCube(1.0)

2 1.5

0.4

1

900 s

900 e

Page 20: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 20 -

Trafo

rechter Arm

glTranslatef (1.0, 0.0, 0.0);

glScalef (2.0, 0.4, 1.0);

Oberarm

/*glTranslatef (0.0, 0.0, 0.0); */

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);

glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);

glScalef (1.5, 0.4, 1.0);

Unterarm

Rechter Arm

Welt-

koordinaten

Page 21: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 21 -

Trafo

rechter Arm

glTranslatef (1.0, 0.0, 0.0);

glScalef (2.0, 0.4, 1.0);

Oberarm

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);

glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);

glScalef (1.5, 0.4, 1.0);

Unterarm

Rechter Arm

Lokale Koordi-

natensysteme

Page 22: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 22 -

Beispiel Code

Trafo

rechter Arm

glTranslatef (1.0, 0.0, 0.0);

glScalef (2.0, 0.4, 1.0);

Oberarm

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glTranslatef (2.0, 0.0, 0.0);

glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);

glScalef (1.5, 0.4, 1.0);

Unterarm

Rechter Arm

glClear (GL_COLOR_BUFFER_BIT);

glColor3f(0,0,0);

glLoadIdentity();

gluLookAt( 0,0,10, 0,0,0, 0,1,0);

glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);

glPushMatrix();

glTranslatef (1.0, 0.0, 0.0);

glScalef (2.0, 0.4, 1.0);

glutWireCube (1.0);

glPopMatrix();

glTranslatef (2.0, 0.0, 0.0);

glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);

glTranslatef (0.75, 0.0, 0.0);

glScalef (1.5, 0.4, 1.0);

glutWireCube (1.0);

glFlush();

Page 23: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Geometrische Interpretation

Transformationen hintereinander versucht man sich

meist in einzelnen Schritten vorzustellen.

Bsp.: Transformation von lokalen Koordinaten in

Weltkoordinaten:

Interpretation in Einzelschritten bedeutet, dass man

sich für die Schritte anfangs die Einheitsmatrix denkt:

Danach wird Schritt für Schritt jede Einheitsmatrix

durch die tatsächliche Matrix ersetzt.

Es gibt 2 übliche Interpretationen:

S. Müller - 23 -

lw pp 1234 MMMM

lw pp EEEE

Page 24: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Geometrische Interpretation

Weltkoordinaten:

man ersetzt von rechts

Interpretation: wir schieben das

Objekt durch die Welt, bzw. wir

lesen das OpenGL Programm

von unten nach oben.

Alle Transformationen beziehen

sich dabei auf das

Weltkoordinatensystems

Anfangs ist das Objekt im

Weltkoordinatensystem geben.

Dann wird M1 auf das Objekt angewandt.

Dann M2 bzgl. dem WKS etc..

Lokale Koordinatensysteme:

man ersetzt von links

Interpretation: wir verschieben

lokale Koordinatensysteme; bzw.

wir lesen das OpenGL

Programm von oben nach unten.

Alle Transformationen beziehen

sich dabei auf das jeweilige

lokale Koordinatensystem (LKS)

Anfangs ist das Koordinatensystem mit dem

Weltkoordinatensystem identisch.

Dann wird M4 auf das LKS angewandt.

Dann M3 bzgl. dem LKS etc.

S. Müller - 24 -

lw pp 12 MMEE

lw pp EEEM4

lw pp EEEE

lw pp

1MEEE

lw pp EEEE

lw pp

EEMM 34

Page 25: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Bsp. 13: Geometrische Interpretation

Als Beispiel verwenden

folgenden Szenengraphen.

S. Müller - 25 -

Rechtes

Vorderrad

Karosserie

Lokale Geometrie

2pbapw

TRT

a

T

b

T

R

Auto

2p

y

x

z

y

x

z

y

x

z

2C

1C

W

ba

R

Page 26: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Weltkoordinaten

S. Müller - 26 -

y

z

z

W

2pbpw

TEE

y

x

z

x

b

y

zW

x

y

x

z

R

a

2pbpw

TRE

y

zW

x

y

x

z

2pbapw

TRT

Das Objekt startet im

Weltkoordinatensystem. Zuerst

wird die Translation in Richtung

b in Weltkoordinaten

durchgeführt .

Es folgt die Rotation um den

Ursprung des Weltkoordinaten-

systems,

Als letztes folgt die Translation

in Richtung a in Weltkoordi-

naten. Damit ist das Objekt in

seiner Zielposition.

Interpretationsrichtung

Page 27: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Lokale Koordinatensysteme

S. Müller - 27 -

y

x

z

a

Interpretationsrichtung

y

zW

x

R

z

y

x

bz

y

x

z

y

x

2pbapw

TRT 2papw

ERT 2papw

EET

Als letztes folgt die Translation

in Richtung b in Bezug zum

letzten LKS. Damit ist das LKS

– und damit auch das Objekt –

in seiner Zielposition.

Es folgt die Rotation um den

Ursprung des LKS,

Anfangs ist das LKS mit dem

Weltkoordinatensystem

identisch. Zuerst wird es in

Richtung a – in Bezug zum

letzten LKS – verschoben.

Page 28: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 28 -

Idee des Szenengraphen

… aus Transformationssicht

Jeder Teilbaum kann in seinem eigenen, lokalen

Koordinatensystem verstanden werden

Die Traversierung der Hierarchie akkumuliert die Matrizen der

gesamten Welt und positioniert die „lokalen“

Koordinatensysteme an die richtige Stelle

• Die Autofähre fährt über dem Fluß, darauf fährt ein Auto,

das wiederum aus Karosserie und Rädern besteht

Wichtig ist dabei, dass der Zustand (hier die

Transformationen) gemerkt werden, damit sie nach Verlassen

des Teilbaums restauriert werden können

Szenengraph: Sinnvolle Darstellung für Statemachine

Problem: was gibt es für Knoten und was steht da drin…

Page 29: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 29 -

Beispiel: minimaler Szenengraph

Ein minimaler Szenengraph besteht aus 3

Knotentypen:

Gruppen,

Transformationen

Geometrien (inkl. Materialien und Texturparameter).

Sie haben eine gemeinsame Vaterklasse und eine

render()-methode.

Page 30: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 30 -

Minimaler Szenengraph

Gruppe :

für alle Kinder

• render()

Transformation:

glPushMatrix()

glMultMatrix()

für alle Kinder

• render()

glPopMatrix()

Geometrie:

glMaterial*()

glBegin()

...

glEnd()

Oberarm

Unterarm

Rechter Arm

Page 31: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 31 -

Der langsamste Renderer der Welt…

Szenengraphen sind auch

wichtig für effizientes

Rendern komplexer Szenen

Ziel: Arbeit vermeiden

Nur das darstellen, was

gebraucht wird

Nur die Kommandos

ausführen, die notwendig

sind

State-Changes minimieren

{

Definiere Lichtquellen();

gluPerspective( angle, aspect, near, far);

gluLookAt( from, at, up);

glClear( BackgroundColour);

for each object i

{

Definiere Materialeigenschaften (i);

Definiere Textureigenschaften (i);

glPushMatrix();

MultMatrix( object(i).matrix));

bgnpolygon();

for each vertex j

{

n3f( object(i).normale(j));

t2f( object(i).texturkoord(j));

v3f( object(i).vertex(j));

}

endpolygon();

glPopMatrix();

}

swapbuffers();

}

Page 32: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 32 -

Bounding Volume Hierarchie

Für jeden Gruppenknoten

wird auch ein Bounding

Volume berechnet und

abspeichert

Häufig verwendete

Möglichkeit:

Axis-Aligned Bounding Box

Suche von allen Blättern

• xmin, xmax

• ymin, ymax

• zmin, zmax

Durch diese Werte ist die

Bounding Box definiert

2 3

4

1

5 6

7 8

9

City

Church House

Page 33: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 33 -

View Frustum Culling

Test des View Frustums (Blickpyramide) gegen das jeweilige Bounding

Volume. Wenn BV außerhalb des Frustums liegt, braucht der darunter

liegende Graph für das Rendering nicht weiter berücksichtigt werden.

Page 34: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 34 -

Bounding Volumes

In Weltkoordinaten oder in

Modellkoordinaten?

Sinnvoller: Weltkoordinaten,

da die BVs dann direkt für

Culling verwendet werden

können

Wie berechnet man die BVs ?

Push-Pull

Traversierung nach unten

akkumuliert die

Transformationen

Traversierung nach oben

läßt xmin, xmax etc. in

Weltkoordinaten bestimmen.

Oberarm

Unterarm

Rechter Arm

1M

2M

3M

321 MMM

Page 35: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 35 -

Räumliche Aufteilung

2 3

4

1

5 6

7 8

9

Scene

City

OfficeChurch House

House

FactoryTree Tree

Tree

Tree Tree

Tree

1 Tile 2 Tile 3 Tile 4 Tile 5 Tile 6 Tile 7 Tile 8 Tile 9 Tile

City

Trees Pine Buildings

SCS SCS

OfficeChurch

HouseHouse

Factory

Tree

Wichtig ist, daß die

Hierarchie der Szene eine

räumliche Aufteilung aufweist

Schlechte Aufteilung

Gute Aufteilung

Page 36: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 36 -

Räumliche Aufteilung

Leider sieht die Realität anders aus

Manche CAD-Systeme motivieren durch ihre Struktur

(Layer in AutoCAD) Objekte mit gleichen Materialien in

einem Knoten zusammenzufassen (z.B. alle

Türklinken)

Man hat 2 Möglichkeiten

Szeneneditor und manuelle Nachbereitung der Hierarchie

Bestehende Hierarchie ignorieren und eigene aufbauen

Was passiert, wenn sich Objekte bewegen ?

Man muss alle darüber liegenden BV aktualisieren

Dynamische Objekte von statischen Objekten im Baum

trennen (dynamische Objekte direkt unter die Wurzel)

Page 37: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

VFC: Vorgehen

Beginne mit der Wurzel

Liegt die BoundBox …

außerhalb des Frustums,

dann kann man aufhören

und nichts zeichnen

innerhalb oder teilweise

innerhalb, wird rekursiv

mit den Kindern

weitergetestet.

Ist ein Knoten ein Blatt

(Geometrieknoten),

dann werden alle

Polygone gezeichnet.

Typisch: die Polygone

werden erst gepuffert

und sortiert („draw-tree“)

Transparente Objekte am

Ende zeichnen

State-Wechsel

Minimierung (Shader,

Texturen, Materialien

möglichst wenig

wechseln)

S. Müller - 37 -

City

OfficeChurch House

House

FactoryTree Tree

Tree

Tree Tree

Tree

1 Tile 2 Tile 3 Tile 4 Tile 5 Tile 6 Tile 7 Tile 8 Tile 9 Tile

Page 38: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Wie berechnet man das?

Bestimme View Frustum in

Weltkoordinaten

Teste für jede Ebene des

Frustums alle 8 Ecken der

BBox

Bestimme die Normale auf

die Ebene

Bestimme einen Vektor von

einem Punkt der Ebene zu

jeder Ecke der Box

Das Vorzeichen des

Skalarprodukts zeigt den

vorderen oder hinteren

Halbraum an

Alle Punkte außerhalb:

aufhören (Box liegt

außerhalb)

Ansonsten ist die Box am

Ende teilweise oder ganz im

Frustum

S. Müller - 38 -

pu

A

near

far

C

n

Page 39: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 39 -

Szenengraph Systeme

Es gibt eine Reihe von relevanten Systemen

Open Inventor

Performer

OpenSG

Java3D

X3D

Game-Engines…

Die ersten 3 basieren auf OpenGL

Page 40: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 40 -

Open Inventor

Open Source

Entwickelt von SGI (Silicon Graphics)

Linux/IRIX Version unter www.sgi.com

Windows Portierung unter www.coin3d.org oder

http://www.studierstube.org/openinventor/

Objektorientiert in C++

Buch „Open Inventor Mentor“

Bietet nicht nur den Renderer, sondern auch

Interaktionen und Manipulationen

State-Handling wird durch die Modellierung bzw.

Definition des Baumes festgelegt

Page 41: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 41 -

Open Inventor

root

redPlastic sphere1 1 TF white sphere2 2 TF sphere3

oxygen hydrogen1 hydrogen2

Water

Graph wird abgearbeitet:

depth first, left before right, Vererbung nach rechts

Page 42: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 42 -

Molecule.c++

// Construct all parts

SoGroup *waterMolecule = new SoGroup; // water molecule

SoGroup *oxygen = new SoGroup; // oxygen atom

SoMaterial *redPlastic = new SoMaterial;

SoSphere *sphere1 = new SoSphere;

SoGroup *hydrogen1 = new SoGroup; // hydrogen atoms

SoGroup *hydrogen2 = new SoGroup;

SoTransform *hydrogenXform1 = new SoTransform;

SoTransform *hydrogenXform2 = new SoTransform;

SoMaterial *whitePlastic = new SoMaterial;

SoSphere *sphere2 = new SoSphere;

SoSphere *sphere3 = new SoSphere;

// Set all field values for the oxygen atom

redPlastic->ambientColor.setValue(1.0, 0.0, 0.0);

redPlastic->diffuseColor.setValue(1.0, 0.0, 0.0);

redPlastic->specularColor.setValue(0.5, 0.5, 0.5);

redPlastic->shininess = 0.5;

Page 43: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 43 -

Molecule.c++ (cont.) // Set all field values for the hydrogen atoms

hydrogenXform1->scaleFactor.setValue(0.75, 0.75, 0.75);

hydrogenXform1->translation.setValue(0.0, -1.2, 0.0);

hydrogenXform2->translation.setValue(1.1852, 1.3877, 0.0);

whitePlastic->ambientColor.setValue(1.0, 1.0, 1.0);

whitePlastic->diffuseColor.setValue(1.0, 1.0, 1.0);

whitePlastic->specularColor.setValue(0.5, 0.5, 0.5);

whitePlastic->shininess = 0.5;

// Create a hierarchy

waterMolecule->addChild(oxygen);

waterMolecule->addChild(hydrogen1);

waterMolecule->addChild(hydrogen2);

oxygen->addChild(redPlastic);

oxygen->addChild(sphere1);

hydrogen1->addChild(hydrogenXform1);

hydrogen1->addChild(whitePlastic);

hydrogen1->addChild(sphere2);

hydrogen2->addChild(hydrogenXform2);

hydrogen2->addChild(sphere3);

Page 44: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 44 -

Separators

xf4

root

xf3

root

calf

body head

xf1 silver cylinder lLeg rLeg xf2 gold sphere

leftXform rtXform leg

thigh foot

Push/Pop vom Traversal

State.

DAG: Directed Acyclic Graph

Mehrfach Referenzen

Identifikation von Objekten

nur durch Pfad im Baum

(Problem: Löschen)

Page 45: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 45 -

Objekte

Kegel

Würfel

Zylinder

NURBS Curve

NURBS Surface

Kugel

Text 2D

Text 3D

Polygonzüge

Page 46: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 46 -

Aktionen

Rendering

Caching

Transparency

Ray Pick

Für einen übergebenen

Strahl

BV-Hierarchie wird

ausgenutzt

Gibt gewünschten Wert

zurück (z. B. Geometrie,

Matrix, Shape Node,

Pfad)

Matrix

Akkumuliert Matrizen

Painter

Erzeugt Ausgabe File

Page 47: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 47 -

Manipulatoren

Haben eigenes User-Interface

Beispiele:

Handle Box

Virtual Trackball

Farbeditor

Materialeditor

carGroup mouse) (middle yourManip

sphere

xform

set face

mouse) (lefthandleBox

mtl cubexform

mtl

Page 48: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 48 -

Beispiele

SoXtMaterialEditor *myEditor = new SoXtMaterialEditor;

myManip = new SoTrackballManip;

Time-Sensor

Page 49: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 49 -

Fazit

Inventor ist der langsamste der Szenengraphen

Der Grund ist, dass der Baum auch in der

vorgegebenen Reihenfolge gerendert werden muss

Es ist auch vielmehr ein Application Framework, als

ein Renderer

Vorteil: es bietet viele Interaktions- und

Manipulationsfunktionen

VRML 1.0 basierte auf dem Inventor Fileformat

Page 50: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 50 -

Performer

Auch von SGI entwickelt

Wird inzwischen ebenfalls Cross-Platform angeboten

Kostet allerdings Geld

Kostenlose Demo-Version bei SGI

Hauptsächlich gedacht für Visualisierungs- und

Simulationsanwendungen (VisSim)

Sehr schnelles und performantes System (entwickelt

u.a. als Basis für Flugsimulatoren)

Page 51: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 51 -

Besonderheiten

Vererbung von Attributen

Automatische BV-Hierarchie

SCS (static coordinate system)

DCS (dynamic coordinate system)

Oberglied

Unterglied

Mittelglied

Finger

DCS

DCS

DCS

DCS

Hand

City

Trees Pine Buildings

SCS SCS

OfficeChurch

HouseHouse

Factory

Tree

Page 52: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 52 -

Besondere Knoten

Level of Detail (LOD)

Billboard

Stress

LOD

1 LOD

2

LOD

n

LOD

3 Eyepoint

Switch Range Blend Zone

Page 53: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 53 -

Besondere Knoten

Atmosphärische Effekte

Realtime Shadows

Layered Fog

Verschiedene File-Loader

GeoState

Geometrie und Material in

einem Knoten

Statistics

Unterteilung in

Application

Culling

Drawing

(Mehrprozessor-

Unterstützung)

Programmausschnitt

pfGroup *spatial_terrain_block = pfNewGroup();

pfSCS *house_offset = pfNewSCS();

pfSCS *terrain_block_offset = pfNewSCS();

pfDCS *car_position = pfNewDCS();

pfDCS *tank_position = pfNewDCS();

pfDCS *heli_position = pfNewDCS();

pfSwitch *current_vehicle_type;

pfGeode *heli, *car, *tank;

pfAddChild(scene, spatial_terrain_block);

pfAddChild(spatial_terrain_block, terrain_block_offset);

pfAddChild(spatial_terrain_block, house_offset);

pfAddChild(spatial_terrain_block, current_vehicle_type);

pfAddChild(current_vehicle_type, car_position);

pfAddChild(current_vehicle_type, tank_position);

pfAddChild(current_vehicle_type, heli_position);

pfAddChild(car_position, car); pfAddChild(tank_position, tank);

pfAddChild(heli_position, heli); }

Page 54: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU S. Müller - 54 -

Pf: Knoten Node Type Node Class Description

pfNode Abstract Basic node type.

pfGroup Branch Groups zero or more children..

pfScene Root Parent of the visual database.

pfSCS Branch Static coordinate system.

pfDCS Branch Dynamic coordinate system.

pfFCS Branch Flux coordinate system.

pfDoubleSCS Branch Double-precision static coordinate system.

pfDoubleDCS Branch Double-precision dynamic coordinate system.

pfDoubleFCS Branch Double-precision flux coordinate system.

pfSwitch Branch Selects among multiple children.

pfSequence Branch Sequences through its children.

pfLOD Branch Level-of-detail node.

pfLayer Branch Renders coplanar geometry.

pfLightSource Leaf Contains specifications for a light source.

pfGeode Leaf Contains geometric specifications.

pfBillboard Leaf Rotates geometry to face the eyepoint.

pfPartition Branch Partitions geometry for efficient intersections.

pfText Leaf Renders 2D and 3D text.

pfASD Leaf Controls transition between LOD levels.

Page 55: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

OpenSG

Multi-Referrenzen

Multi-Threading

Beispiel: Clustered

Stereo Application

Anwendung läuft auf

Client

Pro Server Kopie des

Graphen

Client sendet

Modifikationen an Server

Server rendern

ausschließlich

S. Müller - 55 -

Page 56: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Node-Core Konzept

S. Müller - 56 -

Node

Core

Cores:

Transform

Geometry

Switch

Material

...

Page 57: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Kamera im Auto

S. Müller - 57 -

root

group

rest of

the

world

car

transform

car

geometry wheel

rear

left transform

wheel

front

right transform

wheel

front

left transform

whell

rear

right transform

wheel

rear

left

wheel

front

right

wheel

front

left

whell

rear

right geometry

Page 58: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Code-Beispiele

S. Müller - 58 -

// Sei root der Wurzelknoten GroupPtr group = Group::create(); NodePtr n = Node::create(); beginEditCP(n); n->setCore(group); endEditCP(n); beginEditCP(root); root->addChild(n); endEditCP(root);

Page 59: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

Code-Beispiele

S. Müller - 59 -

Matrix m; m.setIdentity(); m.setTranslate(20,10,0); TransformPtr trans = Transform::create(); beginEditCP(trans, Transform::MatrixFieldMask); trans->setMatrix(m); endEditCP(trans, Transform::MatrixFieldMask); NodePtr n = Node::create(); beginEditCP(n, Node::CoreFieldMask); n->setCore(trans); endEditCP(n, NodeCoreFieldMask);

Page 60: Photometrische und Radiometrische Grundlagencg/ss12/cg2/vorlesungsfolien/02... · U N I V E R S I T Ä T KOBLENZ · LANDAU S. Müller - 3 - Vorlesung CG 2+3 Die Veranstaltung besteht

U N I V E R S I T Ä T

KOBLENZ · LANDAU

OpenSG weitere Hilfen

OpenSG Tutorial

http://www.uni-koblenz.de/~abert/Site/Publications.html

(unvollständige) Klassendokumentation

http://www.opensg.org/doc-1.6.0/index.html

S. Müller - 60 -