Hauptseite

Blog

Povray

Povray-OS

Balkonien

Impressum

Povray - Open Source --- MA_Tussi_V1


Veröffentlicht: 13.05.2019

Der Name Tussi steht - offensichtlicherweis - für Tiny Ugly Science Satellite (and) Impactor.
Wobei der Impactor zur Zeit noch fehlt, der wird nachgeliefert und an der Spitze montiert. Ihn habe ich bei SpaceX in Auftrag gegeben, kann also was dauern.

Auch in Zukunft wird die Tussi nicht durch Schönheit glänzen, sie soll mir lediglich das Testen anderer Makros und Funktionalitäten auf unkompliziertem Weg ermöglichen. Und gleich dazu als nette Verzierung dienen, möchte ich weltraum-bezogene Hintergründe präsentieren, die ohne Vordergründe langweilig aussehen.

Aussehen und Funktionalität

Das Aussehen kann auf verschiedene Weise angepasst werden. Einerseits mit mehreren Variablen, die im oberen Teil der Include-Datei vorbelegt sind, andererseits mit einem Parameter-String wie weiter unten beschrieben.

Abgesehen von generellen Farb- und Größeneinstellungen kann der Hauptantrieb aktiviert werden, der momentan jedoch nur aus einem halb-durchsichtigen Cone besteht. Die Solarzellen können angelegt oder ausgeklappt und dazu um 360 Grad gedreht werden. Die Stelltriebwerke können ebenfalls aktiviert werden, eine vernünftige Steuerung dafür wird nachgeliefert.

Einfaches Beispiel für den Aufruf:
#local Params = "sc-angle:0;sc-tilt:0;engine-active;engine-flame-dist:1.3"
object {
	TU_GetTussi_Base ("", "", Params)
	scale 1
	rotate <65,80,0>
}

Die ersten beiden Parameter sollten vorerst freigelassen werden, sie sind Vorbereitung für weitere Spielereien, die noch zuendegebaut werden wollen. Weitere Beispiele sind wie immer ganz unten im Quellcode hinterlegt.

Verwendung von GetParam-Makros
Bei der Parametrisierung wird im großen Umfang von den Makros MA_GetParams* aus MA_Helpers_V1 Gebrauch gemacht. Sämtliche Parameter, die das Aussehen der Sonde beeinflussen, werden in einem String zusammengefasst und mit nur einem Parameter an die Funktion übergeben. Tussi sucht sich aus diesem String seine Parameter raus und setzt sie um.

Definiert und übergeben werden die Parameter wiefolgt:

#ifndef(TU_Params_Default)
	#declare TU_Params_Default = concat (
		";body-dia:            4",
		";body-height:         6",
		";engine-height:       2.0",
		";engine-dia:          1.0",
		";engine-flame-height: 3",
		...
		";sc-angle:            90",
		";sc-tilt:            -40"
	);
#end
#macro TU_GetTussi_Base ("body-dia:2")

Den Concat habe ich nur verwendet, um die einzelnen Parameter schön untereinander aufzulisten, der String kann selbstredend in einer Reihe geschrieben werden (#declare TU_Params_Default = "body-dia:4;body-height:6 ... usw ...")

Die Defaults schnappt sich Tussi innerhalb des Makros selbst, jegliche Angaben beim Makro-Aufruf überschreiben die Voreinstellungen (im Beispiel oben der Durchmesser). Danach werden die Werte für die eigentliche Variable herausgesucht und in manchen Fällen gleich noch modifiziert.

#macro TU_GetTussi_Base (mParams)
	#local mParams          = concat (TU_Params_Default, ";", mParams);
	#local mRadius          = MA_GetParam_F(mParams, "body-dia", 2) / 2;
	#local mHeight          = MA_GetParam_F(mParams, "body-height", 5);
	#local mSolarWingAngle  = MA_GetParam_F(mParams, "sc-angle", 0) * -1;
	#local mSolarWingTilt   = MA_GetParam_F(mParams, "sc-tilt", 0) + 90;
	...

Werden im Makro weitere Makros aufgerufen die ihrerseits Objekte zurückgeben, wird der gesamte Parameter-String an diese Sub-Makros unbehandelt übergeben, damit diese eigenständig Werte entnehmen können, ebenfalls mit MA_GetParam*.

#macro TU_GetTussi_Base (mParams)
	...
	#local mSolarWing1 = object {
		TU_SolarWing ( mParams )
		rotate <0, -mSolarWingTilt, mSolarWingAngle>
	}
	#local mSolarWing2 = object {
		TU_SolarWing ( mParams )
		rotate <0, +mSolarWingTilt, mSolarWingAngle>
	}

Im Fall Tussi habe ich es mit den Parametern ein wenig übertrieben, es dient vor allem dem Test der Funktionalität.
So wie es ist, könnte man genausogut globale Variablen für alle Werte deklarieren.

Normalerweise handhabe ich das ein wenig anders. Baue ich ein Makro, setze ich die Werte ganz normal direkt ein und kann in den meisten Fällen damit arbeiten, vielleicht sogar für immer und ewig. Parameter werden in dem Fall nicht verwendet.

#macro GetSphere(mParams)
	sphere { 0,1
		texture { pigment { color rgb <1,1,1> } }
	}
#end
GetSphere("")

Stellt sich jedoch an anderer Stelle heraus, das innerhalb des Makros die festgesetzten Werte parametriesiert werden wollen, kann ich genüsslich Parameter hinzufügen und sie von außen verändern, ohne das die Aufrufe der bisherigen Verwendungen angepasst werden müssen. Bei großen Bibliotheken und Projekten kann das mitunter sehr nervig werden, wenn nach Ändern eines Makros erstmal überall der Aufruf gesucht, gefunden, geändert und geprüft werden will.

Entsprechend:

#macro GetSphere(mParams)
	#local mPos  = MA_GetParam_V(mParams, "position", <0,0,0>);
	#local mSize = MA_GetParam_F(mParams, "size", 1);
	#local mCol  = MA_GetParam_V(mParams, "color", <1,1,1>);
	sphere { mPos, mSize
		texture { pigment { color rgb mCol } }
	}
#end
GetSphere("")
GetSphere("position: <2,2,7>; size: 3; color: 1,0,0;")

Sieht ein wenig kompliziert aus, aber ich hab den Kram nicht ohne Grund programmiert.
Je umfangreicher die eigenen Bibliotheken werden, umso hilfreicher werden Konstrukte dieser Art.
Sollten mein Quellcode für die ISS bald fertig sein, werden Zeilen dieser Art darin Zuhauf rumfliegen.

Download
ma_tussi_v1.7z => 280 kB 7-Zip, Version 1.0 vom 13. Mai 2019

Kommentare

Keine Kommentare bisher.







© Mä 2014-2047