Povray - Open Source --- MA_Tussi


Veröffentlicht: 29.12.2024
Status: beta

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. Ist 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.

Screenplay-Kompatibilität

Wie ein paar andere meiner Pakete kann auch die Tussi während Animationen mit Screenplay gesteuert werden. Innerhalb ihrer Makros fragt sie desöfteren ab, wie sie sich verhalten soll.

Wie das im Einzelnen gemacht wird habe ich in einem Beispiel verdeutlicht, dessen Resultat auf Youtube zu sehen ist. Darüberhinaus ist der gesamte dafür notwendige Source-Code im Screenplay-Zip enthalten und sollte die meisten Fragen beantworten.

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 sind ebenfalls aktivierbar, jedoch nur über die Screenplay-Erweiterung, da es ohne dann doch langsam zu kompliziert wurde.

Einfaches Beispiel für den Aufruf:
#local Params = "sc-angle:90;sc-tilt:-30;engine-active: 1;engine-flame-dist:1.3;";
object {
	TU_Tussi ("", "", Params, "")
	rotate <45,0,0> //Side-view
}

CenterType
Der vierte Parameter CenterType gibt an, in welcher Weise das Schätzgen zentriert werden soll.

Ohne Angabe wird der Mittelpunkt der Dose zentriert, was bei geplanten Drehungen vorzuziehen ist. Wird "standing" oder "standing-real" verwendet, befindet sich alle Hardware (somit ohne Abgasstrahlen) im Y+ Bereich, um Tussi auf ihre eigenen Füße zu stellen, ganz gleich wie groß sie auch sein mag.

Verwendung der GetParam-Makros
Bei der Parametrisierung wird im großen Umfang vom Makro MA_GetParam_*() aus MA_Helpers 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:

/* original default-values defined in ma_tussi.inc */
#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

/* Creation in an example-file */
#local Params = "body-dia:2";
object {
	TU_Tussi ("", "", Params, "")
	rotate <45,0,0> //Side-view
}

Den Concat habe ich lediglich 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, 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_Tussi (mParentName, mNewName, xParams, mCenterType)
	#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_Tussi (...)
	...
	#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. Allerdings ... ziemlich Vielen.

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.

Todos
Der Impaktor wartet noch auf seine Fertigstellung, außerdem sind aufwendigere Solarzellen und ein Roboterarm in Arbeit. Nicht zuletzt will die Handhabung der Lagetriebwerke verbessert werden.

Und Beizeiten werde ich weiter an der Doku arbeiten, ich hatte irgendwann keine Lust mehr aufs Texten.

Download
ma_tussi.7z => 680 kB 7-Zip, Version 1.0 vom 29. Dezember 2024

Kommentare

Keine Kommentare bisher.
* Die Angabe von E-Mail und Webseite ist optional.
Die E-Mail wird nicht mit dem Kommentartext angezeigt sondern nur intern gespeichert, sollte lediglich bei Kontaktwunsch angegeben werden.
der deutschen Seite
der englischen Seite
beiden Seiten