- 27 May 2024
- 5 Minuten zu lesen
- Drucken
- DunkelLicht
- pdf
Materialeditor & Materialverwaltung
- Aktualisiert am 27 May 2024
- 5 Minuten zu lesen
- Drucken
- DunkelLicht
- pdf
Der Materialeditor wird detailliert im Kapitel Materialeditor beschrieben.
Die Materialverwaltung basiert auf sog. Katalogen. Ein Katalog ist beschrieben durch einen Herstellernamen und einen Katalognamen. Beide zusammen definieren einen Katalog über den eine mögliche Materialdatei und Texturen aufgesucht werden. Wird ein Objekt geladen, so wird es in Hinblick auf die Standardattribute Hersteller und Katalog durchsucht und falls notwendig ein entsprechender Katalogeintrag angelegt. Der Katalogpfad wird dabei auf den Pfad gesetzt, von dem aus das Objekt geladen wurde. Über den Katalogpfad wird die Materialdatei, die immer den Namen Material.col trägt, aufgesucht. Mögliche Texturen wurden im Unterverzeichnis IMG des Katalogpfades aufgesucht.
Die nun beschriebenen Methoden sind Bestandteil des Kernels und nicht Prozeduren der LIB3D.BAS.
SETDEFAULTMATERIALPATH( BSTR MaterialPath )
Setzt den Default Material Pfad. Können Materialien über die Attribute Hersteller/Katalog nicht ermittelt werden, so wird auf diesem Pfad nach einer Material.col gesucht und versucht darüber eine Materialzuordnung zu erreichen.
Path = GETDEFAULTMATERIALPATH()
Liefert den Default Material Pfad.
Position = GETMATERIALHEADPOSITION( Producer, CatalogName )
Liefert einen Positionswert, der zum enumerieren der Materialen eines Hersteller/Kataloges gebraucht wird.
GETNEXTMATERIAL( Position, Producer, CatalogName, Material )
Liefert das nächste Material aus der Materialdatei, die über Hersteller/Katalog identifiziert wird.
Position = GETPRODUCERHEADPOSITION()
Liefert einen Positionswert, der zum enumerieren der definierten Hersteller gebraucht wird.
GETNEXTPRODUCER( Position, Producer )
Liefert den nächsten definierten Hersteller aus der Materialverwaltung.
Position = GETCATALOGHEADPOSITION( Producer )
Liefert einen Positionswert, der zum enumerieren der für einen Hersteller definierten Kataloge gebraucht wird.
GETNEXTCATALOG( Position, Producer, CatalogName, )
Liefert den nächsten Katalog aus der Menge der für einen Hersteller definierten Kataloge.
Count = GETPRODUCERCOUNT()
Liefert die Anzahl der definierten Hersteller.
Count = GETCATALOGCOUNT( ProducerName )
Liefert die Anzahl der für einen Hersteller definierten Kataloge.
CREATEPRODUCER( Producer )
Erzeugt einen Hersteller.
CREATECATALOG( Producer, CatalogName )
Erzeugt einen Katalog für einen Hersteller. Existiert der Hersteller noch nicht, so wird auch der Hersteller erzeugt.
SETCATALOGPATH( Producer, CatalogName, Path )
Setzt für einen Hersteller/Katalog den zugehörigen Katalog-Pfad. Auf diesem Katalogpfad wird nach einer Datei MATERIAL.COL gesucht, die die zu diesem Hersteller/Katalog definierten Materialien enthält. Verwendet ein Material eine Textur, so wird die entsprechende Bilddatei auf dem Unterverzeichnis IMG gesucht.
GETCATALOGPATH( Producer, CatalogName ), Path )
Liefert den zu einem Hersteller/Katalog gehörenden Pfad.
idMaterial = CREATEMATERIAL( Producer, CatalogName, MaterialName )
Erzeugt ein neues Material in einem bestimmten Katalog und liefert die Identifikation des Materials. Diese Identifikation kann dazu benutzt werden, das Material zu verändern. Existiert in diesem Katalog bereits ein Material mit diesem Namen, so wird dieses nicht verändert und die Identifikation dieses Materials geliefert.
Das Farbmodell, welches die meisten Viewer benutzen, basiert auf der Angabe von 3 Farben: Ambient, Diffuse, Spekular. Erst die Kombination aus diesen 3 Farben bestimmt die Farbe eines einzelnen Pixels in der Anzeige.
Ambient: Diese Angabe regelt die Farbe einer Oberfläche, wenn überhaupt kein Licht die Oberfläche an diesem Punkt erreicht. Konzeptionell entspricht dies der Farbe eines Objektes in den Schattenbereichen.
Diffuse: Diese Angabe entspricht der Grundfarbe eines Objektes. Die diffuse Farbe wird mit einer Lichtquelle verrechnet. Scheint die Lichtquelle senkrecht auf die Oberfläche sie dominiert an dieser Stelle der dominante Anteil. Scheint die Lichtquelle streifend auf die Oberfläche, so wird der diffuse Anteil immer weiter zurückgenommen, bis letztendlich nur noch der ambiente Anteil übrig bleibt.
Spekular: Konzeptionell kann man sich den spekularen Anteil als die Farbe und Eigenschaften der Glanzlichter einer Oberfläche vorstellen. In die Berechnung des spekularen Anteils eines Pixels geht neben der Richtung zur Lichtquelle auch die Position des Beobachters ein. Glanzlichter verfügen über einen sog. Koeffizienten, der die Ausdehnung der Glanzlichter regelt. Je größer dieser Koeffizient gewählt wird, desto kleiner und lokaler werden die Glanzlichter. In der Praxis ist diese Unterscheidung wichtig, sie regelt ob das menschliche Auge eine Oberfläche als eher matt (zB. Papier, kleiner Koeffizient) oder als poliert (zB. Plastik oder Metall, großer Koeffizient) wahrnimmt.
SETAMBIENTCOLOR( idMaterial, Red, Green, Blue )
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
SETDIFFUSECOLOR( idMaterial, Red, Green, Blue )
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
SETSPECULARCOLOR( idMaterial, Red, Green, Blue, Coeffizient)
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
Coeffizient
Spekularer Koeffizient 0 .. 128
SETCOLORPROPERTIES( idMaterial, Mirror, Transparency, RefractionIndex )
Mirror
Grad der Spiegelung. 0 – 100
Transparency
Grad der Dursichtigkeit. 0 – 100
ReafractionIndex
Brechungsindex, 0 .. +2, Standardwert: +1
Bis auf Transparency haben alle anderen Werte in einem OpenGL basierten ObjectViewer keine Auswirkung.
Die Werte werden jedoch mitverwaltet um bei höherwertigen Renderverfahren wie Raytracing oder Radiosity ausreichende Informationen bereit zu haben.
SETTEXTURE( idMaterial, MappingMode, Projection, SizeU, SizeV, ScaleToFit, TextureFile, UsePixelMask )
idMaterial Id so wie man sie von CreateMaterial bekommt
MappingMode
0 = Linear
1 = zylindrisch
2 = sphärisch
Projection
1 = entlang X Achse
2 = entlang Y Achse
3 = entlang Z Achse
SizeU, SizeV Grösse der Textur im Realmass (mm)
U = Bildbreite, V = Bildhoehe
ScaleToFit 0 = SizeU und SizeV sind gültig
1 = SizeU und SizeV sind ungültig. Die Textur wird so auf das Objekt projeziert, das sie genauso gross wie die umhüllende Box des Objektes ist.
TextureFile Bitmapdatei.
Kann eine BMP, JPG oder PNG Datei sein. Wird als TextureFile ein Leerstring angegeben, so wird eine eventuell bestehende Textur vom Material entfernt.
UsePixelMask
0 = keine Pixelmask
1 = das Pixel in der linken unteren Bildecke dient als Maskenfarbe. Alle Pixel des Bildes die die gleiche Farbe aufweisen, werden durchsichtig gerendert.
Achtung: Hier kommt es zu Falschbildern. Werden Bereiche ausmaskiert, so werden in die entstehenden Löcher keine neuen Flaechen eingefügt! Es handelt sich lediglich um einen optischen Trick während des Malens aber nicht um eine geometrieverändernde Operation!
GETAMBIENTCOLOR( idMaterial, Red, Green, Blue )
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
GETDIFFUSECOLOR( idMaterial, Red, Green, Blue )
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
GETSPECULARCOLOR( idMaterial, Red, Green, Blue, Coeffizient)
idMaterial
Id des Materials
Red
Rotanteil 0 .. 255
Green
Grünanteil 0 .. 255
Blue
Blauanteil 0 .. 255
Coeffizient
Spekularer Koeffizient 0 .. 128
GETCOLORPROPERTIES( idMaterial, Mirror, Transparency, RefractionIndex )
Mirror
Grad der Spiegelung. 0 – 100
Transparency
Grad der Dursichtigkeit. 0 – 100
ReafractionIndex
Brechungsindex, 0 .. +2, Standardwert: +1
SETTEXTURE( idMaterial, MappingMode, Projection, SizeU, SizeV, ScaleToFit, TextureFile, UsePixelMask )
idMaterial Id so wie man sie von CreateMaterial bekommt
MappingMode
0 = Linear
1 = zylindrisch
2 = sphärisch
Projection
1 = entlang X Achse
2 = entlang Y Achse
3 = entlang Z Achse
SizeU, SizeV
Grösse der Textur im Realmass (mm)
U = Bildbreite, V = Bildhoehe
ScaleToFit
0 = SizeU und SizeV sind gültig
1 = SizeU und SizeV sind ungültig. Die Textur wird so auf das Objekt projiziert, das sie genauso groß wie die umhüllende Box des Objektes ist.
TextureFile
Name der Bitmapdatei. Enthält diese Angabe einen Leerstring, so beudeutet dies, das diesem Material keine Textur zugeordnet ist.
UsePixelMask
0 = keine Pixelmask
1 = das Pixel in der linken unteren Bildecke dient als Maskenfarbe. Alle Pixel des Bildes die die gleiche Farbe aufweisen, werden durchsichtig gerendert.
Achtung: Hier kommt es zu Falschbildern. Werden Bereiche ausmaskiert, so werden in die entstehenden Löcher keine neuen Flaechen eingefügt! Es handelt sich lediglich um einen optischen Trick während des Malens aber nicht um eine geometrieverändernde Operation!