Add more mesh documentation

Armin Burgmeier 2010-04-04 20:12:21 +02:00
parent ae39189071
commit 71dfca3dd2
15 changed files with 454 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

View File

@ -3,10 +3,9 @@
<?xml-stylesheet type="text/xsl" href="../../clonk.xsl"?>
<doc>
<title>Animationen</title>
<!-- TODO: Explain how to use a mesh for an object in general -->
<h id="Controls">Animationen</h>
<h id="Animations">Animationen</h>
<part>
<text>Ab OC ist es möglich, direkt 3D-Modelle (Meshes) als Grafik für Objekte zu verwenden. Eine der neuen Möglichkeiten die diese Funktionalität bietet ist es, einzelne Animationen miteinander zu kombinieren. So kann zum Beispiel der Clonk leicht während des Laufens oder Springens einen Gegenstand werfen oder flüssig Übergänge zwischen einzelnen Animationen darstellen.</text>
<text>Eine der ab OC neuen Möglichkeiten, 3D-Modelle als Objektgrafik zu verwenden (siehe <emlink href="definition/meshes.html">Meshes</emlink>), ist es, einzelne Animationen miteinander zu kombinieren. So kann zum Beispiel der Clonk leicht während des Laufens oder Springens einen Gegenstand werfen oder flüssig Übergänge zwischen einzelnen Animationen darstellen.</text>
<text>Jedes Objekt hat dazu einen sogenannten "Animation-Stack". Dieser besteht aus beliebig vielen Einträgen mit eindeutiger Priorität, die im folgenden Slots genannt werden. Slots mit höherer Priorität überschreiben Slots mit niedriger Priorität, dies gilt jedoch nur für Bones die von der Animation des höheren Slots überhaupt betroffen sind. Um obiges Beispiel aufzugreifen kann somit also die Werf-Animation eine höhere Priorität als der Lauf- oder Spring-Animation eingeräumt werden, so dass die Armbewegung der Werfanimation die der anderen Animation überschreibt. Da die Werfanimation aber keine Beinbewegung beschreibt wird diese vom Laufen oder Springen übernommen.</text>
<text>Bleibt noch zu klären, wie die Animationen in den einzelnen Slots zustande kommen. Ein Slot kann entweder eine einzelne Animation sein, oder eine Interpolation zwischen zwei anderen Animationen (von denen eine oder beide wieder Interpolationen zweier anderer Animationen sein können). Wird eine solche Interpolation verwendet, so kann zusätzlich eine Gewichtung angegeben werden, das heißt wie sehr die jeweils beiden Animationen zur Gesamtanimation beitragen. Eine Gewichtung von 0 bedeutet, dass nur die erste Animation beiträgt (als ob die zweite gar nicht vorhaden wäre), und eine Gewichtung von 1000 bedeutet, dass nur die zweite Animation beiträgt. Werte dazwischen bewirken einen Übergang zwischen den Animationen. Um erneut auf das Beispiel von oben zurückzukommen: Wenn der Clonk zum Zeitpunkt des Werfens steht, dann aber beginnt loszulaufen bevor die Wurfanimation fertig ist, so liegt es nahe, zu der Stehen-Animation noch eine Laufen-Animation hinzuzufügen, die mit der Zeit immer mehr gewichtet wird bis die Gewichtung 1000 erreicht und der Übergang zum Laufen somit beendet ist. Da die Wurf-Animation in einem anderen Slot stattfindet ist sie von dem Übergang nicht betroffen und wird ganz normal abgespielt.</text>
<text>Folgende Grafik veranschaulicht das Konzept anhand des gewählten Beispiels:</text>
@ -31,7 +30,7 @@
</row>
<row>
<col><funclink>Anim_Linear</funclink></col>
<col>Linear mit der Zeit zu- oder abnehmend. Auch dieser AVP kann verwedet werden wenn sich sonst keiner anbietet, aber es zu aufwendig ist die neue Position jeden Frame auszurechnen. In dem Fall kann die Animation bis zur nächsten genauen Positionsbestimmung fortlaufen.</col>
<col>Linear mit der Zeit zu- oder abnehmend. Auch dieser AVP kann verwendet werden wenn sich sonst keiner anbietet, aber es zu aufwendig ist die neue Position jeden Frame auszurechnen. In dem Fall kann die Animation bis zur nächsten genauen Positionsbestimmung fortlaufen.</col>
</row>
<row>
<col><funclink>Anim_X</funclink></col>
@ -59,14 +58,14 @@
</row>
<row>
<col><funclink>Anim_Action</funclink></col>
<col>Proportional zur Phase der aktuell ausgeführten Action.</col>
<col>Proportional zur Phase der aktuell ausgeführten Aktivität.</col>
</row>
<!-- TODO: There are some more, but I am not convinced they are actually useful -->
</table></text>
<text>Für Beispiele zu den einzelnen AVPs siehe die Dokumentation zu den entsprechenden Scriptfunktion.</text>
<h id="ActMap">Animationen der ActMap</h>
<text>Einzelnen Actions in der <emlink href="definition/actmap.html">ActMap</emlink> kann eine Animation zugeordnet werden. Diese Animationen werden immer in Slot 0 abgespielt. Das bedeutet unter anderem, dass in Slot 0 höchstens eine Animation abgespielt wird, es gibt keine Kombinationen. Es ist auch nicht möglich, diese durch Scriptfunktionen wie <funclink>StopAnimation</funclink> oder <funclink>SetAnimationPosition</funclink> zu beeinflussen. Es ist jedoch sehr wohl möglich, Eigenschaften von ActMap-Animationen abzufragen, zum Beispiel mit <funclink>GetAnimationPosition</funclink>. Es existieren auch negative Slotnummern, sodass man eigene Animationen eine geringere Priorität als ActMap-Animationen zuweisen kann.</text>
<text>Einzelnen Aktivitäten in der <emlink href="definition/actmap.html">ActMap</emlink> kann eine Animation zugeordnet werden. Diese Animationen werden immer in Slot 0 abgespielt. Das bedeutet unter anderem, dass in Slot 0 höchstens eine Animation abgespielt wird, es gibt keine Kombinationen. Es ist auch nicht möglich, diese durch Scriptfunktionen wie <funclink>StopAnimation</funclink> oder <funclink>SetAnimationPosition</funclink> zu beeinflussen. Es ist jedoch sehr wohl möglich, Eigenschaften von ActMap-Animationen abzufragen, zum Beispiel mit <funclink>GetAnimationPosition</funclink>. Es existieren auch negative Slotnummern, sodass man eigene Animationen eine geringere Priorität als ActMap-Animationen zuweisen kann.</text>
</part>
<author>Clonk-Karl</author><date>Januar 2010</date>

View File

@ -24,12 +24,21 @@
<dt id="Graphicsbmp"><img src="../../images/icon_image.gif" width="16" height="16" />Graphics.bmp</dt>
<dd><text>Das BMP-Format für Grafikelemente ist veraltet, wird aber weiterhin unterstützt. In einem 256 Farb-Bitmap (8 Bit) dürfen nur die Farben 16 bis 103 der festen Clonk-Palette verwendet werden (siehe Originalobjekte).</text></dd>
<dt id="Graphicsmesh"><img src="../../images/icon_ogre_mesh.gif" width="16" height="16" /><emlink href="definition/meshes.html">Graphics.mesh</emlink></dt>
<dd><text>Ab OC kann statt einer Grafik im BMP- oder PNG-Format auch ein 3D-Modell verwendet werden. Dieses muss im OGRE-Format vorliegen. Für die meisten 3D-Programme existieren entsprechende Exporter. Alle Dateien die von dem Mesh benötigt werden (insb. Materialskripte, Texturen und Skelette) müssen ebenfalls im Objekt vorhanden sein.</text></dd>
<dt id="Graphicsskeleton"><img src="../../images/icon_ogre_mesh.gif" width="16" height="16" />*.skeleton</dt>
<dd><text>Skeleton-Dateien enthalten Bones und Animationen für ein 3D-Modell. Sie werden in der Regel vom Exporter generiert wenn Bones und/oder Animationen verwendet werden.</text></dd>
<dt id="Graphicsex"><img src="../../images/icon_image.gif" width="16" height="16" />Graphics*.png/Overlay*.png/Graphics*.bmp</dt>
<dd><text>Objekte können auch alternative Grafiksätze bereitstellen, die während des Spiels mit Hilfe des Scriptbefehls <emlink href="script/fn/SetGraphics.html">SetGraphics</emlink>() zugewiesen werden können. Der Name der Grafik entspricht dabei dem Dateinamensteil zwischen "Graphics" und der Dateiendung; das entsprechende Overlay wird automatisch mit verwendet. Für Beispiele siehe <emlink href="script/fn/SetGraphics.html">SetGraphics</emlink>().</text></dd>
<dt id="Titlepng"><img src="../../images/icon_image.gif" width="16" height="16" />Title.png/Title.bmp</dt>
<dd><text>Objektdefinitionen können ein zusätzliches Titelbild enthalten (ähnlich Szenarien). Dieses wird im Menüsystem anstelle des Pictures der Objektdefinition angezeigt. Empfohlene Größe: 150x150 Pixel, sofern die vorhandene Titelgrafik dies hergibt. Für Titelbilder wird ebenfalls das veraltete BMP-Format mit 256 Farben weiterhin unterstützt.</text></dd>
<dt id="MaterialScripts"><img src="../../images/icon_ogre_mesh.gif" width="16" height="16" /><emlink href="definition/meshes.html#MaterialScripts">*.material</emlink></dt>
<dd><text>OGRE Materialskripte sind einfache Textdateien die Informationen über das Material eines 3D-Modells beinhalten. Jedem Modell ist ein Material zugeordnet, das sein Erscheinen festlegt. In der Regel werden diese Skripte auch vom Exporter generiert, sie können aber für zusätzliche Effekte auch einfach mit einem Texteditor nachträglich bearbeitet werden.</text></dd>
<dt id="ScriptcScript__c"><img src="../../images/icon_text.gif" width="16" height="16" /><emlink href="definition/script.html">Script.c</emlink></dt>
<dd><text>Das Objektscript. Siehe <emlink href="script/index.html">Script-Dokumentation</emlink> und <emlink href="lang.html">Sprachanpassung</emlink>.</text></dd>

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE doc SYSTEM "../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../clonk.xsl"?>
<doc>
<title>Meshes</title>
<h id="Meshes">Meshes</h>
<part>
<text>Ab OC ist es möglich, direkt 3D-Modelle (Meshes) als Grafik für Objekte zu verwenden. Dazu müssen sie im OGRE-Format vorliegen. Für gängige Modellierungstools gibt es entsprechende Exporter, eine Liste befindet sich auf dem <a href="http://www.ogre3d.org/wiki/index.php/Exporters">OGRE Wiki</a>. Es werden sowohl das OGRE-Binär-Format (*.mesh) als auch das OGRE-XML-Format (*.mesh.xml) unterstützt, jedoch wird empfohlen wann immer möglich das Binärformat zu verwenden, da es eine kleinere Dateigröße hat und schneller von der Engine geladen werden kann. Das Tool <a href="http://www.ogre3d.org/wiki/index.php/OgreXmlConverter">OgreXMLConverter</a> kann zwischen beiden Formaten umwandeln.</text>
<text>Der Exporter erzeugt in der Regel eine Mesh-Datei (*.mesh oder *.mesh.xml), falls das Mesh Bones enthält eine Skelett-Datei (*.skeleton oder *.skeleton.xml), ein Materialskript (*.material) und eventuell verwendete Texturen. Um das Mesh für ein Clonk-Objekt zu verwenden müssen alle erzeugten Dateien in die <emlink href="definition/index.html">Objektdefinition</emlink> (*.c4d) kopiert werden und die Mesh-Datei muss in Graphics.mesh bzw. Graphics.mesh.xml umbenannt werden. Texturen werden im PNG-, JPG- und BMP-Format unterstützt.</text>
<text>Das Mesh wird nicht automatisch auf die Größe des Shapes (d.h. die Width- und Height-Werte aus der <emlink href="definition/defcore.html">DefCore.txt</emlink>) skaliert. Stattdessen entspricht eine Einheit im Modellierungstool ein Pixel in Clonk. Dies erleichtert die Größenverhältnisse zwischen verschiedenen Meshes einzuhalten, was insbesondere beim Aneinanderhängen von Meshes (siehe unten) hilfreich ist. Auch auf das Koordinatensystem ist acht zu geben: Die X-Achse im Mesh-Koordinatensystem zeigt in Clonk nach vorne, die Y-Achse nach rechts und die Z-Achse nach oben.</text>
<h id="MaterialScripts">Materialskripte</h>
<text>Alle Materialskripte (*.material-Dateien) werden von der Engine geladen bevor das eigentliche Mesh geladen wird. Dabei handelt es sich um einfache Textdateien die Materialeigenschaften (Farben für verschiedene Lichter, Texturen, etc.) bestimmen die dann von Meshes verwenden werden können. Jedem Material ist ein Name zugeordnet der in der Regel im Modellierungstool bestimmt werden kann. Dabei sollte darauf geachtet werden, dass dieser möglichst eindeutig ist (also zum Beispiel den Objektnamen enthält), da alle geladenen Materialien direkt von jedem Mesh verwendet werden können und es ansonsten leicht zu Namenskonflikten kommen kann.</text>
<text>Materialskripte können auch von Hand erstellt oder nachbearbeitet werden. Das Format wird im <a href="http://www.ogre3d.org/docs/manual/manual_14.html">OGRE-Handbuch</a> beschrieben. Es werden jedoch (noch) nicht alle dort beschriebenen Features von Clonk unterstützt: Insbesondere Pixel-, Vertex- und Geometrie-Shader können derzeit nicht verwendet werden. Auch die Verwendung von LOD (Level of Detail) ist noch nicht möglich. Für das Feld colour_op_ex in Textureinheiten kann für source1 oder source2 zusätzlich noch der Wert src_player_colour angegeben werden was der Spielerfarbe des Besitzers entspricht. Auf diese Weise ist es möglich, Objekte (teilweise) mit ihrer Spielerfarbe einzufärben.</text>
<text>Zur Laufzeit kann das Materialskript auch mit der C4Script-Funktion <funclink>SetMeshMaterial</funclink> geändert werden.</text>
<h id="Animations">Animationen</h>
<text>Wei bei Bitmap-basierten Grafiken kann ein Objekt während einer Aktivität eine Animation abspielen. Dazu muss zuerst ein Rig für das Modell erstellt und anschließend die Animation erzeugt werden. Beim Export wird sie in der *.skeleton (bzw. *.skeleton.xml im OGRE-XML-Format) gespeichert. Um sie während einer Aktivität abzuspielen muss das Animation-Feld in der <emlink href="definition/actmap.html">ActMap</emlink> gesetzt sein. Die Facet-Felder werden bei Mesh-Grafiken ignoriert.</text>
<text>Per Script ist es auch möglich, mehrere Animationen gleichzeitig abzuspielen bzw. Übergänge zwischen Animationen zu machen. Um mehr darüber zu erfahren siehe <emlink href="definition/animations.html">Animationen</emlink>.</text>
<h id="Attachment">Aneinanderhängen von Meshes</h>
<text>Meshes können aneinandergehängt werden, sodass sie sich immer miteinander bewegen. Auf diese Weise kann der Clonk zum Beispiel Sachen tragen oder mit dem Bogen Zielen. Um zwei Meshes zu verbinden gibt es die C4Script-Funktion <funclink>AttachMesh</funclink>, um sie wieder zu lösen kann <funclink>DetachMesh</funclink> verwendet werden. Beim Anhängen wird dabei jeweils ein Bone von den beiden Meshes angegeben. Das angehängte Mesh wird dann so positioniert, dass sein Bone immer die gleiche Position und Orientierung hat wie der Bone mit dem es verbunden wird.</text>
<text>Dabei ist jedoch darauf zu achten, dass lediglich die Meshes, also die Grafiken der Objekte, verbunden werden. Die wirkliche Position des angehängten Objekts (also was die Funktionen <funclink>GetX</funclink> und <funclink>GetY</funclink> zurückgeben oder den Bereich in dem das Objekt von <funclink>Find_AtPoint</funclink>, <funclink>Find_InRect</funclink> oder <funclink>Find_AtRect</funclink> gefunden wird) ändert sich <em>nicht</em>.</text>
<h id="Picture">Repräsentativgrafik</h>
<text>Wird ein Mesh verwendet so bleibt der Picture-Eintrag aus der <emlink href="definition/defcore.html">DefCore.txt</emlink> ohne Wirkung. Stattdessen wird eine perspektivische Projektion des Meshes verwendet. Die Kamera befindet sich dabei vor dem Mesh in einer geeigneten Entfernung so dass das Mesh vollständig erfasst wird.</text>
<text>Die Position und Ausrichtung des Meshes relativ zur Kamera kann mit der "PictureTransformation"-Eigenschaft geändert werden. So kann es gedreht, versetzt und vergrößert dargestellt werden. Der Eigenschaft sollte ein Array mit 12 Integer-Einträgen zugewiesen werden, die eine 3x4-Matrix bilden. Die ersten vier Werte bilden die erste Zeile, die nächsten vier die zweite und die letzten vier Werte die dritte Zeile. Mit Hilfe der Skriptfunktionen <funclink>Trans_Identity</funclink>, <funclink>Trans_Translate</funclink>, <funclink>Trans_Rotate</funclink>, <funclink>Trans_Scale</funclink> und <funclink>Trans_Mul</funclink> lassen sich diese Matrizen sehr bequem generieren.</text>
<text>Wie bei <funclink>SetObjDrawTransform</funclink> werden die einzelnen Matrixelemente in Promille (1000 = 100%) angegeben, da es in Clonk keine Fließkommazahlen gibt.</text>
<text>Als Beispiel hier die Transformation für die Werkzeughütte:</text>
<code><funclink>SetProperty</funclink>("PictureTransformation", <funclink>Trans_Mul</funclink>(<funclink>Trans_Translate</funclink>(0,0,7000), <funclink>Trans_Rotate</funclink>(-20,1,0,0), <funclink>Trans_Rotate</funclink>(30,0,1,0)), def);</code>
<text>Zuerst wird die Werkzeughütte um 30 Grad gegen den Uhrzeigersinn um die Y-Achse gedreht, danach um 20 Grad im Uhrzeigersinn um die X-Achse. Anschließend wird sie noch um 7 Einheiten in positive Z-Richtung verschoben sodass sie näher an der Kamera ist.</text>
<h id="Transformation">MeshTransformation</h>
<text>Genauso wie die Eigenschaft "PictureTransformation" das Erscheinungsbild der Repräsentativgrafik ändert gibt es auch die Eigenschaft "MeshTransformation", die auf die normale Grafik im Spiel wirkt. Dies wirkt sich sehr ähnlich wie <funclink>SetObjDrawTransform</funclink> aus, jedoch gibt es einige Unterschiede:</text>
<ul>
<li>Mit der "MeshTransformation"-Eigenschaft kann auch die Z-Koordinate beeinflusst werden. Das Mesh kann also zum Beispiel um die X- oder Y-Achse gedreht werden.</li>
<li><funclink>SetObjDrawTransform</funclink> wird auch nach der Beleuchtung angewandt. Die transformierten Koordinaten haben also keinen Einfluss auf die Beleuchtung mehr. Wird das Mesh zum Beispiel von unten beleuchtet und wird es dann mit <funclink>SetObjDrawTransform</funclink> auf den Kopf gestellt, so bleibt die Beleuchtung an der gleichen Stelle auf dem Mesh, wird also mitgedreht. Bei der "MeshTransformation"-Eigenschaft wird die Beleuchtung jedoch hinterher gemacht, sodass das Mesh immer von unten beleuchtet wird, egal wie es ausgerichtet ist.</li>
<li>Sind sowohl "MeshTransformation" als auch <funclink>SetObjDrawTransform</funclink> gesetzt, so wird zuerst die "MeshTransformation" auf das Mesh angewandt und dann <funclink>SetObjDrawTransform</funclink>.</li>
</ul>
</part>
<author>Clonk-Karl</author><date>April 2010</date>
</doc>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>AttachMesh</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>int</rtype>
<params>
<param><type>any</type><name>mesh</name><desc>ID oder Objekt des Meshes das angehängt werden soll.</desc></param>
<param><type>string</type><name>parent_bone</name><desc>Bone am Mesh des aufrufenden Objekts an dem das anzuhängende Mesh befestigt werden soll.</desc></param>
<param><type>string</type><name>child_bone</name><desc>Bone am Mesh des anzuhängenden Objekts mit dem es befestigt werden soll.</desc></param>
<param><type>array</type><name>transformation</name><desc>Transformation im Koordinatensystem des anzuhängenden Meshes, die auf selbiges angewandt wird. Das Array sollte 12 Integer-Einträge haben die eine 3x4-Matrix beschreiben wobei jeder Wert in Promille (1000 = 100%) angegeben ist. Die Matrizen können auch mit <funclink>Trans_Identity</funclink>, <funclink>Trans_Translate</funclink>, <funclink>Trans_Rotate</funclink> und <funclink>Trans_Scale</funclink> erzeugt und mit <funclink>Trans_Mul</funclink> kombiniert werden.</desc><optional /></param>
</params>
</syntax>
<desc>Befestigt ein Mesh an einem anderen. Wenn für <code>mesh</code> eine ID angegeben wird, so wird das Mesh der entsprechenden Definition verwendet. Wenn für <code>mesh</code> ein Objekt angegeben wird, so wird dessen aktuelles Mesh verwendet, inklusive aller Animationen oder weiterer angehängter Meshes. Dabei wird jedoch nur die Grafik angehangen, das Objekt selbst bleibt weiter an seiner gegenwärtigen Position. Der Rückgabewert ist eine Nummer mit Hilfe derer das Mesh mit <funclink>DetachMesh</funclink> wieder gelöst werden kann.</desc>
<remark>Wird für mesh ein Objekt angegeben, so wird die "MeshTransformation"-Eigenschaft nicht auf das angehängte Mesh angewandt. Stattdessen kann der Parameter <code>transformation</code> angegeben werden um das angehängte Mesh zu transformieren.</remark>
<examples>
<example>
<code><funclink>AttachMesh</funclink>(Bow, "pos_hand1", "main");</code>
<text>Gibt einem Clonk einen Bogen in die Hand wenn im Clonkscript ausgeführt. Der Bogen wird mit seinem Bone "main" an den Bone "pos_hand1" des Clonks gehängt.</text>
</example>
</examples>
<related>
<funclink>DetachMesh</funclink>
<funclink>SetAttachBones</funclink>
<funclink>SetAttachTransform</funclink>
<funclink>Trans_Identitiy</funclink>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>Trans_Mul</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>DetachMesh</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param><type>int</type><name>attach_number</name><desc>Nummer des zu entfernenden angehängten Meshes. Der Rückgabewert von <funclink>AttachMesh</funclink> bildet solch eine Nummer.</desc></param>
</params>
</syntax>
<desc>Wurde zuvor mit <funclink>AttachMesh</funclink> ein Mesh an einem anderen befestigt, so kann es mit dieser Funktion wieder gelöst werden.</desc>
<examples>
<example>
<code>func FxIntCarryBowStart(object target, int number)
{
<funclink>EffectVar</funclink>(0, target, number) = target-><funclink>AttachMesh</funclink>(Bow, "pos_hand1", "main");
}
func FxIntCarryBowStop(object target, int number)
{
target-><funclink>DetachMesh</funclink>(<funclink>EffectVar</funclink>(0, target, number));
}</code>
<text>Script für einen <emlink href="script/Effects.html">Effekt</emlink>: Während der Effekt aktiv ist trägt das Effektziel einen Bogen.</text>
</example>
</examples>
<related>
<funclink>AttachMesh</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>GetMeshMaterial</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>string</rtype>
<params>
<param><type>int</type><name>submesh</name><desc>Besteht das Mesh aus mehreren SubMeshes, so kann durch diesen Parameter angegeben werden das Material welches SubMeshes abgefragt werden soll.</desc><optional /></param>
</params>
</syntax>
<desc>Gibt zurück, welches Material das Mesh des aufrufenden Objekts gerade gesetzt hat.</desc>
<examples>
<example>
<code><funclink>if</funclink>(<funclink>GetMeshMaterial</funclink>() == "Clonk_Body")
<funclink>SetMeshMaterial</funclink>("Clonk_Body_EyesClosed")
else
<funclink>SetMeshMaterial</funclink>("Clonk_Body");</code>
<text>Wenn ein Clonk die Augen gerade geöffnet hat lässt dieses Script sie schließen, andernfalls werden sie geöffnet.</text>
</example>
</examples>
<related>
<funclink>SetMeshMaterial</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>SetAttachBones</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param><type>int</type><name>attach_number</name><desc>Nummer des angehängten Meshes. Der Rückgabewert von <funclink>AttachMesh</funclink> bildet solch eine Nummer.</desc></param>
<param><type>string</type><name>parent_bone</name><desc>Bone am aufrufenden Objekt an den das Mesh angehängt werden soll.</desc><optional /></param>
<param><type>string</type><name>child_bone</name><desc>Bone des anzuhängenden Meshes mit dem es befestigt werden soll.</desc><optional /></param>
</params>
</syntax>
<desc>Wurde zuvor mit <funclink>AttachMesh</funclink> ein Mesh an einem anderen befestigt, so kann mit dieser Funktion einer oder beide der Bones geändert werden mit denen sie aneinander hängen. Um nur einen Bone zu ändern kann für den anderen Parameter <code>nil</code> angegeben werden.</desc>
<examples>
<example>
<code>func FxIntCarryBowStart(object target, int number)
{
<funclink>EffectVar</funclink>(0, target, number) = target-><funclink>AttachMesh</funclink>(Bow, "pos_hand1", "main");
<funclink>EffectVar</funclink>(1, target, number) = true;
}
func FxIntCarryBowTimer(object target, int number)
{
<funclink>if</funclink>(<funclink>EffectVar</funclink>(1, target, number))
target-><funclink>SetAttachBones</funclink>(<funclink>EffectVar</funclink>(0, target, number), "pos_hand2", nil);
else
target-><funclink>SetAttachBones</funclink>(<funclink>EffectVar</funclink>(0, target, number), "pos_hand1", nil);
<funclink>EffectVar</funclink>(1, target, number) = !<funclink>EffectVar</funclink>(1, target, number);
}</code>
<text>Script für einen <emlink href="script/Effects.html">Effekt</emlink>: Bei Start trägt der Clonk einen Bogen in einer Hand um bei jedem Timer-Aufruf nimmt der Clonk den Bogen von der rechten in die linke Hand oder umgekehrt.</text>
</example>
</examples>
<related>
<funclink>AttachMesh</funclink>
<funclink>DetachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>SetAttachTransform</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param><type>int</type><name>attach_number</name><desc>Nummer des angehängten Meshes dessen Transformation geändert werden soll. Der Rückgabewert von <funclink>AttachMesh</funclink> bildet solch eine Nummer.</desc></param>
<param><type>array</type><name>transformation</name><desc>Neue Transformation im Koordinatensystem des angehängten Meshes, die auf selbiges angewandt wird. Das Array sollte 12 Integer-Einträge haben die eine 3x4-Matrix beschreiben wobei jeder Wert in Promille (1000 = 100%) angegeben ist. Die Matrizen können auch mit <funclink>Trans_Identity</funclink>, <funclink>Trans_Translate</funclink>, <funclink>Trans_Rotate</funclink> und <funclink>Trans_Scale</funclink> erzeugt und mit <funclink>Trans_Mul</funclink> kombiniert werden.</desc></param>
</params>
</syntax>
<desc>Wurde zuvor mit <funclink>AttachMesh</funclink> ein Mesh an einem anderen befestigt, so kann mit dieser Funktion die Transformation des angehängten Meshes geändert werden.</desc>
<examples>
<example>
<code><funclink>SetAttachTransformation</funclink>(attach_number, <funclink>Trans_Identity</funclink>());</code>
<text>Setzt die Transformation für das angehängte Mesh mit der Nummer <code>attach_number</code> zurück. Es wird davon ausgegangen dass eine Variable namens <code>attach_number</code> mit einer gültigen Nummer, wie sie von <funclink>AttachMesh</funclink> zurückgegeben wird, existiert.</text>
</example>
</examples>
<related>
<funclink>AttachMesh</funclink>
<funclink>DetachMesh</funclink>
<funclink>SetAttachBones</funclink>
<funclink>Trans_Identity</funclink>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>Trans_Mul</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>SetMeshMaterial</title>
<category>Objekte</category><subcat>Darstellung</subcat>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param><type>string</type><name>material</name><desc>Name des zu setzenden Materials. Es muss beim Start der Engine bereits geladen sein, d.h. in einer *.material-Datei definiert worden sein die sich in einem geladenen Objekt befindet.</desc></param>
<param><type>int</type><name>submesh</name><desc>Besteht das Mesh aus mehreren SubMeshes, so kann durch diesen Parameter angegeben werden das Material welches SubMeshes geändert werden soll.</desc><optional /></param>
</params>
</syntax>
<desc>Ändert das Material des Meshes des aufrufenden Objekts zur Laufzeit.</desc>
<examples>
<example>
<code><funclink>SetMeshMaterial</funclink>("Clonk_Body_EyesClosed");
<funclink>Schedule</funclink>("SetMeshMaterial(\"Clonk_Body\")", 5);</code>
<text>Lässt einen Clonk blinzeln.</text>
</example>
</examples>
<related>
<funclink>GetMeshMaterial</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Trans_Identity</title>
<category>Arithmetik</category>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>array</rtype>
</syntax>
<desc>Liefert eine 3x4-Einheitsmatrix. Sie kann als Transformation für <funclink>AttachMesh</funclink> oder für die "PictureTransformation" oder "MeshTransformation"-Eigenschaften (siehe <emlink href="definition/meshes.html#Picture">Meshes</emlink>) verwendet werden.</desc>
<examples>
<example>
<code><funclink>this</funclink>["MeshTransformation"] = <funclink>Trans_Identity</funclink>();</code>
<text>Setzt die MeshTransformation für das aufrufende Objekt zurück.</text>
</example>
</examples>
<related>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>Trans_Mul</funclink>
<funclink>AttachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Trans_Mul</title>
<category>Arithmetik</category>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param><type>array</type><name>first</name><desc>Erste Matrix wie von <funclink>Trans_Identity</funclink>, <funclink>Trans_Translate</funclink>, <funclink>Trans_Rotate</funclink> oder <funclink>Trans_Scale</funclink> zurückgegeben.</desc></param>
<param><type>array</type><name>second</name><desc>Zweite Matrix.</desc></param>
<param><type>array</type><name>...</name><desc>Beliebig viele weitere Matrizen.</desc><optional /></param>
</params>
</syntax>
<desc>Multipliziert zwei oder mehr 3x4-Transformationsmatrizen in der gegegebenen Reihenfolge. Somit können die Effekte mehrerer Transformationen miteinander kombiniert werden. Das Ergebnis kann als Transformation für <funclink>AttachMesh</funclink> oder für die "PictureTransformation" oder "MeshTransformation"-Eigenschaften (siehe <emlink href="definition/meshes.html#Picture">Meshes</emlink>) verwendet werden.</desc>
<examples>
<example>
<code><funclink>this</funclink>["PictureTransformation"] = <funclink>Trans_Mul</funclink>(<funclink>Trans_Translate</funclink>(7000), <funclink>Trans_Rotate</funclink>(20, 0, 1, 0));</code>
<text>Dreht die Repräsentativgrafik des aufrufenden Objekts um 20 Grad um die Y-Achse und verschiebt sie dann um 7 Einheiten in Z-Richtung der Kamera entgegen.</text>
</example>
</examples>
<related>
<funclink>Trans_Identity</funclink>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>AttachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Trans_Rotate</title>
<category>Arithmetik</category>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param><type>int</type><name>angle</name><desc>Drehwinkel. Positive Werte drehen entgegen dem Uhrzeigersinn wenn man in Richtung der Drehachse blickt, negative Werte drehen im Uhrzeigersinn.</desc></param>
<param><type>int</type><name>rx</name><desc>X-Koordinate der Drehachse.</desc></param>
<param><type>int</type><name>ry</name><desc>Y-Koordinate der Drehachse.</desc></param>
<param><type>int</type><name>rz</name><desc>Z-Koordinate der Drehachse.</desc></param>
</params>
</syntax>
<desc>Liefert eine 3x4-Rotationsmatrix welche eine Drehung um die Achse (<code>rx</code>, <code>ry</code>, <code>rz</code>) um <code>angle</code> Grad beschreibt. Sie kann als Transformation für <funclink>AttachMesh</funclink> oder für die "PictureTransformation" oder "MeshTransformation"-Eigenschaften (siehe <emlink href="definition/meshes.html#Picture">Meshes</emlink>) verwendet werden.</desc>
<examples>
<example>
<code><funclink>this</funclink>["PictureTransformation"] = <funclink>Trans_Rotate</funclink>(20, 0, 1, 0);</code>
<text>Dreht die Repräsentativgrafik des aufrufenden Objekts um 20 Grad um die Y-Achse.</text>
</example>
</examples>
<related>
<funclink>Trans_Identity</funclink>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>Trans_Mul</funclink>
<funclink>AttachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Trans_Scale</title>
<category>Arithmetik</category>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param><type>int</type><name>sx</name><desc>Vergrößerung in X-Richtung.</desc></param>
<param><type>int</type><name>sy</name><desc>Vergrößerung in Y-Richtung.</desc><optional /></param>
<param><type>int</type><name>sz</name><desc>Vergrößerung in Z-Richtung.</desc><optional /></param>
</params>
</syntax>
<desc>Liefert eine 3x4-Skalierungsmatrix. Sie kann als Transformation für <funclink>AttachMesh</funclink> oder für die "PictureTransformation" oder "MeshTransformation"-Eigenschaften (siehe <emlink href="definition/meshes.html#Picture">Meshes</emlink>) verwendet werden.</desc>
<remark>When <code>sy</code> und <code>sz</code> nicht angegeben werden oder 0 sind, dann wird eine Streckung um <code>sx</code> in alle drei Richtungen gemacht. Ein Wert von 1000 bewirkt keine Veränderung, niedrigere Werte verkleinern die Grafik, größere vergrößern sie. Negative Werte bewirken eine Spiegelung um die entsprechende Achse.</remark>
<examples>
<example>
<code><funclink>this</funclink>["PictureTransformation"] = <funclink>Trans_Scale</funclink>(2000);</code>
<text>Macht die Repräsentativgrafik des aufrufenden Objekts doppelt so groß.</text>
</example>
</examples>
<related>
<funclink>Trans_Identity</funclink>
<funclink>Trans_Translate</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Mul</funclink>
<funclink>AttachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE funcs SYSTEM "../../../clonk.dtd">
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Trans_Translate</title>
<category>Arithmetik</category>
<version>4.10.0.0 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param><type>int</type><name>dx</name><desc>Verschiebung in X-Richtung.</desc></param>
<param><type>int</type><name>dy</name><desc>Verschiebung in Y-Richtung.</desc></param>
<param><type>int</type><name>dz</name><desc>Verschiebung in Z-Richtung.</desc></param>
</params>
</syntax>
<desc>Liefert eine 3x4-Verschiebungsmatrix. Sie kann als Transformation für <funclink>AttachMesh</funclink> oder für die "PictureTransformation" oder "MeshTransformation"-Eigenschaften (siehe <emlink href="definition/meshes.html#Picture">Meshes</emlink>) verwendet werden.</desc>
<remark>Bei einer Angabe von 1000 für <code>dx</code>, <code>dy</code> oder <code>dz</code> wird die Grafik um einen Pixel nach rechts, unten bzw. vorne verschoben, bei negativen Angaben in die jeweils entgegengesetzte Richtung. Für Grafiken, die direkt im Spiel dargestellt werden (wie von der "MeshTransformation"-Eigenschaft beeinflusst), entspricht eine Einheit in X oder Y einem Pixel. Sämtliche Angaben der Parameter werden in Promille (1000 = 100%) getätigt, weil es in Clonk keine Fließkommazahlen gibt.</remark>
<examples>
<example>
<code><funclink>this</funclink>["PictureTransformation"] = <funclink>Trans_Translate</funclink>(0, 0, 7000);</code>
<text>Verschiebt die Repräsentativgrafik des Objekts 7 Einheiten näher an die Kamera. Dadurch wird es wegen der perspektivischen Projektion größer dargestellt.</text>
</example>
</examples>
<related>
<funclink>Trans_Identity</funclink>
<funclink>Trans_Rotate</funclink>
<funclink>Trans_Scale</funclink>
<funclink>Trans_Mul</funclink>
<funclink>AttachMesh</funclink>
<funclink>SetAttachTransform</funclink>
</related>
</func>
<author>Clonk-Karl</author><date>April 2010</date>
</funcs>