<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - NooNoo Physics</title>
		<link>https://www.blitzforum.de/worklogs/165/</link>
		<description>Worklog von Noobody</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Sat, 20 Jun 2009 18:47:29 +0200</pubDate>
		<lastBuildDate>Sat, 20 Jun 2009 18:47:29 +0200</lastBuildDate>

		<item>
			<title>Neuigkeiten! Neuigkeiten! Heute zum halben Preis!</title>
			<link>https://www.blitzforum.de/worklogs/165/#1537</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1537</guid>
			<author>Noobody</author>
			<description>In letzter Zeit hat sich hier einiges getan, sowohl am Projekt als auch bei mir &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Als erstes habe ich die Physikintegration erweitert, so dass sie nun Kollisionen korrekt l&amp;ouml;sen kann. Kollisionen haben bisher zwar gut funktioniert, aber sobald man Gravitation einschaltete, fingen die Objekte an, auf dem Boden herumzuzittern (das Zittern von Physikobjekten kennt man bestimmt aus dem einen oder anderen Spiel, Hellgate London war da besonders schlimm). In der Verletintegration l&amp;ouml;ste sich das von selbst, hier muss ich nachhelfen, indem ich den exakten Zeitpunkt der Kollision bestimme und von da an weiterrechne.&lt;br /&gt;Im Moment ist es aber noch nicht so exakt, wie es sein sollte - Objekte fangen nach Stillstand wieder leicht an zu Zittern und bewegen sich dadurch wieder - aber das muss ich wohl durch einen kleinen Workaround l&amp;ouml;sen.&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/Projects/RBS_5.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://www.noobody.org/Projects/RBS_Experimental.rar&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;Mit Linksklick kann man zuf&amp;auml;llige Kr&amp;auml;fte auf die Objekte einwirken lassen und die gelegentlich auftretenden Physikfehler bewundern &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Des weiteren habe ich mir diese Woche BlitzMax zugelegt. Nach 2.5 Jahren B3D dachte ich mir, es sei Zeit, auf den Zug aufzuspringen. Die Sprache gef&amp;auml;llt mir bisher sehr gut, f&amp;uuml;r praktisch alles, wo ich in B3D noch Workarounds brauchte, gibt es in BMax eine elegante L&amp;ouml;sung.&lt;br /&gt;Ich weiss nicht, ob ich die Physiksimulation portiere und parallel in beiden Sprachen weiterentwickle oder aber ganz auf die B3D - Version verzichte, das kommt ganz auf meine Motivation an.&lt;br /&gt;&lt;br /&gt;Als wohl gr&amp;ouml;sste Umw&amp;auml;lzung wurde ich diesen Monat bei &lt;b&gt;Chaos Interactive&lt;/b&gt; aufgenommen. F&amp;uuml;r mich, der ich ja zum Zeitpunkt der Anfrage noch nicht mal BMax besass, ist das nat&amp;uuml;rlich eine grosse Ehre und ich freue mich, von nun an mit den Jungs von CI zusammenarbeiten zu d&amp;uuml;rfen.</description>
			<pubDate>Sat, 20 Jun 2009 18:47:29 +0200</pubDate>
		</item>

		<item>
			<title>Ein Neubeginn</title>
			<link>https://www.blitzforum.de/worklogs/165/#1465</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1465</guid>
			<author>Noobody</author>
			<description>Nachdem ich in letzter Zeit viel mit der Physik - DLL herumgespielt, -probiert und programmiert habe, komme ich schlussendlich auf den Schluss, die Entwicklung vorerst einzustellen.&lt;br /&gt;Das liegt nicht etwa an einem Motivationsloch, sondern daran, dass mir die Verlet - Integration immer mehr missf&amp;auml;llt. Keine 100%ig stabilen Objekte garantieren zu k&amp;ouml;nnen ist das eine, zum anderen kommt es mir mehr und mehr wie Voodoo - Hokuspokus vor; man kann nicht direkt nach Gesetzen der Physik rechnen, sondern bewegt einen Punkt mal hier und mal dahin, und schaut dann, was passiert.&lt;br /&gt;&lt;br /&gt;Ich habe mich daher entschlossen, die Engine von Grund auf neu zu schreiben, und zwar aufbauend auf einer neuen Herangehensweise, die als 'Rigid Body Simulation' bekannt ist.&lt;br /&gt;Ein Objekt wird dabei als komplett starr (eng. 'rigid' - daher der Name) angesehen und die bekannten Gesetze der Physik darauf angewendet.&lt;br /&gt;Das ist zwar um einiges komplizierter, aber die ersten Ergebnisse sprechen f&amp;uuml;r sich - zumindest aus meiner Sicht den Mehraufwand komplett wert.&lt;br /&gt;&lt;br /&gt;Ich m&amp;ouml;chte hier aber nicht einfach so mit leeren H&amp;auml;nden und Zukunftsvisionen auftreten. Gestern habe ich n&amp;auml;mlich die ersten korrekt berechneten Kollisionen zwischen beliebigen konvexen Objekten hinbekommen; gl&amp;uuml;cklicherweise konnte ich Teile der alten Kollisionsroutine wiederverwerten, ansonsten w&amp;auml;re sicher eine zus&amp;auml;tzliche Woche dabei draufgegangen &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/BBP/RBS.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.noobody.org/Projects/RBS3.exe&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wie man in der Demo vielleicht sieht, sind die Objekte komplett starr. Ausserdem bleibt die Gesamtenergie komplett erhalten, w&amp;auml;hrend sich in der Verlet - Integration mit der Zeit eine leichte D&amp;auml;mpfung einstellt, wodurch die Objekte langsam zum Stillstand kommen. Ausserdem ist der Rechenaufwand (noch) sehr viel kleiner, da man relativ viele Verbindungen einsparen kann, die in der Verlet - Integration ben&amp;ouml;tigt werden, um Objekte einigermassen zu stabilisieren (die Anzahl ben&amp;ouml;tigter Verbindungen sinkt von N! auf N-1, wer es genau wissen will; N=Anzahl Vertices).&lt;br /&gt;&lt;br /&gt;Bis ich mit der neuen Herangehensweise auf dem Stand der alten Engine bin, wird es wohl noch eine Weile dauern. Beispielsweise die Kollisionsberechnung wird noch einiges an Arbeit ben&amp;ouml;tigen, da ich ein paar wichtige Aspekte bisher ausser Acht lasse (f&amp;auml;llt im Moment noch nicht auf, aber fliegt einem um die Ohren, sobald man Gravitation einschaltet). Ich arbeite aber daran - versprochen &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Mit der neuen Methode besteht vieleicht sogar die M&amp;ouml;glichkeit, die Physikberechnung um eine Dimension zu erweitern. Allerdings konzentriere ich mich vorerst mal auf 2D, um die Grundlagen zu begreifen.</description>
			<pubDate>Fri, 22 May 2009 12:12:30 +0200</pubDate>
		</item>

		<item>
			<title>Von Autos und Benotungen</title>
			<link>https://www.blitzforum.de/worklogs/165/#1446</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1446</guid>
			<author>Noobody</author>
			<description>In den letzten Tagen habe ich die neue Berechnungsart mit Fragmenten weiter optimiert und verbessert, damit es einigermassen benutzbar wird. Lustigerweise l&amp;auml;uft die Berechnung nun schneller als vorher, obwohl es eigentlich langsamer sein m&amp;uuml;sste (durch die Fragmente entsteht ein nicht unerheblicher Mehraufwand bei der Berechnung); ich hinterfrage das mal nicht. Solange es schneller l&amp;auml;uft, kann ich ja zufrieden sein &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Die einzelnen Fragmente eines Physikobjekts k&amp;ouml;nnen nun untereinander beliebig viele Vertices und Edges teilen, was man dazu ausnutzen kann, komplexere Objekte zu erstellen als bisher. In einem Auto beispielsweise teilt sich das Chassis mit den beiden R&amp;auml;dern jeweils einen Vertex. Die R&amp;auml;der sind nun nicht fix am Auto befestigt, sondern k&amp;ouml;nnen sich beliebig um den geteilten Vertex drehen; die geteilten Vertices werden zur Dehachse der R&amp;auml;der.&lt;br /&gt;Das habe ich nat&amp;uuml;rlich gleich ausgetestet und eine kleine Demo zusammengestellt:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/BBP/CarDemo.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.noobody.org/BBP/CarDemo.rar&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Die Bedienung ist relativ einfach: Mit Pfeiltaste Links/Rechts kann man den Wagen beschleunigen und mit Pfeiltaste nach oben kann man den Wagen wieder aufrichten, falls er auf dem R&amp;uuml;cken liegt.&lt;br /&gt;&lt;br /&gt;Wie man der Demo entnehmen kann, habe ich der Funktion &lt;a href=&quot;/help/NNP_DebugRender&quot; title=&quot;Befehl in der BB Hilfe nachschlagen&quot;&gt;&lt;b&gt;NNP_DebugRender&lt;/b&gt;&lt;img src=&quot;/themes/Standard/quicklink.gif&quot; /&gt;&lt;/a&gt; zwei Parameter f&amp;uuml;r Scrolling verpasst (stand schon lange auf meiner Liste). Auf Hinweis von ToeB habe ich ausserdem eingebaut, dass man Vertices einzeln befestigen kann anstatt nur das Objekt als ganzes.&lt;br /&gt;Bevor ich aber die n&amp;auml;chste Version herausbringen kann, muss ich noch die Funktion einbauen, die konkave Objekte automatisch in Fragmente zerlegt, da es von Hand ziemlich aufw&amp;auml;ndig ist.&lt;br /&gt;&lt;br /&gt;Letzten Montag habe ich ausserdem die Note f&amp;uuml;r meine Arbeit erfahren - eine 5.5 (Schweizer Note! In Deutschland eine 1.5). Kritisiert wurde vor allem der fehlende Schritt von Theorie zu Programmcode, sprich, ich h&amp;auml;tte noch beschreiben sollen, wie ich die Theorie dann schlussendlich umgesetzt habe.&lt;br /&gt;In drei Wochen steht dann die Pr&amp;auml;sentation der Arbeit an, die mit 50% zur Maturarbeitsnote dazuz&amp;auml;hlt. Was genau ich w&amp;auml;hrend des 10-min&amp;uuml;tigen Vortrags machen will, weiss ich noch nicht so genau, aber so langsam sollte ich mir mal Gedanken dar&amp;uuml;ber machen.</description>
			<pubDate>Sun, 17 May 2009 16:13:18 +0200</pubDate>
		</item>

		<item>
			<title>Konkave Objekte</title>
			<link>https://www.blitzforum.de/worklogs/165/#1382</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1382</guid>
			<author>Noobody</author>
			<description>Ich habe die letzten Tage verschiedene Herangehensweisen auf dem Papier durchgespielt, um die optimale Methode f&amp;uuml;r konkave Objekte zu finden.&lt;br /&gt;Schlussendlich habe ich mich dazu entschieden, die DLL nochmal kr&amp;auml;ftig umzuschreiben. Neu besteht ein Entity jetzt aus einzelnen &lt;i&gt;Fragmenten&lt;/i&gt;. Ein Fragment kann beliebig viele Vertices und Edges des Elternobjekts enthalten und wird bei der Kollision einzeln betrachtet.&lt;br /&gt;&lt;br /&gt;Das kann man dazu verwenden, ein konkaves Objekt in einzelne konvexe Fragmente zu zerteilen. Die Kollisionsberechnung verlangt n&amp;auml;mlich immer noch konvexe Polygone; da sie aber die Fragmente einzeln betrachtet, ist ein konkaves Objekt trotzdem m&amp;ouml;glich, solange die Fragmente alle konvex sind.&lt;br /&gt;&lt;br /&gt;Die Objekte muss man im Moment noch von Hand in Fragmente zerteilen, wenn sie nicht konvex sind. Das ist eine Heidenarbeit, eine Funktion, die das automatisch erledigt, ist aber schon in Arbeit &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Ich habe mal eine kleine Demo zusammengestellt, um das zu testen. Sie l&amp;auml;uft leider unvorstellbar langsam im Vergleich, da ich die Objekte halbautomatisiert in Dreiecke zerlegen lasse und jedes Dreieck als ein Fragment hinzuf&amp;uuml;ge.&lt;br /&gt;Dadurch enth&amp;auml;lt jedes Objekt doppelt so viele Fragmente, wie in einer optimierten Konstellation m&amp;ouml;glich w&amp;auml;ren - ausserdem ist die DLL auf das neue System mit Fragmenten noch gar nicht optimiert.&lt;br /&gt;Mittlerweile bin ich einfach froh, dass es &amp;uuml;berhaupt l&amp;auml;uft, und g&amp;ouml;nne mir jetzt erst Mal eine Verschnaufpause &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/Maturarbeit/ConcaveScreen.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.noobody.org/Maturarbeit/KonkaveObjekte.rar&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;</description>
			<pubDate>Sat, 25 Apr 2009 23:49:44 +0200</pubDate>
		</item>

		<item>
			<title>Hilfe, Lizenz und konkave Objekte</title>
			<link>https://www.blitzforum.de/worklogs/165/#1366</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1366</guid>
			<author>Noobody</author>
			<description>Mit der Unterst&amp;uuml;tzung der Portalsadministration ist die Dokumentation der Befehle nun auch hier in der Hilfe vom BBP zu finden: &lt;a href=&quot;https://www.blitzforum.de/help/?cat=12&quot; target=&quot;_blank&quot;&gt;Kategorie NooNooPhysics&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ausserdem musste ich einsehen (dank dem Hinweis von Smily &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; ), dass es wohl f&amp;uuml;r Programmierer einfacher w&amp;auml;re, wenn ich den Code unter eine Lizenz stelle. Mit Hilfe von akaz habe ich mich dann f&amp;uuml;r die &lt;a href=&quot;http://opensource.org/licenses/zlib-license.php&quot; target=&quot;_blank&quot;&gt;zlib&lt;/a&gt; Lizenz entschieden.&lt;br /&gt;Das bedeutet also Zitat:&lt;div class=&quot;quotebox&quot;&gt;Sie beinhaltet, dass der Autor der Software keine Haftung f&amp;uuml;r irgendwelche Sch&amp;auml;den &amp;uuml;bernimmt, die aus der Benutzung selbiger resultieren. Die Verwendung der Software ist frei zu allen, das hei&amp;szlig;t auch zu kommerziellen Zwecken, unter folgenden drei Bedingungen:&lt;br /&gt;&lt;br /&gt;1. Man darf nicht behaupten, dass man der Urheber der Software ist. Bei der Verwendung in einem Produkt ist au&amp;szlig;erdem eine Erw&amp;auml;hnung in den Unterlagen erw&amp;uuml;nscht, jedoch nicht erforderlich.&lt;br /&gt;&lt;br /&gt;2. Ein ge&amp;auml;nderter Quellcode muss auch als solcher gekennzeichnet werden und darf nicht als urspr&amp;uuml;ngliche Quelle genannt werden.&lt;br /&gt;&lt;br /&gt;3. Der Lizenzhinweis darf nicht entfernt werden &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Zum einen erlaubt es jegliche Verwendung des Codes, inklusive &amp;Auml;nderung, Verteilung und Verwendung in kommerziellen Projekten. Trotzdem bleibt aber der Schutz davor, dass es jemand pl&amp;ouml;tzlich als sein eigenes Werk ausgibt; der Verweis zum Original und auf mich bleibt erhalten.&lt;br /&gt;&lt;br /&gt;Die (L)GPL wollte mir nicht gefallen, da ver&amp;auml;nderte Versionen der Engine weiterhin Open Source sein m&amp;uuml;ssten - das k&amp;ouml;nnte Programmierer davon abschrecken, eigene Dinge einzubauen, da sie nicht unbedingt ihren Code preisgeben wollen.&lt;br /&gt;&lt;br /&gt;Leider bin ich in der Zwischenzeit zu nicht viel anderem gekommen, ich werkle aber insgeheim an verschiedenen Methoden, nicht-konvexe (konkave) Objekte automatisch zu erkennen und in mehrere konvexe Objekte zu splitten. Die Grundlagen daf&amp;uuml;r habe ich bereits, aber ich muss noch untersuchen, wie die Kollisionsberechnung darauf reagiert, wenn zwei Objekte einen Vertex oder eine Edge teilen.&lt;br /&gt;&lt;br /&gt;Die Variable 'CollisionEdge' w&amp;uuml;rde dann von dieser Funktion automatisch gesetzt werden, um dem Programmierer die Handarbeit zu ersparen, aber trotzdem die Performance zu verbessern.&lt;br /&gt;&lt;br /&gt;Auf meiner ToDo - Liste steht im Moment nicht viel mehr - neben der Unterst&amp;uuml;tzung von konkaven Objekten nur noch kompliziertere Themen wie Luftwiderstand, Wasser und Gase.&lt;br /&gt;Falls ihr noch Featurew&amp;uuml;nsche habt, bin ich ganz Ohr &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;&lt;br /&gt;&lt;br /&gt;PS: Ja, die ersten beiden Punkte stehen schon im Projektethread. Der Vollst&amp;auml;ndigkeit halber sei es hier aber aufgef&amp;uuml;hrt.</description>
			<pubDate>Thu, 23 Apr 2009 17:51:01 +0200</pubDate>
		</item>

		<item>
			<title>Funpark im Physikland</title>
			<link>https://www.blitzforum.de/worklogs/165/#1355</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1355</guid>
			<author>Noobody</author>
			<description>Ich habe heute noch ein wenig mit dem dritten Beispiel aus dem Downloadpaket rumgespielt und ein kleines Funpark - Level draus gebastelt.&lt;br /&gt;&lt;br /&gt;So Zeug macht mir immer einen Heidenspass, weswegen ich auch nicht zu viel anderem gekommen bin &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt; &lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/Maturarbeit/Halfpipe.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wer will, kann sich das noch herunterladen und auch ein wenig damit herumspielen: &lt;a href=&quot;http://www.noobody.org/Maturarbeit/HalfPipe.rar&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Es ist ein gutes Level, um die Reibung zu testen - ohne Reibung w&amp;uuml;rde man sich nur auf der Stelle drehen.&lt;br /&gt;Vielleicht mache ich irgendwann noch ein kleines Spiel draus, aber im Moment gibt es leider noch viel zu viel zu tun.</description>
			<pubDate>Mon, 20 Apr 2009 22:41:37 +0200</pubDate>
		</item>

		<item>
			<title>Erstes Release</title>
			<link>https://www.blitzforum.de/worklogs/165/#1350</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1350</guid>
			<author>Noobody</author>
			<description>Ich will hier gar nicht lange um den heissen Brei herumreden, sondern gleich auf den Projektthread verweisen: &lt;a href=&quot;https://www.blitzforum.de/forum/viewtopic.php?t=31513&quot; target=&quot;_blank&quot;&gt;*klick*&lt;/a&gt;</description>
			<pubDate>Mon, 20 Apr 2009 17:08:57 +0200</pubDate>
		</item>

		<item>
			<title>Finger wund und Arbeit fertig</title>
			<link>https://www.blitzforum.de/worklogs/165/#1341</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1341</guid>
			<author>Noobody</author>
			<description>Nach einem kleinen Endspurt &amp;uuml;ber die letzten Tage ist meine Maturarbeit endlich fertig &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt; &lt;br /&gt;Morgen werd ich sie im Copy Shop binden lassen, um am Montag endlich damit abschliessen zu k&amp;ouml;nnen.&lt;br /&gt;&lt;br /&gt;Ich muss noch eine Dokumentation zur DLL schreiben und nat&amp;uuml;rlich noch ein paar Beispiele, damit ich die Physikengine ebenfalls am Montag f&amp;uuml;r den &amp;ouml;ffentlichen Gebrauch raushauen kann.&lt;br /&gt;&lt;br /&gt;Wer die Maturarbeit lesen will, kann dies gerne tun: &lt;a href=&quot;http://www.noobody.org/Maturarbeit/Maturarbeit.pdf&quot; target=&quot;_blank&quot;&gt;Link (PDF)&lt;/a&gt;.&lt;br /&gt;Kritik und Anregungen darf man gerne in den Kommentaren posten, obwohl es dann eh zu sp&amp;auml;t ist &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;</description>
			<pubDate>Thu, 16 Apr 2009 21:59:56 +0200</pubDate>
		</item>

		<item>
			<title>Erste Demo</title>
			<link>https://www.blitzforum.de/worklogs/165/#1330</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1330</guid>
			<author>Noobody</author>
			<description>Ich habe nun intensiv an der Physiksandbox weitergeschraubt und sie in einen halbwegs akzeptablen Zustand gebracht.&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://www.noobody.org/BBP/SandboxScreen.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Die Bedienung ist anfangs nicht intuitiv, daher sollte man folgendes beachten:&lt;br /&gt;&lt;br /&gt;Die Sandbox besteht aus vier Modi: Simulationsmodus, Vertexmodus, Edgemodus und Objektmodus (von links nach rechts).&lt;br /&gt;&lt;br /&gt;Die Modi lassen sich durch Mausklick auf den entsprechenden Button ausw&amp;auml;hlen.&lt;br /&gt;&lt;br /&gt;Im Objektmodus kann man neue Objekte erstellen und diese editieren. Wenn man 'W&amp;uuml;rfel erstellen' oder 'Kreis erstellen' angew&amp;auml;hlt hat, kann man ins Fenster klicken und mit gedr&amp;uuml;ckter Maustaste das Objekt auf die gew&amp;uuml;nschte Gr&amp;ouml;sse ziehen. Der Schieberegler bestimmt dabei, mit welchem Reibungsfaktor das Objekt erstellt wird. Hat man 'Objekte editieren' ausgew&amp;auml;hlt, kann man mit linker Maustaste Objekte ausw&amp;auml;hlen und mit gedr&amp;uuml;ckter linke Maustaste Objekte verschieben. Mit gedr&amp;uuml;ckter rechter Maustaste kann man Objekte drehen. Mit Shift+Gedr&amp;uuml;ckte linke Maustaste skaliert man Objekte, mit Ctrl+Gedr&amp;uuml;ckte linke Maustaste kopiert man ein Objekt.&lt;br /&gt;Ein ausgew&amp;auml;hltes Objekt l&amp;auml;sst sich jederzeit mit Delete l&amp;ouml;schen. Alle Objekte sind in grau gezeichnet, das momentan ausgew&amp;auml;hlte Objekt ist rot hervorgehoben.&lt;br /&gt;Wenn man ein Objekt ausw&amp;auml;hlt, l&amp;auml;sst sich der Reibungsfaktor nachtr&amp;auml;glich noch mit dem Schieberegler &amp;auml;ndern.&lt;br /&gt;&lt;br /&gt;Im Edgemodus kann man mit Linksklick eine Feder des momentan ausgew&amp;auml;hlten Objekts anw&amp;auml;hlen. Mit Delete kann man diese l&amp;ouml;schen.&lt;br /&gt;Mit Rechtsklick w&amp;auml;hlt man einen Vertex in der N&amp;auml;he aus und mit nochmaligem Rechtsklick in der N&amp;auml;he eines anderen Vertex' erstellt man eine Feder zwischen den beiden.&lt;br /&gt;&lt;br /&gt;Im Vertexmodus kann man mit Linksklick Vertices ausw&amp;auml;hlen und mit gedr&amp;uuml;ckter linker Maustaste verschieben. Mit Rechtsklick erstellt man einen neuen Vertex. Mit Delete l&amp;ouml;scht man den gerade ausgew&amp;auml;hlten Vertex.&lt;br /&gt;&lt;br /&gt;Im Simulationsmodus l&amp;auml;sst man dann die Simulation laufen. Wenn man in das Vektorwidget klickt, kann man die Richtung der Gravitation &amp;auml;ndern, mit dem Schieberegler die Genauigkeit der Simulation.&lt;br /&gt;Mit der linken Maustaste lassen sich ausserdem noch Vertices der Objekte ausw&amp;auml;hlen und mit gedr&amp;uuml;ckter Maustaste kann man den ausgew&amp;auml;hlten Vertex hochheben.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.noobody.org/BBP/Sandbox.rar&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bei Bugs und Anregungen bitte einen Kommentar schreiben - ich habe das Programm noch nicht gr&amp;uuml;ndlich austesten k&amp;ouml;nnen, daher ist mit eventuellen Fehlern zu rechnen.&lt;br /&gt;Ich w&amp;uuml;nsche dann viel Spass damit &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt; </description>
			<pubDate>Sat, 11 Apr 2009 00:30:43 +0200</pubDate>
		</item>

		<item>
			<title>C ist Krieg</title>
			<link>https://www.blitzforum.de/worklogs/165/#1324</link>
			<guid>https://www.blitzforum.de/worklogs/165/#1324</guid>
			<author>Noobody</author>
			<description>Gestern habe ich doch tats&amp;auml;chlich 4 Stunden lang mit Debugging verbracht, um herauszufinden, warum die Reibung nach der Portierung in die DLL nicht funktioniert hat. Irgendwann ist mir dann aufgefallen, dass ich in einer Zeile aus Versehen X und Y vertauscht habe - das hat sich nat&amp;uuml;rlich fatal auf die folgenden 100 Zeilen Code ausgewirkt, weshalb die Eingrenzung des Fehlers auch entsprechend lange ging. Aber jetzt l&amp;auml;uft es perfekt und zieht praktisch keine Berechnungszeit, was mich erstaunt hat - ich verwende einige Funktionen aus der Trigonometrie, aber mittlerweile scheinen die auch nicht mehr so langsam zu sein.&lt;br /&gt;&lt;br /&gt;Weiterhin habe ich eine neue Kollisionserkennung entwickelt; ich verwende zwar immer noch das Separating Axis Theorem, habe aber mithilfe der Hesseschen Normalform (die ich mittlerweile in fast jedem Programm verwende - ist wohl ein M&amp;auml;dchen f&amp;uuml;r alles &lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt; ) komplett auf die Matrizenrechnungen verzichten k&amp;ouml;nnen. Lustigerweise hat sich das gar nicht so gross auf die Geschwindigkeit ausgewirkt, wie zuerst angenommen. Die Kollisionsberechnung ist zwar 5-10% schneller (je nach Objektkonstellation), aber ich h&amp;auml;tte da viel mehr erwartet. Die Matrizenrechnungen waren wohl gar nicht so langsam, wie ich immer gedacht habe. Das Umsetzen der neuen Methode in C hat mir dann wieder ein paar Falten unter den Augen beschert - ich hatte n&amp;auml;mlich in einem Moment geistiger Umnachtung eine if - Abfrage so definiert: &lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;if&amp;#40; Sign = -1 &amp;#41; &amp;#123; .... &amp;#125;&lt;/div&gt;&lt;br /&gt;Wer nicht mit C vertraut ist: Diese Bedingung ist immer Wahr, da ich eine Zuweisung mache anstatt einer Abfrage. Richtig w&amp;auml;re &lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;if&amp;#40; Sign == -1 &amp;#41; &amp;#123; ... &amp;#125; &lt;/div&gt;&lt;br /&gt;Nach zwei Stunden ist mir das dann aufgefallen. Soviel Zeit wie in den letzten zwei Tagen ist mir noch nie f&amp;uuml;r Debugging draufgegangen, aber jetzt bin ich einfach froh dar&amp;uuml;ber, dass es funktioniert, wie es sollte.&lt;br /&gt;&lt;br /&gt;Um noch mehr Geschwindigkeit rauszuholen, habe ich den Federn einen neuen Modus verpasst, ein Feld namens 'CollisionEdge'. Es bestimmt, ob die Feder zur Aussenh&amp;uuml;lle geh&amp;ouml;rt oder nicht. Federn k&amp;ouml;nnen n&amp;auml;mlich auch im Innern des Objekts sein, um als St&amp;uuml;tzverbindungen zu dienen. Dann sind sie aber f&amp;uuml;r die Kollisionsberechnung wertlos, weswegen der Programmierer bei der Erstellung der Feder bestimmen kann, ob sie zur Aussenh&amp;uuml;lle geh&amp;ouml;rt oder nicht.&lt;br /&gt;Eine automatische Erkennung habe ich noch nicht eingebaut, aber ich sch&amp;auml;tze, das kommt noch irgendwann. Ausserdem arbeite ich nebenbei noch an einem Algorithmus, der aus einer Punktmenge die stabilste Form berechnet (also die Federn so setzt, dass das Objekt m&amp;ouml;glichst stabil ist). Daf&amp;uuml;r verwende ich die Delaunay - Triangulation, wem das ein Begriff ist. Dieser Algorithmus garantiert ausserdem, dass das Objekt konvex ist - das ist n&amp;auml;mlich weiterhin eine Einschr&amp;auml;nkung der Kollisionserkennung.&lt;br /&gt;&lt;br /&gt;Des weiteren habe ich einige kleine Umstellungen gemacht, um alles ein wenig zu beschleunigen (Funktionen als Inline definiert etc.).&lt;br /&gt;Alles in allem habe ich die Physikberechnungen um ~25% beschleunigen k&amp;ouml;nnen, obwohl die Reibung neu dazugekommen ist. Vor allem der neue Modus der Federn hat relativ viel rausgeholt - ein stabiler W&amp;uuml;rfel besteht ja aus vier Federn aussen und zwei Diagonalen Federn, die ein Zusammenklappen verhindern. Durch den neuen Modus kann der Algorithmus einen Drittel der Federn verwerfen, um sich dann nur auf die relevanten zu konzentrieren - wenn man also die M&amp;ouml;glichkeit hat, sollte man also von diesem Feature rege Gebrauch machen.&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r Spiele habe ich noch mehrere wichtige Objektmodi eingebaut namens Locked, CollisionEnabled, RotationEnabled und CollisionGroup. Objekte, die mit Locked gekennzeichnet sind, bewegen sich nicht - z.B. ein Level sollte man so definieren, sonst kann es der Spieler nach unten treten, was ja nicht sein sollte (ausser, das Spiel heisst 'Walker, Texas Ranger').&lt;br /&gt;Per CollisionEnabled kann man die Kollision f&amp;uuml;r einzelne Objekte ein und ausschalten, um so Leistung zu sparen. Mit RotationEnabled legt man fest, ob sich das Objekt drehen kann. Der Hauptcharakter eines Spiels sollte sich ja nach M&amp;ouml;glichkeit nicht flach auf den Boden legen, wenn er von einer Kiste am Kopf getroffen wird, daher kann man seine Rotation sperren.&lt;br /&gt;CollisionGroup schliesslich bestimmt, welche Objekte miteinander kollidieren und welche nicht. Die Variable enth&amp;auml;lt im Grunde genommen einfach eine Zahl - Objekte mit verschiedenen Zahlen kollidieren, Objekt mit der gleichen Zahl nicht. Der Wert in Collisiongroup wird von CreateEntity() automatisch verteilt, so dass Objekte standardm&amp;auml;ssig kollidieren. Wenn man das anders m&amp;ouml;chte, kann man den Wert nachher nat&amp;uuml;rlich noch anpassen.&lt;br /&gt;&lt;br /&gt;In der Include habe ich noch einige formelle Sachen berichtigt - ich verwendete n&amp;auml;mlich einen Mischmasch von Particle/Constraint/Vertex/Edge, aber jetzt heissen Punkte definitiv &lt;i&gt;Vertex&lt;/i&gt; und Verbindungen &lt;i&gt;Edge&lt;/i&gt; (anfangs nannte ich die Punkte Particle und die Verbindungen Constraint, aber mittlerweile finde ich die k&amp;uuml;rzeren Begriffe Vertex und Edge sch&amp;ouml;ner).&lt;br /&gt;Ausserdem sind jetzt alle Funktionen mit dem Pr&amp;auml;fix NNP_ (f&amp;uuml;r NooNooPhysics) versehen; neu sind ausserdem die Funktionen MoveEntity, TurnEntity, PositionEntity und FitEntity.&lt;br /&gt;&lt;br /&gt;Die Physiksandbox, die ich noch f&amp;uuml;r die Maturarbeit schreiben muss, kommt gut voran. Man kann bereits Primitiven erstellen (W&amp;uuml;rfel/Kreise/Dreiecke), diese bearbeiten (neue Punkte und Verbindungen erstellen, bestehende Punkte/Verbindungen l&amp;ouml;schen, ganze Objekte l&amp;ouml;schen, drehen, bewegen) und die Simulation anschliessend laufen lassen. W&amp;auml;hrend die Simulation l&amp;auml;uft, kann man die Objekte herumwerfen, wenn man Spass daran hat.&lt;br /&gt;Was dort noch fehlt, sind Men&amp;uuml;s, um Dinge wie Federkraft und Reibungsfaktor f&amp;uuml;r jedes Objekt einstellen zu k&amp;ouml;nnen und noch Einstellungsm&amp;ouml;glichkeiten f&amp;uuml;r die Gravitation und die Genauigkeit der Berechnungen.&lt;br /&gt;Geplant sind nochTools zum kopieren und skalieren von Objekten, aber das sollte kein Problem sein.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das war jetzt wieder ein laaanger Eintrag ohne Bilder und ohne Download - aber versprochen, im n&amp;auml;chsten Eintrag gibt es wieder was f&amp;uuml;r die Augen (und vielleicht schon eine neue Demo).</description>
			<pubDate>Wed, 08 Apr 2009 13:38:45 +0200</pubDate>
		</item>


	</channel>
</rss>
