[OpenGL] Vertex Buffer Object & Vertex Array Object – Was ist das?

Was sind eig. OpenGL Vertex Buffer Objects & Vertex Array Objects – kurz: VBOs und VAOs?

Gerade absolute OpenGL Neulinge haben es recht schwer, sich in die Materie von OpenGL einzuarbeiten, da immer wieder neue Begriffe auftauchen, die Anfänger verwirren lässt. Aus diesem Grund habe ich heute einmal einen kleinen Artikel verfasst, wo diese beiden Begriffe kurz erklärt werden.

 

Vorerst ein paar kurze Informationen vorab:

Die Grafikkarte kennt nur 3D Objekte, welche dann für unseren Bildschirm in 2D umgerechnet werden. Außerdem kennt die Grafikkarte nur 3 Ecke & 4 Ecke – wenn ihr also einen Baum darstellen wollt, oder sogar eine Kugel, bestehen diese Objekte aus lauter kleinen Triangles (Dreiecken) & Quads (Vierecken).

 

Hier mal eine untexturierte Kugel (erstellt mit Blender):

3D Kugel

Continue reading

[Java] Neue 2D (RPG) Game Engine – Version 1.0.1 (Alpha) released!

Derzeit arbeite ich u.a. an einer neuen Java 2D Game Engine, da die alte Java Game Engine Slick2D leider schon lange nicht mehr weiterentwickelt wird.

Auf der Java Seite gibt es aktuell leider kaum wirkliche Alternativen im 2D Bereich (mir fallen spontan nur libGDX und jMonkeyEngine ein).

libGDX konnte mich dabei aktuell noch nicht wirklich überzeugen (vorallem was die Performance angeht – hier habe ich einige Blicke “unter die Haube”, also in den Code geworfen…) und sowohl libGDX als auch jMonkeyEngine 3D Game Engines sind, die zwar einen 2D Mode besitzen, aber eher für 3D und weniger für 2D ausgelegt und somit auch eher dafür optimiert wurden. Auf dem Markt habe ich daher schon lange nach einer guten und kostenlosen Java 2D Game Engine gesucht, aber bin bisher nicht fündig geworden.

Nun habe ich die Sache selbst in die Hand genommen und arbeite aktuell an einer neuen 2D Game Engine, in der Programmiersprache Java 8 geschrieben, die zwar vorrangig für 2D RPG Spiele ausgelegt sein soll, aber auch andere Spiele unterstützen wird. Diese soll quasi eine Alternative zu libGDX & jMonkeyEngine schaffen und für 2D & Computer Plattformen optimiert sein.

JuKuSoft Java 2D Game Engine

Continue reading

[Java] Shutdown Hook

Shutdown Button

Heute soll es einmal um Java Shutdown Hooks gehen, mit denen wir bestimmten Code beim Beenden der JVM ausführen können (z.B. Daten sichern usw.)

Der User kann eine Java Applikation auf mehrere Wege beenden oder abbrechen, z.B. auch über die Kommandozeile per STRG + C, was wir weder abfangen, noch beeinflussen können. Allerdings gibt es eine Möglichkeit, dass trotzdem ein bestimmter Code ausgeführt wird, wenn der User dies tut – die Shutdown Hooks.

Continue reading

[Tutorial Serie] LWJGL 3.1.0 & GLFW (mit OpenGL) – Teil 1

In dieser neuen Tutorial-Serie soll uns einmal um die Lightweight Java Game Library 3 (kurz: LWJGL 3) gehen, eine Library für Java um 3D und 2D Spiele entwickeln zu können. Dabei werden allerdings OpenGL oder Vulkan vorausgesetzt. LWJGL soll den Zugriff auf OpenGL, OpenAL und OpenCL, sowie seit neuestem auch auf Vulkan Funktionen erleichtern und euch eine Menge Arbeit abnehmen. In diesem Tutorial soll es uns aber nur um OpenGL gehen.

LWJGL Logo

Continue reading

[Tutorial] Sessions mit Spring nutzen

Heute habe ich mich gefragt, wie man Sessions mit Spring in Java nutzen kann und mit etwas Recherche erfahren, dass es in Spring um einiges einfacher ist, als ich anfangs gedacht habe. Auf die Maven Konfiguration werde ich hier nicht genauer eingehen.

 

Was ist eine Session?

Session heißt übersetzt “Sitzung” und ist auch wortwörtlich eine. Jedem User wird dabei eine eindeutige ID zugeordnet und als Cookie gespeichert und der Server weiß somit, dass es sich beim nächsten Seitenaufruf immer noch um den selben User handelt. Was nach Tracking klingt ist fürs moderne Web unentbehrlich! Wenn der Server nicht wüsste, dass es sich um den selben User handelt, wüsste er auch nicht, ob der User eingeloggt ist oder wie sein Benutzername lautet, man müsste sich also ohne immer auf jeder Seite neu einloggen! Damit kommen wir auch gleich zum nächsten Punkt:
Während der Client nur die sessionID besitzt, kann man auf Serverseite Daten zu dem User (z.B. userID, Username, Flag ob er eingeloggt ist usw.) speichern, die der Client nicht manipulieren kann. Ein Hacker könnte höchstens versuchen, die sessionID per Cookie zu manipulieren und eine richtige sessionID herauszufinden (sog. Session Hijacking), allerdings ist dies nicht so einfach möglich, wie es sich anhört, da die ID keine Zahl, sondern meist ein Hash ist. Diese wird übrigens erstellt, sobald der User entweder die Seite zum ersten Mal aufruft oder die alte Session abgelaufen ist (z.B. kann eine Session nur 15 Minuten gültig sein, damit ein Benutzer automatisch ausgeloggt wird, sobald er 15 Minuten nicht aktiv ist).

Continue reading

[Tutorial] Eine Einführung in Maven – Teil 2 / 2

Im 1. Teil des Tutorials haben wir bereits gelernt, wie man ein Maven Projekt erstellt. Auch was Maven ist, wissen wir bereits.

In diesem 2. Teil soll es nun darum gehen, wie wir Maven Projekte konfigurieren und richtig einsetzen.

Continue reading

[Tutorial] Ein Chat Server in Java – Teil 2 / 2

In diesem 2. Teil des Tutorials wollen wir uns um den Chat Client kümmern. Zum ersten Teil gehts hier.

In diesem Tutorial läuft der Client nur in der Console, allerdings ist es ein leichtes, den Client um ein GUI zu erweitern, da er dafür ausgelegt wurde.

Hier der volle Source Code: https://github.com/JuKu/chat-server-tutorial

Chat Client Version 1.0.0

Chat Client Version 1.0.0

Continue reading

[Tutorial] Ein Chat Server in Java – Teil 1 / 2

In diesem Tutorial wollen wir einen kleinen Chat Server in Java mit der Library vertx.io schreiben. Ursprünglich wollte ich lediglich einen kleinen Prototyp schreiben, um vertx.io etwas genauer kennen zu lernen, aber dann habe ich gleich angefangen ein kleines Tutorial dazu zu veröffentlichen, um diese Erfahrung mit euch zu teilen.

Der Chat Server & Client wird nur in der Console laufen, allerdings ist es ein leichtes, eine GUI für ihn zu bauen, da diese bereits beim Entwurf mit berücksichtigt wurde. Zu Beginn soll ein Benutzername eingegeben werden, danach kann der User direkt Nachrichten eingeben und mit ENTER zum Server schicken, um mit den anderen Nutzern zu chatten. Das ganze wird als JSON String übertragen. Die Implementierung des Clients folgt im 2. Teil des Tutorials!

Der Chat Server ist übrigens nicht auf eine Anzahl an Clients begrenzt, er kann so viele Chat Clients aufnehmen, bis der RAM voll oder die CPU ausgelastet ist. 😀

Chatserver Architektur

Continue reading

[Java] Nativen (Off-Heap) Speicher allozieren

Ja, ihr habt richtig gelesen! In diesem Blog Beitrag geht es darum, wie man in Java nativen Speicher (Off Heap Speicher) alloziert, der außerhalb des Garbage Collectors läuft, also in etwa so, wie wenn man in C oder C++ mit malloc() Speicher allozieren würde.

Continue reading