Würfel mit nur 12 Vertices texturieren

Hat mich grade etwas nachdenken gekostet:

Wie muss man die Texturkoordinaten eines Würfels setzen, damit auf allen Seiten die gleiche Textur zu sehen ist?

Mit nur acht Vertices geht es nicht (für jede Ecke einer), aber mit 12 geht es:

Man verzeihe meine Paint-Künste… Die hinteren Vertices müssen doppelt vorhanden sein, die obere und untere Seite wird dann mit diesen Vertices generiert. Die Farben geben die Texturkoordinaten an, die Zahlen an den Ecken sind die Nummern der Vertices. Weil ich ja so nett bin, gibt es die passenden Indices jetzt auch noch dazu:

Weiterlesen

Tileset Packer: Details zum Code

Wie versprochen gibt es jetzt ein paar Details zum Code des Tileset Packers. Das Programm hat (meiner Meinung nach) ein paar interessante Stellen, die dem einen oder anderen .Net-Coder bestimmt helfen können.

Im Grunde hat der Packer drei Probleme zu lösen:

  1. Das Tileset muss verschnitten werden
  2. Doppelte Tiles müssen aussortiert werden
  3. Das Tileset muss effektiv wieder zusammen gesetzt werden

Dazu sollte das Programm natürlich eine gewisse Geschwindigkeit an den Tag legen. Das verschneiden kann man relativ einfach mit Bitmap.Clone erledigen, doch das ist sehr langsam, und dazu nimmt die Geschwindigkeit auch noch mit zunehmender Größe der Bitmap ab. (Große Bitmap = langsamer Code). Es musste also eine Alternative her. Durch einen Tipp in einem Forum bin ich dann auf Bitmap.LockBits gestoßen, eine Methode die direkt (unsafe) auf die Bitmap zugreift und dadurch sehr schnell ist. Von dieser Methode bekommt man ein BitmapData Objekt, mit dem man über einen Pointer auf die Daten im Arbeitsspeicher zugreifen kann.

Diese Daten verwendet dann die Methode GetHash, die aus den Bitmapdaten einen Hash generiert, mit dem doppelte Tiles aussortiert werden können.

Weiterlesen

Der tKoD Map Editor

Jetzt sind ja Ferien, und da hat man wenigstens mal Zeit an seinem Hobbyprojekt weiterzuarbeiten 😉 Ich habe die Zeit dazu genutzt dem Editor zu meinem Spiel mal ein paar neue Features zu verpassen:

Es gibt einen Scripteditor der auf ScintillaNet basiert, und den Inhalt auch an einen externen Editor senden kann. Dazu gibt es eine ComboBox für die Hintergrundmusik und ein DataGridView, das an ein Dictionary gebunden ist, wodurch man eigene Schlüssel-Wert-Paare festlegen kann.

Das ganze kann auch in eine Datei geschrieben werden und wird auch korrekt wieder ausgelesen.

Weiterlesen

E-Münzbrett.NET

Nachdem Nico ein virtuelles Münzbrett für Mac OS geschrieben hat, habe ich leichtsinnigerweise behauptet, ich würde eine .NET Variante mit MonoDevelop unter Ubuntu machen. Was soll ich sagen schreiben? Ich bin froh, das ich mein Visual Studio habe 😉

MonoDevelop ist ansich ein tolle Software, die sogar VisualStudio 2008 kompatible Solution-Dateien schreibt. Leider wird unter Linux normalerweise das GTK# Toolkit verwendet, was sowas wie WinForms ist. Das funktioniert aber nur, wenn unter Windows die passende DLL vorhanden ist. Ich hatte mir aber vorgenommen, ein Programm zu schreiben, das unter Linux und Windows läuft, und dass ohne neu kompilieren oder zusätzliche Binaries.

Also musste ich WinForms verwenden, was in Mono auch relativ implementiert ist. Nur leider fehlt MonoDevelop der Designer dafür, sodass ich alles per Hand schreiben muss. Mit einem Designer würde man z.B. die Textboxen einfach ausrichten, ohne muss man das mit einem TableLayoutPanel machen. Und bis man das so konfiguriert hat, wie man sich das vorstellt wünscht man sich den Designer mehr als einmal zurück, glaubt mir. (Ich habe überings nicht bis jetzt daran gearbeitet, ich habe nur vergessen, darüber zu bloggen. Aber etwas mehr als die 20min hat es schon gedauert…)

Weiterlesen

SimpleScreenshot 0.9.3.2

Leider war auch die letzte Version von SimpleScreenshot nicht Bugfrei, und der verbliebene Bug war auch noch sehr gemein: Wenn SimpleScreenshot gestartet wurde, wurde manchmal das Fenster nicht ausgeblendet. Der Fehler beruhte auf einem Wettlauf: Wenn das Form geladen wird, wird zuerst die Sichtbarkeit von Windows auf true gesetzt (das Fenster ist also sichbar) und gleichzeitig dem Fenster mitgeteilt, das es geladen wurde. Wenn es so benachrichtigt wurde, wurde es wieder ausgeblendet. Wenn man Pech hatte, hat das Auslebenden das Sichtbarmachen überholt, und das Fenster blieb sichtbar… Das Problem ist jetzt aber behoben, zusammen mit einem Fehler, der manchmal den Sound nicht abgespielt hat. (Hintergrund: Wenn in einer aufrufenden Verknüpfung als Arbeitsverzeichnis nichts eingetragen wurde, konnte das Programm die Sounddatei nicht finden…). Zudem wurde eine fehlende Übersetzung hinzugefügt: Auch Nicht-Deutsche kommen jetzt in den Genuss einer Englische Fehlermeldung, wenn SimpleScreenshot mehr als ein Mal gestartet wird (was nicht geht).

Wie auch schon bei Version 0.9.3.1 habe ich auf der Downloadseite keinen neuen Eintrag erstellt, sondern einfach die Zipdatei ausgetauscht. Wer SimpleScreenshot schon hat, muss einfach nur auf das AutoUpdate warten, das bei nächsten Start aufgerufen wird.

Weiterlesen

.NET Tipps Teil 3

Ich hab ja schon ewig keine Tipps mehr zu .NET gegeben, da wird es ja mal wieder Zeit für eine neue „Folge“ 😉

Diesmal ist es nicht direkt ein Tipp, sondern mehr ein Hinweis:

Bei Bitmap.Clone(Rectangle, PixelFormat) ist eine OutOfMemoryException nicht, was man denkt!

Diese Tatsache wird zwar auch in der Dokumentation erwähnt, aber es hat mich jetzt schon zweimal fast zur Verzweiflung getrieben. Bitmap.Clone() verursacht eine OutOfMemoryException, wenn das Rectangle außerhalb der Bitmap liegt. Dann ist das Rectangle zwar auch „außerhalb des Speichers“, aber trotzdem ist das sehr unglücklich gewählt. Zudem zeigt das VisualStudio dann auch noch „Nicht genügend Abeitsspeicher“ an. Das ist natürlich schlichtweg falsch!

Also nicht verzweifeln, sondern das Rectangle noch mal überprüfen 😀

Weiterlesen

Pläne für SimpleScreenshot 1.0

In den letzten Tagen habe ich mich ausgiebig mit SimpleScreenshot 1.0 beschäftigt. Ich habe mal GIMP angeworfen und in Screenshots einige von meinen Ideen eingebaut. Die Ideen dazu habe ich auch aus den Windows Design Richtlinien, an die sich das ganze auch ungefähr halten wird. Also zeige ich euch jetzt mal alle meine Ideen:

So geht es los, wenn man SimpleScreenshot startet. Also so wie bis jetzt. Höchstens der Text wird noch angepasst.

Weiterlesen

SimpleScreenshot 0.9.3

Wir machen es mal kurz und schmerzlos, ist ja eh nur eine Version, die (hoffentlich) alle Fehler behebt:

Changelog:

  • Updatesuche berücksichtigt jetzt keine Beta-Versionen mehr.
  • Kleine Änderungen an dem Fehlerabfangcode, er meldet jetzt Fehler immer in Englisch, um auch Fehler mit den Sprachdatei melden zu können.
  • Wenn ein Neustart benötigt wird, wird dieser jetzt automatisch durchgeführt.
  • Neuere Version vom Tastenauswahl Fenster.
  • Übersetzung minimal angepasst
  • Beenden und Verstecken Button entfernt. Das Fenster wird durch minimieren Schließen versteckt, das Beenden ist über das Kontextmenü des Trayicons erreichbar.
  • Fehler behoben, den auftrat, wenn man im Kontextmenü auf „Einstellungen“ klicke, während das Einstellungsfenster geöffnet war. Mal wieder werden jetzt alle Einstellungen im Programmverzeichnis gespeichert.

Download:

Weiterlesen

SimpleScreenshot 0.9.2

Und schon gibt es eine neue Version von SimpleScreenshot!

Diese Version scheint aber einiges an Fehler zu beinhalten, also darum rate ich zum Download einer neueren Version.

Hier der Changelog:

  • Update suche jetzt bei jedem Start (statt nur 1x täglich)
  • Sinnvollere Standardwerte in den Einstellungen vergeben
  • Rechtschreibfehler korrigiert 😉
  • Das Passwort für den Hoster wird jetzt verschlüsselt gespeichert (nur für kommende Versionen, noch ist diese Funktion nicht benutzbar)
  • Wenn das Programm nicht über beim Windowsstart mitgestartet wurde, erscheint jetzt ein Ballontip mit dem Hinweis, das SimpleScreenshot im Tray läuft.
  • Kleinere Umstrukturierung des Codes.
  • %an% funktioniert jetzt.
  • Eine fehlende Übersetzung hinzugefügt.
  • Screenshots können jetzt mit einem Druck auf die Entf-Taste gelöscht werden.
  • Der Kamerasound wird jetzt auch abgespielt, wenn SimpleScreenshot über die Autostart Verknüpfung gestartet wird.
  • Über die Autostart Verknüpfung wird SimpleScreenshot minimiert gestartet. Dadurch wird das Aufblitzen eines Fenster verhindert.
  • Neues Tastenauswahl Fenster (Vielen Dank an Nico für diese Komponente)

Also wieder einiges an Änderungen. Auf zwei Sachen muss ich noch näher eingehen:

Weiterlesen

SimpleScreenshot 0.9.1

Und schon gibt es wieder ein neue Version von SimpleScreenshot! Das ist jetzt Version 0.9.1. Ich habe fast alle Fehler beseitigt.

Genauer gesagt:

  • Schließen Button in der Platzhalterliste funktioniert
  • Bei der Auswahl eines Speicherorts, der nicht nur Bilddateien enthält (z.B. Desktop) tritt kein Fehler mehr auf.
  • Bilder können aus dem Fenster gezogen werden (Drag&Drop)
  • Einstellungen werden (mal wieder) nur im Anwendungsverzeichnis gespeichert.
  • Der Image Editor (Auswahlrahmen) kann jetzt deaktiviert werden.
  • Speichern als JPEG funktioniert jetzt
  • Speichern in Word funktioniert einwandfrei.
  • Die Meldung, das ein Neustart von SimpleScreenshot benötigt wird, wird wird angezeigt, wenn er auch wirklich nötig ist.
  • Meldung bei Absturz sollte gehen.

Einen Fehler konnte ich nicht beheben: Die Pause Taste ist theoretisch als Auslöser benutzbar, aber nicht im Zusammenhang mit der STRG Taste, weil die Kombination (ein Relikt wie einiges an Windows) Batchprogramme unterbricht. Darum wird diese Kombination leider nicht an SimpleScreenshot gemeldet, und ich kann nicht darauf reagieren…. So lange man die Taste aber nicht zusammen mit der STRG Taste benutzt, geht aber alles wunderbar.

Weiterlesen