Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte einmal testen: Tilemap System [Java]



Cornix
28.01.2013, 21:41
Guten Tag.

Edit:
Ein großes Update der Engine auf Version 2.0 lässt sich >hier< (http://www.multimediaxis.de/threads/137524-Bitte-einmal-testen-Tilemap-System-Java?p=3059163&viewfull=1#post3059163) finden!

Ich würde die Community gerne einmal darum bitten meinen neuesten Anlauf an ein Tilemap-System zu testen.
Es geht darum, dass ich mit einer 2D Karte so gut wie möglich eine 3D Umgebung darstellen möchte. Mit variablen Höhen und Tiefen.

Ich habe ein kleines Java-Testprogramm geschrieben; es wäre sehr hilfreich wenn so viele Forenmitglieder wie nur möglich dieses Programm einmal downloaden, starten und testen könnten und anschließend einen Kommentar dazu hinterlassen.
Ich wüsste gerne ob ihr euch vorstellen könntet ein Spiel mit einer derartigen Tilemap zu spielen und ob die Illusion einer 3-dimensionalen Landschaft wirkungsvoll entsteht.

Hier einmal die Steuerung:
Linksklick => Land erhöhen
Rechtsklick => Land absenken
Left-Shift + Linksklick => Terrain ID auf "Erde" setzen
Left-Shift + Rechtsklick => Terrain ID auf "Gras" setzen

Ich empfehle das System mit verschiedenem Terrain zu testen für best mögliche Ergebnisse.
Die neuste Version von Java sollte installiert sein um das Programm starten zu können. Es sollte sowohl auf Windows als auch auf MacOS und Linux laufen. Es wäre sehr nett wenn auch das getestet werden könnte.


Screenshot:
16704

Davy Jones
28.01.2013, 22:31
Ein Klick auf die Executable bewirkt garnichts.

MarcL
29.01.2013, 08:59
Testsystem:
Windows 7 Professional x64
AMD Athlon II 250

Also ich könnte mir sehr gut vorstellen, Terrain auf diese Weise zu erstellen (vorausgesetzt es gibt Tools mit dem sich viele Felder gleichzeitig verformen lassen) und finde es für "bestimmte" Umgebungen auch als passend, allerdings finde ich die "Pyramiden-"spitzen sehr extrem, wenn man nur etwas hügeliges Terrain machen will... Ich hab irgendwie das Gefühl, ich hätte bei irgendeinem Spiel schon mal einen Terraineditor gehabt, wo das mehr so oben abgeschnittene Pyramiden hatte...

Etwa so in dieser Art und Weise:
16707

So würde ich mir jetzt ein Terrain damit vorstellen:
16708

Cornix
29.01.2013, 09:13
Ein Klick auf die Executable bewirkt garnichts.
Es gibt eine err-log.txt Datei in dem Ordner. Schau dort bitte einmal ob irgendetwas vermerkt steht. Falls dies der Fall ist dann teile mir das bitte mit.
Falls nicht ist es sehr wahrscheinlich, dass Java nicht auf deinem Rechner installiert ist.
Solltest du einen Windows-Rechner benutzen und der Meinung sein Java sei doch auf deinem Rechner installiert dann öffne bitte einmal eine Kommando-Zeile (z.b. Task-Manager -> ausführen -> cmd.exe) und gebe dort einmal "java -version" ein.
Falls du eine Ausgabe erhälst die Anzeigt, dass Java installiert ist dann teile mir bitte mit welche Version.


Testsystem:
Windows 7 Professional x64
AMD Athlon II 250

Also ich könnte mir sehr gut vorstellen, Terrain auf diese Weise zu erstellen (vorausgesetzt es gibt Tools mit dem sich viele Felder gleichzeitig verformen lassen) und finde es für "bestimmte" Umgebungen auch als passend, allerdings finde ich die "Pyramiden-"spitzen sehr extrem, wenn man nur etwas hügeliges Terrain machen will... Ich hab irgendwie das Gefühl, ich hätte bei irgendeinem Spiel schon mal einen Terraineditor gehabt, wo das mehr so oben abgeschnittene Pyramiden hatte...

Etwa so in dieser Art und Weise:
16707

So würde ich mir jetzt ein Terrain damit vorstellen:
16708
Vielen Dank für den Test.
Im Moment ist das alles noch sehr konzeptionell. In einem richtigen Spiel wird es natürlich maximale Höhendifferenzen zwischen benachbarten Knotenpunken geben und auch abgeflachte Werkzeuge um Terrain zu erhöhen.

Als Vorlage für das gesamte System diente ein altes Computerspiel namens Knights & Merchants welches ein sehr ähnliches Terrain System verwendet hat.

Davy Jones
29.01.2013, 10:44
Es gibt eine err-log.txt Datei in dem Ordner. Schau dort bitte einmal ob irgendetwas vermerkt steht. Falls dies der Fall ist dann teile mir das bitte mit.
Falls nicht ist es sehr wahrscheinlich, dass Java nicht auf deinem Rechner installiert ist.
Solltest du einen Windows-Rechner benutzen und der Meinung sein Java sei doch auf deinem Rechner installiert dann öffne bitte einmal eine Kommando-Zeile (z.b. Task-Manager -> ausführen -> cmd.exe) und gebe dort einmal "java -version" ein.
Falls du eine Ausgabe erhälst die Anzeigt, dass Java installiert ist dann teile mir bitte mit welche Version.
Das hab ich eben unter Systemsteuerung - Software nachgeschaut, es ist Java 5 Update 18. Hatte damals die Illusion, dass die neuesten Versionen 100 MB größer sind als die alten, darum besitze ich noch diesen alten Schinken.

System:
WinXP Professional (alle Service-Packs)
AMD Phenom II X4 B50

Cornix
29.01.2013, 11:05
Es ist erforderlich die neueste Version von Java installiert zu haben, nicht nur ist es ratsam aus Sicherheitstechnischen Gründen und wegen der Performance, sondern auch weil neue Operationen wie zum Beispiel die Bitweisen atomaren Funktionen oder ähnliches erst durch neuere Version eingeführt wurden.
Falls dein err-log.txt keine Fehlermeldung zeigt und das Programm dennoch nicht startet so weist aus meiner Erfahrung aus früheren Tests her alles darauf hin, dass die Java Version nicht ausreichend ist.

Davy Jones
29.01.2013, 14:11
Yauh, jetzt funktioniert das ganze einwandfrei.

Cornix
03.02.2013, 15:04
Ich bin immernoch gespannt auf weiteres Feedback.
Es wäre sehr nett wenn noch ein paar Forenmitglieder das Programm ausprobieren könnten und ihre Meinung dazu sagen.
Könnt ihr euch vorstellen, ein Spiel mit einer solchen Terrain-Engine zu spielen?
Gibt es Verbesserungsvorschläge?
Fragen? Anregungen?

Ich bin für jede Form von Feedback dankbar.

MagicMaker
03.02.2013, 15:25
Gibt es Verbesserungsvorschläge?
Mit etwas arbeiten, das schneller, besser und eigenständiger funktioniert als ein Javaprogramm.

AmigaMix
03.02.2013, 15:28
Habe dieses kleine Tool eben heruntergeladen und gleich ausprobiert. Ich muss sagen, ich bin schwer begeistert, es läuft als so ziemlich einzige Anwendung auf meinem Computer flüssig :D . Aber mal ernsthaft, ich könnte mir gut vorstellen damit zu arbeiten, auch wenn die Steuerung noch etwas gewöhnungsbedürftig ist, also: "gut" bis "sehr gut". :)

Cornix
03.02.2013, 15:46
Mit etwas arbeiten, das schneller, besser und eigenständiger funktioniert als ein Javaprogramm.

Java ist sehr schnell und sehr effizient wenn man weis wie man damit zu programmieren hat.
Ich bevorzuge zwar auch C++ wenn es nur um die Sprache als solche geht, java bietet allerdings mehr comfort im Bereich von Plattformunabhängigkeit und Sicherheit.


Habe dieses kleine Tool eben heruntergeladen und gleich ausprobiert. Ich muss sagen, ich bin schwer begeistert, es läuft als so ziemlich einzige Anwendung auf meinem Computer flüssig :D . Aber mal ernsthaft, ich könnte mir gut vorstellen damit zu arbeiten, auch wenn die Steuerung noch etwas gewöhnungsbedürftig ist, also: "gut" bis "sehr gut". :)
Vielen Dank für den Test.
Eine Frage habe ich noch, wurde auf einem Windows System getestet oder einem Mac / Linux?

AmigaMix
03.02.2013, 16:39
Ich habe es mit Windows getestet. XP 32bit, sofern das relevant ist.

Cornix
03.02.2013, 16:55
Danke für die Information.

niR-kun
10.02.2013, 03:47
Ich bevorzuge eher eine 3D-Karte, statt das mir der Effekt von 3D auf einer 2D-Karte vorgegaukelt wird.
Eine Multi-Layer-2D-Umgebung und eine 3D-Umgebung unterscheiden sich nicht wirklich in der Datenstruktur, das ist nur die Frage wie es gerendert wird.
Ich kann mich der Meinung, dass es mehr rund als pyramiden-artig sein sollte, anschließen.

Es scheint ja jetzt so zu sein, das man nur pro 32x32-Pixel-Tile nur an den Eckpunkten die Höhe festlegen kann. Es wäre wünschenswert, wenn dies aber je nach Größe des Tiles mehrere Höhen angeben könnte (folglich mehrere Polygone pro Tile).
Als Pinsel solltest du auch eine Hügelform auf Basis eines Kreiskurve oder ein Gaußschen Glockenkurve anbieten.

Du nutzt ja lwjgl, also sollte es auch unter etlichen Linux-Distris und MacOSX laufen, wo auch das JRE7 installiert ist.
Außer du hast Mist beim setzen des Paths für die nativen lwjgl-libs gebaut.

Fragen:
Quellcode? Lizenz? Stand der Entwicklung? Geplante Features? Umgesetzte Features? Anzahl der Entwickler?

Zum testen auf anderen Betriebssystemen:
Installiere virtualbox, setzt dir in einer VM ein Ubuntu Linux auf (ich würde Arch Linux nehmen, aber Ubuntu reicht für Linux-Unerfahrene) und installiere da das aktuelle jre7.0.XX per Hand.
Wenn du ganz hart bist, dann erstelle auch noch eine VM mit OpenIndiana (eine Art von Solaris).

Wenn's auf Linux läuft, wird's wohl auch unter MacOSX mit dem JRE7 laufen.
Unter MacOSX muss man natürlich das JRE7 seit einiger Zeit per Hand installieren, ältere OSX-Versionen haben ein veraltetes von Apple gepflegtes JRE6 integriert.

Ach ja, läuft in meinen VMs unter Arch x64 und OpenIndiana x86 wie erwartet (nachdem ich die libs ersetzt habe, gewöhn es dir an die je nach OS in einem separaten Ordner unter /lib/lwjgl/native o.ä. zu packen - jar-Dateien in einer jar-Datei ist auch nicht gerade sehr schön).

@MarcL: WarCraft 3?

Cornix
10.02.2013, 13:00
Vielen Dank für den Ausführlichen Beitrag.


Es scheint ja jetzt so zu sein, das man nur pro 32x32-Pixel-Tile nur an den Eckpunkten die Höhe festlegen kann. Es wäre wünschenswert, wenn dies aber je nach Größe des Tiles mehrere Höhen angeben könnte (folglich mehrere Polygone pro Tile).
Als Pinsel solltest du auch eine Hügelform auf Basis eines Kreiskurve oder ein Gaußschen Glockenkurve anbieten.
Genau das ist auch der Fall. Jedes Tile besitzt vier Eckknoten und nur diese können angehoben werden.
Die gesamte Idee dahinter eine 2D Karte zu nehmen und diesen 3D-Effekt zu simulieren basiert darauf möglichst gute Performance auch auf sehr alten oder sehr schwachen Rechnern zu erzielen.
Ich habe nicht vor eine "richtige" 3D-Karte zu verwenden da es nicht für meine Zwecke nötig sein wird.


Du nutzt ja lwjgl, also sollte es auch unter etlichen Linux-Distris und MacOSX laufen, wo auch das JRE7 installiert ist.
Genau das glaube ich auch, aber ich will gerne auf Nummer sicher gehen da ich es so schlecht testen kann.


Quellcode? Lizenz? Stand der Entwicklung? Geplante Features? Umgesetzte Features? Anzahl der Entwickler?
Das ist nur ein Test gewesen, und ich arbeite derzeit auch nur alleine. Das richtige Projekt für welches ich dieses System im Sinn hatte wurde noch nicht begonnen und wird es vielleicht auch nicht in naher Zukunft.
Daher gibt es auch keine wirklichen "Features" von denen man sprechen kann.
Falls ich jedoch jemals ein Projekt fertig stellen sollte habe ich vor es komplett open-source zu veröffentlichen.

niR-kun
10.02.2013, 23:55
Wenn du planst in Zukunft etwas basierend auf diesen Test als Open Source zu veröffentlichen, dann gib den Quellcode so früh wie möglich frei.
Es ist nicht schlimm, dass der Quellcode nicht feature-komplett oder fehlerfrei ist, Hauptsache er ist überhaupt verfügbar.

Falls du den Quellcode immer auf den letzten Stand für andere verfügbar haben willst, dann lohnt es sich subversion (aka svn), git usw. zu nutzen.
Dann wenn du nicht gerade den Quellcode auf einen eigenen Server hosten kannst, kannst du auch die kostenlosen Dienste wie sourceforge (unter anderem svn und git) oder github (nur git) nutzen.

Ich würde mich sehr darüber freuen, wenn du jetzt schon den Quellcode deines Tests freigeben würdest.

relxi
11.02.2013, 07:55
Klappt mit Windows 7 Home Premium (Service Pack 1) x64.
Die momentan einzige Anmerkung meinerseits für diese Mappingart ist, dass unterschiedliche Terrainhöhen mit wenig "Abhebung" voneinander Spieler verwirren könnten. Ansonsten kann ich mir die Verwendung einer solchen Methode gut vorstellen.

Cornix
11.02.2013, 12:41
Klappt mit Windows 7 Home Premium (Service Pack 1) x64.
Die momentan einzige Anmerkung meinerseits für diese Mappingart ist, dass unterschiedliche Terrainhöhen mit wenig "Abhebung" voneinander Spieler verwirren könnten. Ansonsten kann ich mir die Verwendung einer solchen Methode gut vorstellen.
Vielen Dank für den Test. Ich glaube, dass vielleicht eine andere Bodentextur die Höhenunterschiede noch deutlicher machen würde. Vielleicht müsste sie grundlegend etwas dunkler sein damit die "Erhellung" von erhöhtem Terrain eine stärkere Wirkung hat.


[...]

Ich würde mich sehr darüber freuen, wenn du jetzt schon den Quellcode deines Tests freigeben würdest.
Der Quellcode besteht größtenteils nur aus persönlichen Wrapper-Funktionen für die lwjgl Basisbefehle oder allgemein nützlichen Funktionen. Wenn man eine anständige Grafikbibliothek haben möchte dann sollte man sich lieber soetwas wie Slick nehmen anstatt meinen löchrigen Code zu nutzen. (Außerdem ist der Quellcode von mir nicht "verunstaltet" worden und kann daher sowieso jederzeit eingesehen werden wenn man das .jar hat.)
Der Algorithmus selbst ist so banal simpel, dass man dafür kaum irgendwelchen Sourcecode benötigen sollte. Die Datenhaltung ist sowieso Geschmackssache.
Ich kann den Sourcecode natürlich zeigen, aber ich glaube nicht, dass das auch nur annähernd soviel helfen würde als wenn ich einfach den Algorithmus aus seiner Idee heraus erkläre.

Zuerst ein paar Begriffe:
Tile = Ein tile ist ein viereck mit einer Textur-ID, welche angibt mit welcher Textur das Viereck gezeichnet werden soll, sowie vier Eckknoten (=Nodes).
Node = Ein Node ist ein Punkt mit X- und Y-Koordinate und einem Höhenwert Z.
Wichtige Nodes = Die wichtigen Nodes eines Tiles, also diejenigen, welche das Tile benötigt um gezeichnet werden zu können, sind die vier Eckknoten des Tiles sowie zwei zusätzliche Knoten weiter im Süden. (Dazu später mehr)

Als Beispiel nehmen wir eine 3x3 Karte:
16855
Wir haben 9 Tiles (=3x3) und 20 Nodes (4*5)
Die zusätzliche Reihe von Nodes kommt dadurch zustande, dass ein Tile um gezeichnet zu werden noch zwei weitere Nodes weiter im Süden benötigt.

Die Zeichenroutine geht nun wie folgt vor:
- Wir zeichnen alle Tiles von Links nach Rechts, von Oben nach Unten. Diese Reihenfolge ist nötig.
- Um ein Tile zu zeichnen nehmen wir uns die wichtigen Nodes eines Tiles. Das sind die vier Eckknoten des Tiles plus zwei weitere im Süden des Tiles.
- Die X-Position zum Zeichnen eines Knotens ist einfach die X-Position des Knotens selbst. Sie wird nicht verändert.
- Die Y-Position zum Zeichnen eines Knotens wird zusätzlich durch den Z-Wert des Tiles beeinflusst. Mit einem fixen Faktor wird der Z-Wert des Tiles multipliziert und das Ergebnis dann von der Y-Position des Tiles abgezogen. (Falls die linke obere Ecke die Koordinate (0,0) hätte, wäre die untere Ecke (0,0) dann müsste man den Wert addieren anstatt zu subtrahieren.)
- Wir zeichnen nur die vier Eckknoten des Tiles, die zwei zusätzlichen werden zum Zeichnen nicht benötigt.
- Die Farbe mit der ein Eckknoten gezeichnet wird ermittelt sich anhand des Knotens "unter diesem", also der nächste Knoten weiter südlich.
- Hat der südliche Knoten B eines zu zeichnenden Knotens A einen höheren Z-Wert als A wird der Knoten A dunkler gezeichnet anhand der Differenz ihrer Z-Werte.
- Hat der südliche Knoten B eines zu zeichnenden Knotens A einen niedrigeren Z-Wert als A wird der Knoten A heller gezeichnet anhand der Differenz ihrer Z-Werte.

Konklusion:
- Jedes Tile wird als Trapez gezeichnet. Die Linke und rechte Kante eines Tiles sind immer parallel zu einander und orthogonal zur X-Achse der Zeichenfläche.
- Die Y-Koordinate jedes Eckpunktes eines Tiles wird durch den Z-Wert des Eckpunktes weiter nach "oben" oder "unten" verschoben.
- Da sich zwei benachbarte Tiles zwei Eckknoten teilen, können diese sich daher niemals überschneiden.
- Wir müssen von oben nach unten zeichnen (Mit einer Tiefenbuffer einstellung von LEqual, GEqual oder Equal) damit die perspektive erhaltenbleibt und ein einzelnes Tile welches "zu tief" ist nicht weiter südlich liegendere Tiles "überdecken" kann.
- Damit die Lichtberechnung der südlichsten Tiles möglich ist brauchen wir eine zusätzliche Reihe von Knotenpunkten ohne zugehörige Tiles.
- Einzelne Knotenpunkte werden entweder aufgehellt oder verdunkelt in abhängigkeit zu dem Tile welches direkt südlich von diesem liegt.


Hier nocheinmal ein etwas abgewandelter Source-Code mit Kommentaren um das ganze hoffentlich ein wenig verständlicher zu machen:
[ ! Diese zeichenmethode weicht ein wenig von dem oben beschriebenen Konzept ab ! Es wird empfohlen einen Algorithmus zu verwenden welcher das Konzept oben genauer befolgt.
Außerdem verwende ich in diesem kurzen Beispiel noch keinen selbst geschriebenen Shader sondern den standard Shader. Die Hilfsmethode make_lighting(...) wäre mit einem eigenen Shader sehr viel einfacher und effektiver zu lösen.
Der gesamte Code sollte generell nur als ein schneller, nicht perfekter Test angesehen werden. Man kann den Code definitiv an mehreren Stellen verbessern. ]

public static final void draw(){
if (viewport.is_visible()){
// Ein Viewport ist eine rechteckige Fläche, welche benutzt wird um die Zeichenfläche zu begrenzen und unnötiges zeichnen zu verhindern.
// Ein Viewport übernimmt zudem "Scrollen" von zu zeichnenden Objekten anhand eines x- und y-Scrollwertes.
int viewport_x = viewport.get_x();
int viewport_y = viewport.get_y();
int viewport_scroll_x = (int) viewport.get_scroll_x();
int viewport_scroll_y = (int) viewport.get_scroll_y();

viewport.apply(); // Wrapper um GL-Scissortest

// Übernimmt das skalieren der Texturkoordinaten um exakte Werte angeben zu können. Bindet auch die Textur an den Zeichenkontext.
tex.bind();
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glScalef(scale_width, scale_height, 1);

// Initialisiert verschiedene Variablen welche im Zeichenkontext benötigt werden.
Tile tile;
Node[] nodes;
int tile_id;

// Die Loop-Variablen werden benötigt um nur exakt diejenigen Tiles zu zeichnen welche auch mit dem derzeitigen Scroll des Viewports und der Größe der Bildfläche gesehen werden können.
int loop_start_x = viewport_scroll_x / TILE_SIZE_DRAW;
int loop_start_y = viewport_scroll_y / TILE_SIZE_DRAW;
int loop_end_x = loop_start_x + DISPLAY_WIDTH + 1;
int loop_end_y = loop_start_y + DISPLAY_HEIGHT + 1;
if (loop_start_x % TILE_SIZE_DRAW != 0){
loop_start_x -= 1;
}
if (loop_start_y % TILE_SIZE_DRAW != 0){
loop_start_y -= 1;
}
int loop_x;
int loop_y;

// Wird für das Scrollen benötigt.
int draw_x_bonus = viewport_x + loop_start_x * TILE_SIZE_DRAW - viewport_scroll_x;
int draw_y_bonus = viewport_y + loop_start_y * TILE_SIZE_DRAW - viewport_scroll_y;
// Koordinaten zum zeichnen der Eckknoten.
int[] draw_x = new int[4];
int[] draw_y = new int[4];
int draw_z = 0;

// Koordinaten von welchen der Texturausschnitt geladen werden soll.
int src_start_x;
int src_start_y;
int src_end_x;
int src_end_y;

GL11.glBegin(GL11.GL_QUADS);
for (loop_x = loop_start_x; loop_x < loop_end_x; loop_x++){
if (loop_x >= map.get_width()){
break; // Falls die Karte zu klein ist.
}
draw_z = 0; // Beginn einer Spalte, der Z-Wert zum zeichnen wird auf 0 gesetzt.
for (loop_y = loop_start_y; loop_y < loop_end_y; loop_y++){
if (loop_y >= map.get_height()){
break; // Falls die Karte zu klein ist.
}
tile = map.get_tile(loop_x, loop_y);
nodes = tile.get_nodes();
tile_id = tile.get_tile_id();

for (int i = 0; i < 4; i++){
draw_x[i] = draw_x_bonus + nodes[i].get_x();
draw_y[i] = draw_y_bonus + nodes[i].get_y(); // Die get_y()-Methode berücksichtigt bereits den Z-Wert des Tiles welcher multipliziert mit einem festen Faktor von dem Y-Wert des Tiles abgezogen wird.
}

src_start_x = (tile_id % tiles_per_row) * TILE_SIZE;
src_start_y = (tile_id / tiles_per_row) * TILE_SIZE;
src_end_x = src_start_x + TILE_SIZE;
src_end_y = src_start_y + TILE_SIZE;

// Die Zeichenroutine für einen Quad. Wir definieren die vier Vektoren für die Textur und die vier Vektoren zum Zeichnen.
// Die Hilfsmethode make_lighting(...) übernimmt das manipulieren von der Farbe für jeden Eckknoten.
make_lighting(nodes[0], nodes[2]);
GL11.glTexCoord2f(src_start_x, src_start_y);
GL11.glVertex3f(draw_x[0], draw_y[0], draw_z);

make_lighting(nodes[1], nodes[3]);
GL11.glTexCoord2f(src_end_x , src_start_y);
GL11.glVertex3f(draw_x[1], draw_y[1], draw_z);

make_lighting(nodes[3], nodes[5]);
GL11.glTexCoord2f(src_end_x , src_end_y);
GL11.glVertex3f(draw_x[3], draw_y[3], draw_z);

make_lighting(nodes[2], nodes[4]);
GL11.glTexCoord2f(src_start_x, src_end_y);
GL11.glVertex3f(draw_x[2], draw_y[2], draw_z);

draw_z++; // Jedes weitere Tile in der selben Spalte wird mit einem höheren Z-Wert gezeichnet.
}
}
GL14.glSecondaryColor3f(0f, 0f, 0f);
GL11.glColor4f(1f, 1f, 1f, 1f);
GL11.glEnd();
GL11.glDisable(GL11.GL_SCISSOR_TEST);
}
}

// Diese Hilfsmethode berechnet die Werte für GL.primaryColor und GL.secondaryColor anhand eines Tiles und dem Referenztile weiter im Süden.
// Bei verwendung des standard Shaders ist GL.primaryColor eine multiplikative Farbe welche auf den Farbwert eines Fragments angewandt wird,
// GL.secondaryColor ist eine additive Farbe welche auf den Farbwert addiert wird.
// GL.primaryColor kann das Tile also nur verdunkeln da nur Werte zwischen 0.0f und 1.0f erlaubt ist, GL.secondaryColor kann das Tile nur aufhellen
// mit Werten zwischen 0.0f und 1.0f.
private static final void make_lighting(final Node one, final Node other){
// MITTELWERT + (ONE-Z - OTHER-Z) / MAX-Z
float lighting = 0.0f + (one.get_height() - other.get_height()) / 300f;
if (lighting < 0){
// Die Farbe soll verdunkelt werden.
lighting *= -1f; // Werte dürfen nur zwischen 0.0f und 1.0f liegen. Werte außerhalb dieses Bereiches werden von der Grafikkarte automatisch korrigiert.
GL11.glColor4f(lighting, lighting, lighting, 1f);
GL14.glSecondaryColor3f(0f, 0f, 0f);
}else{
// Die Farbe soll aufgehellt werden.
lighting /= 5; // Maximiert den Wertebereich weiterhin. Die Werte sind Geschmackssache.
if (lighting > 0.5f){
lighting = 0.5f;
}
GL11.glColor4f(1f, 1f, 1f, 1f);
GL14.glSecondaryColor3f(lighting, lighting, lighting);
}
}

goldenroy
11.02.2013, 12:47
Hm, bei einem Klick auf die Executable.jar funktioniert nichts. Err-log ist auch leer.
Windows 7 Ultimate (32-Bit)
Java 1.7.0_07

:\

Cornix
11.02.2013, 13:13
Danke für den Test, das ist sehr interessant. Kannst du mir die folgenden Fragen vielleicht beantworten:
Steht etwas im Out-log.txt?
Hast du einmal versucht das Programm nocheinmal herunterzuladen falls es einen Fehler bei dem Download gab?
Wie hast du die Version von Java überprüft? Durch die Kommandozeile?
Welche Grafikkarte benutzt du?

goldenroy
11.02.2013, 13:22
Wat. Ich weiß wo das Problem lag. Ich hab standardmäßig das Öffnen von .jar Dateien auf WinRAR gelegt, weswegen ich die .jar durch Rechtsklick --> Öffnen mit... versucht habe zu öffnen. Als ich aber Java als Standardprogramm ausgewählt habe, öffnete es sich ohne Probleme... und funktionieren tuts auch.. ôO

Cornix
11.02.2013, 13:29
Ich würde auch gerne wissen was ihr davon haltet, ob es gut genug aussieht um benutzt zu werden, ob es zu ungenau ist um damit ein Spiel zu erstellen, etc.

Oktorok3
14.02.2013, 19:33
Ist eine interessante Idee!
Nicht schlecht, wenn man Höhen und Tiefen auf diese Weise anzeigen kann!
Schade, dass ich das Tool nicht testen kann, da bei mir garnichts passiert, wenn ich die Executable.jar anklicke (Ich habe Win7 Home Premium und die aktuelle Java-Version).

Cornix
14.02.2013, 20:17
Ist eine interessante Idee!
Nicht schlecht, wenn man Höhen und Tiefen auf diese Weise anzeigen kann!
Schade, dass ich das Tool nicht testen kann, da bei mir garnichts passiert, wenn ich die Executable.jar anklicke (Ich habe Win7 Home Premium und die aktuelle Java-Version).
Vielen Dank für die Kritik, aber gleiche Frage wie vorhin:

[...]
Steht etwas im Out-log.txt?
Hast du einmal versucht das Programm nocheinmal herunterzuladen falls es einen Fehler bei dem Download gab?
Wie hast du die Version von Java überprüft? Durch die Kommandozeile?
Welche Grafikkarte benutzt du?
Und hast du goldenroy's Beitrag in Betracht gezogen ob es zu dem selben Problem gekommen sein konnte?

Ghabry
16.02.2013, 00:28
Funktioniert bei mir nicht, nach einigen Sekunden wird die Graslandschaft einfach komplett schwarz (auch wenn ich die Maus nicht anfasse) und unten rechts erscheint ein graues Rechteck. Diese verschwindet dann auch nach einigen Sekunden, dann ist alles schwarz.

Systeminfo:
Win7 x64
Ati-Graka

err-log ist leer.

Bei Java-Programmen empfehle ich übrigens Launch4j (http://launch4j.sourceforge.net/), damit Windows-Nutzer eine Exe haben, weil bei einigen Jar-Dateien nicht richtig verknüpft sind...

Cornix
16.02.2013, 10:42
Funktioniert bei mir nicht, nach einigen Sekunden wird die Graslandschaft einfach komplett schwarz (auch wenn ich die Maus nicht anfasse) und unten rechts erscheint ein graues Rechteck. Diese verschwindet dann auch nach einigen Sekunden, dann ist alles schwarz.

Systeminfo:
Win7 x64
Ati-Graka

err-log ist leer.

Bei Java-Programmen empfehle ich übrigens Launch4j (http://launch4j.sourceforge.net/), damit Windows-Nutzer eine Exe haben, weil bei einigen Jar-Dateien nicht richtig verknüpft sind...

Vielen Dank für den Test, könntest du vielleicht einen Screenshot von dem Verhalten zeigen?
Außerdem wäre es sehr hilfreich falls du mir sagen könntest welche Version von Java bei dir installiert ist.

Ghabry
16.02.2013, 18:34
Bei Java 6 kommt:
Exception in thread "main" java.lang.UnsupportedClassVersionError: misc/MainGDG: Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)

Java 7:
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)


(Farbverlauf ignorieren, hab mit 8bit gespeichert)

Cornix
16.02.2013, 19:01
Vielen Dank für den Beitrag.
Das ist wirklich Besorgniserregend da du der einzige zu sein scheinst bei dem dieses Verhalten auftritt und ich auch keinerlei Idee habe was dieses Verhalten hervorrufen sollte.
Der Code ist extrem simpel, ich bezweifle stark, dass es sich um einen Programmfehler dieser Größenordnung handeln kann.
Meine direkte Vermutung wäre doch die Grafikkarte, wäre es möglich, dass du mir ein wenig genauere Angaben machst welche Art von Grafikkarte du benutzt?

Desweiteren:
- Was passiert falls du innerhalb des Fensters an irgendeinem Punkt mit der Maustaste klickst?
- Hast du einmal probiert das Projekt ein zweites Mal herunterzuladen, um auszuschließen, dass es sich um einen Download-Fehler handelt?
- Kannst du einmal versuchen den Resourcen-Ordner zu öffnen und das Tileset zu bearbeiten? "Resources/Graphics/Tileset.png" Versuch doch vielleicht einmal mit einer Bildgröße von 64x32 um gegen einen Programmfehler zu testen.
- Kannst du einmal versuchen die Settings-Datei zu bearbeiten um zu versuchen damit zu einer Lösung zu kommen? Beispielsweise die VSync-Option zu deaktivieren, die Auflösung zu ändern oder auf Vollbild zu schalten.

Ghabry
16.02.2013, 22:08
Meine direkte Vermutung wäre doch die Grafikkarte, wäre es möglich, dass du mir ein wenig genauere Angaben machst welche Art von Grafikkarte du benutzt?

HD6570. Treiberupdate bringt nichts.



- Was passiert falls du innerhalb des Fensters an irgendeinem Punkt mit der Maustaste klickst?

Am Anfang funktioniert es wie erwartet,nach einigen Sekunden ist aber dieser erwähnte Fehler und dan passiert beim klicken nix mehr.



- Hast du einmal probiert das Projekt ein zweites Mal herunterzuladen, um auszuschließen, dass es sich um einen Download-Fehler handelt?

Ja.



- Kannst du einmal versuchen den Resourcen-Ordner zu öffnen und das Tileset zu bearbeiten? "Resources/Graphics/Tileset.png" Versuch doch vielleicht einmal mit einer Bildgröße von 64x32 um gegen einen Programmfehler zu testen.

Ja, Problem bleibt.



- Kannst du einmal versuchen die Settings-Datei zu bearbeiten um zu versuchen damit zu einer Lösung zu kommen? Beispielsweise die VSync-Option zu deaktivieren, die Auflösung zu ändern oder auf Vollbild zu schalten.

Ja, bringt nix. Schneller als 60 FPS geht übrigens nicht (Vsync aus)

Das sich (manche?) Ati-Karten anders verhalten habe ich auch schon mal bei OpenGL unter Java bemerkt. Hatte da aber JOGL verwendet. Da wurde bei Nvidia Karten die Init-Funktion nur 1x beim Start aufgerufen. Bei Ati mehrmals pro Sekunde.

Cornix
17.02.2013, 09:51
Am Anfang funktioniert es wie erwartet,nach einigen Sekunden ist aber dieser erwähnte Fehler und dan passiert beim klicken nix mehr.
[...]

Okay, danke soweit.
Kann es sein, dass du irgendwelche Einstellungen an der Grafikkarte über das Controlpanel vorgenommen hast?
Wäre es vielleicht möglich alle Einstellungen einmal auf den Standard zurück zu setzen und das Programm nocheinmal auszuprobieren?

Ich habe hier nocheinmal ein sehr sehr simples Programm, welches lediglich ein einzelnes Bild in der Mitte des Bildschirms zeigen soll, könntest du dieses Programm vielleicht downloaden, testen, und mir mitteilen ob das gleiche Problem auftritt?
Vielen Dank.

leonhart-squall
17.02.2013, 10:23
Beides Ausprobiert, keins davon startet.
sysinfo:
Linux (Fedora)
Intel onboard Karte
Java , aktuelle Version.

Cornix
17.02.2013, 10:27
Beides Ausprobiert, keins davon startet.
sysinfo:
Linux (Fedora)
Intel onboard Karte
Java , aktuelle Version.

Vielen Dank für den Test.
(Das von mir zuletzt hochgeladene Testprogramm kann nur unter Windows laufen da die entsprechenden nativen Bibliotheken für andere Plattformen fehlen.)

Zu der eigentlichen Anwendung:
Steht in dem err-log.txt eine Meldung?
Kannst du genauere Angaben zu der Grafikkarte geben? Weist du ob die Grafikkarte OpenGL Version 4 oder höher unterstützt?
Kannst du andere Anwendungen welche OpenGL verwenden starten? z.b. http://en.wikipedia.org/wiki/List_of_OpenGL_programs

Ghabry
17.02.2013, 12:07
Hm, ich habe alle 3D-Einstellungen im Control Center zurückgesetzt und wieder genau so angewendet, wie sie vorher von mir festgelegt waren.
Jetzt funktionierts o_O

Cornix
17.02.2013, 12:15
Hm, ich habe alle 3D-Einstellungen im Control Center zurückgesetzt und wieder genau so angewendet, wie sie vorher von mir festgelegt waren.
Jetzt funktionierts o_O

Okay, vielen Dank für die Auskunft, ich hatte schon einen kleinen Schrecken.

leonhart-squall
17.02.2013, 12:46
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
at graphics2D.CsGraphics.set_display_mode(CsGraphics.java:330)
at graphics2D.CsGraphics.initialize(CsGraphics.java:62)
at misc.MainGDG.main(MainGDG.java:20)
... 5 more
Hier einmal die err-log.txt

OpenGl kann die Grafikkarte schon, (Half-Life, OpenArena,Wolfenstein, CS,Minecraft ) nur welche version weis ich nicht genau.
Name der Grka ist : Intel HD Graphics (Intel® Pentium® processor P6200 )


EDIT:
hier nocmal der code nachdem ich das eingetippt habe java -jar -Djava.library.path="/home/xxx/Programme/test" Executable.jar
Das Fenster öffnet diesmal kurz aber schließt sofort wieder.



Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.RuntimeException: Resource not found: Resources/Graphics/System/ui.png
at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69)
at view.Textures.load_textures(Textures.java:36)
at misc.MainGDG.main(MainGDG.java:29)
... 5 more

Cornix
17.02.2013, 12:57
Okay, mit der Fehlermeldung kann man arbeiten.

Um das einmal zu übersetzen: Java kann die native OpenGL Bibliothek nicht finden.
Bei Windows scheint es auszureichen diese Dateien einfach in den selben Ordner zu packen wie die .jar, bei dir jedoch scheint er die Dateien nicht finden zu können.
Eine ganz einfache Lösung wäre es die .jar über die Kommandozeile zu starten und den Dateipfad für die nativen Bibliotheken anzugeben, aber das ist natürlich nicht sonderlich benutzerfreundlich.
Ich werde einmal schauen inwiefern ich die Manifest Datei in der .jar bearbeiten muss um diesen Schritt bereits im Vorraus zu erledigen.

Bis dahin kann dir vielleicht dieser Link dabei helfen das ganze über die Kommandozeile laufen zu lassen:
http://stackoverflow.com/questions/6588799/when-i-run-the-jar-i-get-a-no-lwjgl-in-java-library-path-error/6588898#6588898

Die Dateien welche du bei Linux benötigen wirst sind diejenigen welche die ".os" Endung benutzen.
Es sollte also völlig ausreichen in der Kommandozeile auf den Ordner zu zeigen in welchen du gedownloaded hast.

Vielen Dank dafür, dass du mich darauf aufmerksam gemacht hast.

Edit:
Die Meldung sagt aus, dass die Texturen welche versucht werden geladen zu werden nicht gefunden werden können.
Ich kann mir kaum vorstellen, dass Linux nicht mit der Schreibweise der Pfade zufrieden sein könnte.
Ich glaube ich muss mich ein wenig tiefer mit der Angelegenheit beschäftigen, aber vielen Dank für das ausführliche Testen.

Ghabry
17.02.2013, 18:24
So, ich nerv mal weiter:
Lappi mit Intel HD4000 und Nvidia 650M (mit beiden Grafikprozessoren getestet)

Das gleiche Rechteck, wie bei der Ati-Karte. Aber diesmal ist die Szene sichtbar. Das Rechteck verschwindet nach wenigen Sekunden von selbst.
Problem tritt auch bei dem Testprogramm, was nur die Blume darstellt, auf.

Cornix
17.02.2013, 18:42
So, ich nerv mal weiter:
Lappi mit Intel HD4000 und Nvidia 650M (mit beiden Grafikprozessoren getestet)

Das gleiche Rechteck, wie bei der Ati-Karte. Aber diesmal ist die Szene sichtbar. Das Rechteck verschwindet nach wenigen Sekunden von selbst.
Problem tritt auch bei dem Testprogramm, was nur die Blume darstellt, auf.

Du scheinst ein sehr unglückliches Händchen zu haben, dieses Phänomen ist bei keinem anderen Tester aufgetaucht.
Eine Frage noch dazu: Taucht dieses Rechteck auch bei dem Rechner mit der ATI Radeon HD 6570 auf wo der Fehler inzwischen bereinigt wurde?

Das ganze kann bei diesem Recheck definitiv nicht an einem Programmfehler liegen, es gibt in dem Testprogramm mit der Blume nur einen einzigen Aufruf an die Zeichenfunktion.
Besonders verwundert bin ich, dass das Rechteck einen solchen Farbverlauf zeigt und Transparent auf dem eigentlichen Bild liegt.
Dementsprechend muss das ganze in irgendeiner Weise damit zusammenhängen wie OpenGL in den Programmen initialisiert wurde.
Kannst du vielleicht einmal mit dem Settingsfile herumspielen und die Auflösung des Programms ändern um zu testen wie dies die Position und Größe des Rechteckes beeinflusst.

Hast du irgendwelche persönlichen Einstellungen in den Grafikkartentreibern vorgenommen?
Es scheint ja so als ob dies der Fall gewesen sei bei dem ursprünglichen Problem. Es kann gut sein, dass du diese Einstellungen bei allen Rechnern vorgenommen hast und dies zu dem Problem führt.

Leider kann ich bei diesem Problem wirklich sehr wenig tun da ich den Fehler nicht reproduzieren kann und auch von niemand anderem darauf hingewiesen wurde. Mir fehlen schlichtweg die Informationen um wirklich eine Ursache aufspüren zu können ohne in wildes raten zu verfallen.

Ghabry
17.02.2013, 19:10
Habe mal die EInstellungen zurückgesetzt und bisschen rumgespielt. Keine Änderung.
Wenn ich die Auflösung in deiner config-Datei ändere, bleibt das Rechteck genau so groß wie bei 640x480 (und weiterhin in der Ecke).
Die Anzeigedauer des Rechtecks wird nicht durch die FPS beeinflusst, ist immer etwa gleichlang. Mit Vsync aus und 640x480 habe ich 1991 FPS.

Kurios: Der Vollbildmodus funktioniert nicht. Bei dem Rechner mit Ati-Karte (Das Rechteck ist komplett weg) hat Windows in Vollbild umgeschalten. Hier wird einfach das Fenster auf die Monitorauflösung gestreckt und der Ati-Fehler (Schwarz mit Grauem Rechteck unten rechts) kommt zum Vorschein :/

Cornix
17.02.2013, 19:14
[...]

Kurios: Der Vollbildmodus funktioniert nicht. Bei dem Rechner mit Ati-Karte (Das Rechteck ist komplett weg) hat Windows in Vollbild umgeschalten. Hier wird einfach das Fenster auf die Monitorauflösung gestreckt und der Ati-Fehler (Schwarz mit Grauem Rechteck unten rechts) kommt zum Vorschein :/
Ich habe selbst einmal das Problem gehabt, dass Vollbild nicht funktioniert hat und stattdessen eine maximale Bildgröße im Fenstermodus verwendet wurde. Aber ohne ein Rechteck.
Bei mir trat dies direkt nach einem Treiberupdate auf und ich habe die Bildschirmauflösung einmal geändert und übernommen um das Problem zu lösen.
Wegen dem Problem mit dem Vollbild würde ich einmal raten etwas ähnliches zu probieren, mit dem Rechteck allerdings kann ich überhaupt nicht helfen, ich bin dabei ratlos.

Edit:
Probiere es doch vielleicht bitte nocheinmal mit diesem simplen Testprogramm.
Sehr viel simpler als dieses Programm kann ich es im Grunde garnicht gestalten, hier ist einmal der komplette Source-Code des ganzen Programms:

package p;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL14;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

public class Main {

public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("Out.txt");
PrintStream ps = new PrintStream(fos);
System.setErr(ps);
System.setOut(ps);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

try {
// Initializes the openGL context
doStuff();
} catch (LWJGLException e2) {
e2.printStackTrace();
}

try {
// Loads the texture and binds it
bindTexture();
} catch (IOException e) {
e.printStackTrace();
}

// the main loop and drawing is done here
loop();

// when the programme is about to terminate
Display.destroy();
}

/**
* Initializes the openGL display and sets all important flags and options.
* @throws LWJGLException
*/
public static final void doStuff() throws LWJGLException{
int width = 800;
int height = 600;

DisplayMode disMode = new DisplayMode(width, height);
Display.setDisplayMode(disMode);
Display.setVSyncEnabled(true);
Display.create();

GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glCullFace(GL11.GL_BACK);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glAlphaFunc(GL11.GL_GREATER, 0f);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glEnable(GL14.GL_COLOR_SUM);
GL11.glViewport(0, 0, width, height);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, width, height, 0, Double.MIN_VALUE, Double.MAX_VALUE);
GL11.glClearColor(0f, 0f, 0f, 1f);
}

/**
* Binds the texture with the path "Texture.png" and scales the texture matrix appropriately.
* @throws IOException
*/
public static final void bindTexture() throws IOException {
Texture tex = TextureLoader.getTexture("png", ResourceLoader.getResourceAsStream("Texture.png"), GL11.GL_LINEAR);
tex.bind();
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glScalef(1f / tex.getTextureWidth(), 1f / tex.getTextureHeight(), 1);
}

/**
* The main loop of the programme.
* Clears the picture, calls updates on the display and manages keyboard input.
*/
public static final void loop() {
boolean exitRequest = false;
while (!exitRequest){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

draw();

while(Keyboard.next()){
int key = Keyboard.getEventKey();
if (Keyboard.getEventKeyState() && key == Keyboard.KEY_ESCAPE) {
exitRequest = true;
}
}

Display.update();
Display.sync(60);

if (Display.isCloseRequested()) {
exitRequest = true;
}
}
}

/**
* The drawing of the texture is done here.
* Coordinates to be drawn to are fixed.
*/
public static final void draw() {
final int src_start_x = 0;
final int src_start_y = 0;
final int src_end_x = 400;
final int src_end_y = 380;

final int draw_start_x = 200;
final int draw_start_y = 110;
final int draw_end_x = 600;
final int draw_end_y = 490;
final int draw_z = 1;

GL11.glBegin(GL11.GL_QUADS);

GL11.glTexCoord2f(src_start_x, src_start_y);
GL11.glVertex3f(draw_start_x, draw_start_y, draw_z);

GL11.glTexCoord2f(src_start_x, src_end_y);
GL11.glVertex3f(draw_start_x, draw_end_y, draw_z);

GL11.glTexCoord2f(src_end_x , src_end_y);
GL11.glVertex3f(draw_end_x, draw_end_y, draw_z);

GL11.glTexCoord2f(src_end_x , src_start_y);
GL11.glVertex3f(draw_end_x, draw_start_y, draw_z);

GL14.glSecondaryColor3f(0f, 0f, 0f);
GL11.glColor4f(1f, 1f, 1f, 1f);
GL11.glEnd();
}

}

Ghabry
17.02.2013, 22:42
Ach, ich weiß warum. Fiel mir gerade so der Grund ein :D.
Das ist der Trillian Ingame-Chat (wie der von Steam, aber für ICQ und co.). Der lädt eine DLL in alle Prozesse und wenn DirectX/OpenGL-Zeug verwendet wird, blendet es unten rechts einmalig eine Meldung ein...
Ist also kein Bug in deinem Programm, sondern in dem Ingame-Chat, sorry :/

So sieht er korrekt aus:

Cornix
17.02.2013, 22:55
Das freut mich zu hören. Vielen Dank für den ausgiebigen Test.

Oktorok3
18.02.2013, 14:33
Steht etwas im Out-log.txt?
Hast du einmal versucht das Programm nocheinmal herunterzuladen falls es einen Fehler bei dem Download gab?
Wie hast du die Version von Java überprüft? Durch die Kommandozeile?
Welche Grafikkarte benutzt du?
Und hast du goldenroy's Beitrag in Betracht gezogen ob es zu dem selben Problem gekommen sein konnte?

Einen Downloadfehler gab es nicht,
im Out-log steht: Mon Jan 28 22:38:37 CET 2013 INFO:Use Java PNG Loader = true
Grafikkarte: ATI Mobility Radeon HD 5430
und nein, ich öffne Java Dateien standartmäßig mit Java (nicht mit Winrar).
(auch die error-log ist leer)

Cornix
18.02.2013, 14:56
Einen Downloadfehler gab es nicht,
im Out-log steht: Mon Jan 28 22:38:37 CET 2013 INFO:Use Java PNG Loader = true
Grafikkarte: ATI Mobility Radeon HD 5430
und nein, ich öffne Java Dateien standartmäßig mit Java (nicht mit Winrar).
(auch die error-log ist leer)

Hast du einmal geprüft ob du die neueste Version von Java installiert hast?
Am besten geht das über eine Kommandozeile mit dem Befehl "java -version".


@leonhart-squall (http://www.multimediaxis.de/members/6258-leonhart-squall):
Versuch doch bitte einmal den Ordner "Resources/Graphics/System" zu öffnen und dort die Datei "UI.png" umzubenennen auf "ui.png".
Ich habe von jemandem gehört, dass das Dateisystem von Linux case-sensitive ist im gegensatz zu dem von Windows.

leonhart-squall
18.02.2013, 18:34
jup das stimmt.
Hab jetzt die Dateien ui , tileset und font (png) kleingeschrieben , wie der errorlog es gemeldet hat.
Jetzt startet es normal und die Anwendung funktioniert so wie sie soll.

16952

Cornix
18.02.2013, 18:45
Vielen Dank für den ausführlichen Test.
Ich werde diese Informationen gut gebrauchen können falls ich in Zukunft ein Projekt herausbringen will.
Es gibt doch einiges was man beachten muss bei der Plattformunabhängigkeit.

Oktorok3
18.02.2013, 22:10
Okay, ich hatte tatsächlich nicht die neueste Version, obwohl Java bei der Updatewahl dieses meinte.
Jetzt funktioniert es!

Das Tool gefällt soweit, aber ich habe auch Vorschläge, die zur Verbesserung beitragen würden->
Unpraktisch finde ich es, das man (wenn man mehr Tiles in die png Datei platziert hat) nicht auf neue Bodentiles wechseln kann, also musste ich an die jetzigen beiden Stellen neue Tiles hinsetzen um andere testen zu können: Also ein Wechsel zwischen allen verwendbaren Terrains wäre praktisch!

Weitere Funktionen:
-Tilewechsel von mehr als 2 Tiles
-Größenwechsel der Bearbeitungszone (bspw. mit dem Mausrad verstellbar)
-Speedeinstellung möglich (Wie schnell sich der Boden erhöhen/vertiefen soll)
-Mapgrößeneinstellung und Exportfunktion des aktuellen Bildes (evtl. auch speicherung der Bearbeitung als Projektdatei)

Das wären jedenfalls Funktionen, die den Komfort deutlich erhöhen würden.

Cornix
18.02.2013, 22:28
Okay, ich hatte tatsächlich nicht die neueste Version, obwohl Java bei der Updatewahl dieses meinte.
Jetzt funktioniert es!

Das Tool gefällt soweit, aber ich habe auch Vorschläge, die zur Verbesserung beitragen würden->
Unpraktisch finde ich es, das man (wenn man mehr Tiles in die png Datei platziert hat) nicht auf neue Bodentiles wechseln kann, also musste ich an die jetzigen beiden Stellen neue Tiles hinsetzen um andere testen zu können: Also ein Wechsel zwischen allen verwendbaren Terrains wäre praktisch!

Weitere Funktionen:
-Tilewechsel von mehr als 2 Tiles
-Größenwechsel der Bearbeitungszone (bspw. mit dem Mausrad verstellbar)
-Speedeinstellung möglich (Wie schnell sich der Boden erhöhen/vertiefen soll)
-Mapgrößeneinstellung und Exportfunktion des aktuellen Bildes (evtl. auch speicherung der Bearbeitung als Projektdatei)

Das wären jedenfalls Funktionen, die den Komfort deutlich erhöhen würden.

Das ganze ist nur ein reiner Test dafür wie das System aussehen könnte.
Ich wüsste nur gerne ob diese Art von Tilemap die Illusion einer 3-dimensionalen Karte glaubhaft vermittelt und auch erkennbar macht.
Im Spiel selbst würde man wohl nicht diret auf die Höhe der einzelnen Knotenpunkte Einfluss nehmen können sondern eher durch soetwas wie Attacken und dergleichen den Boden verformen können.

Oktorok3
20.02.2013, 22:25
Also, es kommt drauf an.
Nicht alles wird glaubhaft 3D-isiert, bspw. wenn ich eine starke Vertiefung mache, scheint, je tiefer ich das Loch mache, immer mehr Licht hindurchzuscheinen, anstatt dunkler zu werden (Der Boden wird ja auch beim erheben heller). Tiefe sollte dunkel und Höhe hell dargestellt werden.
Beispielbild:
http://www10.pic-upload.de/thumb/20.02.13/fm832jtke4r.png (http://www.pic-upload.de/view-18228050/Gras.png.html)

Cornix
20.02.2013, 22:33
Das liegt daran, dass der dunkle Teil nichtmehr sichtbar ist. Der Algorithmus zum berechnen der Lichtverhältnisse ist extrem simpel um die Performance so gut wie möglich zu halten. Es gibt keine richtigen Lichtquellen und keinen Schattenwurf, die Helligkeit ist im Grunde vorberechnet anhand der Differenz der Höhen von zwei benachbarten Knotenpunkten.

Im finalen Spiel würde dieses Problem dadurch verhindert werden können, indem es einen maximalen Höhenunterschied zwischen zwei benachbarten Knoten geben würde.

Das ganze muss wirklich noch durchgängig kalibriert werden glaube ich.

Cornix
13.03.2013, 16:52
Großes Update:

Es gibt eine neue Version des ganzen, ich habe eine ordentliche Benutzungsoberfläche eingebaut und auch die Algorithmen ein wenig verändert. Ich würde gerne nocheinmal darum bitten, dass alles einmal getestet werden könnte.

Zur Steuerung:
Mit der linken Maustaste kann man Terrain erhöhen oder Gras platzieren, mit der rechten Maustaste kann man Terrain abflachen oder Erdboden platzieren.
Mit den Pfeiltasten kann man die Kamera bewegen.
Mit den Tasten 1 - 9 + 0 kann man die Brush-Geschwindigkeit sofort umstellen.
Linksklick auf einen Button im Brush-Panel setzt die Linksklick-Brush, Rechtsklick auf einen Button im Brush-Panel setzt die Rechtsklick-Brush.

Hier auch nocheinmal ein Screenshot des ganzen in Aktion:
http://www.multimediaxis.de/attachment.php?attachmentid=17147&d=1363193428

Wie auch bereits zuvor: Kommentare sind gerne gesehen! Ich will dringend ein paar Meinungen dazu hören, ob sich diese Art von Kartendesign in einem Spiel durchsetzen könnte!

leonhart-squall
13.03.2013, 20:26
Funktioniert alles wie gewollt bei mir. Definitiv ist das Programm um einiges besser als noch bei deiner alten Version.
Alles sieht ein wenig schicker aus und die Optionen vereinfachen es das gewünschte Ergebnis zu realisieren. Was mir persönlich fehlt ist ein Aktionsradius, ist halt schwer einzuschätzen wie groß der Wirkungsbereich ist.
Schade natürlich das du keinen Starter für Linux mit rein nimmst , da es ziemlich unkomfortabel ist die Applikation zu starten.
Ein Shell-Script mit:


#!/bin/bash
java -jar -Djava.library.path="./" Executable.jar

würde reichen, damit man es nicht mit der Konsole öffnen muss.

Cornix
14.03.2013, 11:32
Funktioniert alles wie gewollt bei mir. Definitiv ist das Programm um einiges besser als noch bei deiner alten Version.
Alles sieht ein wenig schicker aus und die Optionen vereinfachen es das gewünschte Ergebnis zu realisieren. Was mir persönlich fehlt ist ein Aktionsradius, ist halt schwer einzuschätzen wie groß der Wirkungsbereich ist.
Schade natürlich das du keinen Starter für Linux mit rein nimmst , da es ziemlich unkomfortabel ist die Applikation zu starten.
Ein Shell-Script mit:


#!/bin/bash
java -jar -Djava.library.path="./" Executable.jar

würde reichen, damit man es nicht mit der Konsole öffnen muss.
Danke für das Feedback, es freut mich zu hören, dass es jetzt besser aussieht als zuvor.
Allerdings arbeite ich gerade dabei noch einen besseren Algorithmus für die Lichtverhältnisse zu entwickeln. Vielleicht werde ich demnächst eine Gegenüberstellung veröffentlichen können.
Was das Script angeht, tut mir sehr leid, ich hatte das völlig vergessen. Ich arbeite mit Windows 7 weshalb ich daran nichtmehr gedacht habe. Ich habe auch keinen Computer mit Linux welchen ich gerade benutzen könnte um es zu testen.
Es ist daher sehr nett, dass du die nötige Zeile hier nocheinmal hingeschrieben hast. Soetwas können die Linuxnutzer hoffentlich schnell selbst ergänzen.

Dyprax
14.03.2013, 11:34
Also das was ich getestet habe finde ich sehr gut :)
Ein Projekt, sobald das natürlich ausgereift ist, kann ich mir sehr nice vorstellen.
Weiter so.

Oktorok3
28.04.2013, 17:48
Die neue Version ist um einiges leichter zu bedienen und deutlich verbessert!
Wenn man es nicht zu sehr übertreibt, mit den Höhen und Tiefen, dann könnte ich mir durchaus solche Landschaften in einem Spiel vorstellen-> wenn es allerdings zu hoch/tief wird, sollte sich das dann auch auf die Laufgeschwindigkeit auswirken.
PS: Wenn man die kreierte Karte auch mit einem Zusatzbutton speichern könnte, wäre das natürlich auch eine gute Sache!