DGL
https://delphigl.com/forum/

@Adventure-3D-Outdoor-Engine
https://delphigl.com/forum/viewtopic.php?f=14&t=7417
Seite 1 von 2

Autor:  Lord Horazont [ Sa Apr 12, 2008 10:15 ]
Betreff des Beitrags:  @Adventure-3D-Outdoor-Engine

Hi Rüdiger,

Das Projekt klingt auf alle fälle interessant.
Mich würde interessieren, wie du die Fenster erzeugst. Verwendest du SDL oder die VCL? Wenn du die VCL verwendest, könntest du ernsthaft überlegen, ob du vielleicht zumindest für das Hauptprojekt (also nicht den Editor), SDL verwenden. Das würde dir die Portierung auf Linux und ähnliches erleichtern. Und Linux-Spiele erfreuen sich beliebtheit, in Windows gehen die meisten besseren nicht-kommerziellen Spiele einfach in der Masse unter.

Gruß Lord Horazont

Autor:  Rüdiger [ Sa Apr 12, 2008 10:58 ]
Betreff des Beitrags: 

Ich habe eine einfache Nachfahrenklasse von TClass abgeleitet - also VCL. Mit SDL habe ich mich noch nicht beschäftigt, kann ich mir aber mal angucken - ist ne gute Idee. Auf jeden Fall werde ich versuchen, im weiteren nicht Windows-spezifisch zu arbeiten.


Viele Grüße,

Rüdiger

Autor:  Lord Horazont [ Sa Apr 12, 2008 11:19 ]
Betreff des Beitrags: 

Rüdiger hat geschrieben:
Ich habe eine einfache Nachfahrenklasse von TClass abgeleitet - also VCL. Mit SDL habe ich mich noch nicht beschäftigt, kann ich mir aber mal angucken - ist ne gute Idee. Auf jeden Fall werde ich versuchen, im weiteren nicht Windows-spezifisch zu arbeiten.


TClass? Normalerweise leitet man doch von TObject ab, oder? Und TObject allein macht noch keine VCL. VCL beginnt erst ab ungefähr TComponent und TBitmap und so. TObject findet man in jeder Object Pascal Sprache (also auch FPC).

Gruß Lord Horazont

Autor:  Rüdiger [ Sa Apr 12, 2008 11:27 ]
Betreff des Beitrags: 

Oh, verdammt. Hab ich nicht aufgepasst! Es muss TForm heißen - also wie gesagt es ist einfach gehalten. Wenn an meine Engine kein Fensterhandle übergeben wird, dann erschafft sie automatisch ein Standardfenster.

Autor:  Lord Horazont [ Do Mai 01, 2008 19:50 ]
Betreff des Beitrags: 

Wegen dem Himmel solltest du mal über eine Skycube/Skydome-Technik nachdenken. Eine solche Ebene macht vom Aussehen her immer wenig sinn.

Du könntest dich auch, wenn du das noch weiter vertiefen willst, mit prozeduralen Wolkentexturen befassen, dazu gibt es unter den Links im Wiki sicher etwas.

Gruß Lord Horazont

Autor:  Rüdiger [ Fr Mai 02, 2008 11:03 ]
Betreff des Beitrags: 

Der Übergang ist schrecklich, ich weiß. Weiß nicht so recht, wie ich das verbessern kann. Aber ich bin mir nicht sicher, ob ich variable Wolken implementieren möchte. Ich weiß nicht, ob dann der "Gesamteindruck" stimmt. Schließlich wollte ich auch kein Licht/Bumpmapping verwenden. Sieht dann zwar alles sehr "altmodisch" aus, aber ist dann weniger Arbeit ;)

Achja, danke übrigens für dein mehrmaliges Feedback, Lord Horazont!


Viele Grüße,
Rüdiger

Autor:  WhiteHunter [ Mo Mai 19, 2008 19:53 ]
Betreff des Beitrags: 

Hey,

aus Interesse hab ich mir mal die Techdemo geladen.
Aber wenn ich versuche zu starten sehe ich nen schwarzen Bildschirm (links oben ein paar Debuginfos), einen weißen Punkt links und diese Meldung "OpenGL hat folgenden Fehler erzeugt: invalid operation". :|

Intel Q9300
4GB RAM
Geforce 8800GTS 512 @175.16
WinXP Home

MfG

Autor:  Rüdiger [ Mo Mai 19, 2008 21:16 ]
Betreff des Beitrags: 

Hmm...
Das ist der OpenGL-Fehler Handler. OpenGL hat also irgendwo den Fehlercode erzeugt. Komisch, ich hab ne 8600 GTS, bekomm den Fehler aber nicht. Ich müsste mir mal ein besseres Bugtracking-System einfallen lassen.

Trotzdem danke für das Interesse, tut mir leid, dass es nicht funktioniert hat.

Viele Grüße,
Rüdiger

Autor:  WhiteHunter [ Mo Mai 19, 2008 23:11 ]
Betreff des Beitrags: 

Ich hab mir mal deinen Wassershader angeschaut. Ich glaube das Problem hängt mit meinem Treiber zusammen. Zumindest seit 175.16 scheint der GLSL-Compiler was durcheinander zu werfen, denn wenn ich mehr als 24 varying-Floats habe, beschwert er sich mit "Vertex attribute output count exceeds hardware limits.", obwohl laut Hardwareinfo 16 attribute floats und 60 varyings möglich sein sollten, und baut logischerweise kein Programm zusammen, was dann wohl zu dem Fehler führt.
Glücklicherweise lässt sich der Zugriff auf eine Texturmatrix bei dir in den Vertexshader verschieben und das Ergebnis wahlweise mit einem varying vec2 oder gl_TexCoord[2] übertragen (afaik haben alle GLSL-Karten min. 4 TUs). Damit ließ sich die Sache dann auch starten.

So sieht es als Grundlage ganz gut aus, wenn man bedenkt, was schon alles dahintersteckt. Ich hab mit Blick in den Himmel so etwa 40fps. Der sieht natürlich auch noch nicht umwerfend aus, aber da geht bestimmt noch was. Den Regeneffekt find ich interessant, wie hast du den realisiert?

Die Vegetation und das Haus sehen in dieser Form noch reichlich seltsam aus (und kontraststark), aber wenn man komplexere Levels mit richtigen Models zusammenbastelt, wird das sicher auch noch besser aussehen.
Und nette Idee, der Tag-Nacht-Wechsel, wenn du jetzt natürlich noch was Leuchtendes im Level hättest... ;)

MfG

Autor:  Lord Horazont [ Di Mai 20, 2008 13:35 ]
Betreff des Beitrags: 

Ich bekomme auch nach unregelmäßigen Zeiten nen invalid operation. Schade, ich hätte mir das gerne genauer angeschaut.

Gruß Lord Horazont

Autor:  gucky [ Di Mai 20, 2008 13:40 ]
Betreff des Beitrags: 

Dito.. ich kann es nichtmal starten..

Autor:  Rüdiger [ Di Mai 20, 2008 16:05 ]
Betreff des Beitrags: 

Schade, dass es nicht so glatt läuft, wie ich dachte. Habt ihr ne Ahnung, wo ich mit der Suche nach dem Fehler anfangen könnte? Bei mir funktioniert es. Und invalid operation ist halt ein OpenGL-Fehler.


@Lord Horazont
Vielleicht könntest du dir den Wassershader mal anschauen. Der beruht auf deinem Tutorial. Vielleicht liegt der Fehler ja da, also die Quelle für diese "Inkompatibiltät".

@WhiteHunter

Merkwürdig finde ich die Performance bei dir. Ich habe minimal 60 Frames/s und wenn ich gen Himmel gucke, dann etwa 170 F/s. Vielleicht funktioniert aus irgendeinem Grund mein Multithreading bei dir nicht, wer weiß. Obwohl das schon merkwürdig wäre... Die Wolkentextur wird in einem eigenem Thread behandelt, weil das sehr rechenintensiv ist, Single-Core User werden glaub ich gar keine passablen Raten erwarten können - in dem Testlevel.

Den Himmel fand ich schon ganz gut, soll aber noch besser aussehen. Mit dem Regen bin ich eigentlich sehr unzufrieden^^. Das sind einfach nur zufallsgenerierte GL_LINES, die ein wenig transparent geblendet werden und mit konstanter Beschleunigung, also quadratische Ortsänderung nach unten fallen. Diese sind unabhängig von der Bewegung, sonst dünnt der Regen zu sehr aus, wenn man sich bewegt.
Das Wetter finde ich schön, wenn man von "weather bad" auf "weather good" umschaltet. Wenn sich dann der Himmel aufklart.
Vegetation und Models sehen wirklich scheiße aus, das liegt daran, dass das Model so furchtbar texturiert wurde. Und die Grastextur hab ich auch selbstgemacht^^ ziemlich blöd sieht die aus. Alphatesting benutze ich da übrigens, um die Z-Sortierung nicht machen zu müssen. Vielleicht ist da für die Zukunft ein "Verwisch"-Shader ganz gut, um die Kanten vielleicht nicht so hart wirklichen zu lassen.

Den Tag/Nachtwechsel sieht man übrigens mit "time fast". Allerdings sieht das nicht so gut aus, deswegen hatte ich es nicht erwähnt.


Viele Grüße,
Rüdiger

Autor:  Lord Horazont [ Di Mai 20, 2008 16:17 ]
Betreff des Beitrags: 

Also, ein Invalid Operation tritt bei Shadern nur auf, wenn du z.B. versuchst, mit glUniform* oder glVertexAttribute* werte zu setzen, ohne dass der entsprechende Shader gebunden ist.

Ansonsten... Such mal im Wiki nach GL_INVALID_OPERATION, vielleihct findest du da was hilfreiches.

gruß Lord Horazont

Autor:  WhiteHunter [ Di Mai 20, 2008 19:13 ]
Betreff des Beitrags: 

Lord Horazont hat geschrieben:
Also, ein Invalid Operation tritt bei Shadern nur auf, wenn du z.B. versuchst, mit glUniform* oder glVertexAttribute* werte zu setzen, ohne dass der entsprechende Shader gebunden ist.

dglwiki:[wiki]glUseProgram[/wiki] hat geschrieben:
GL_INVALID_OPERATION wird generiert wenn programObj nicht vom Typ GL_PROGRAM_OBJECT ist.
GL_INVALID_OPERATION wird generiert wenn das Programm nicht installiert werden konnte.

Versuch mal nen Program zu erzeugen und ohne es zu linken (oder von mir aus mit einem fehlerhaften Shader versuchen) glUseProgram() mit der ProgramID. ;)

Zitat:
Merkwürdig finde ich die Performance bei dir. Ich habe minimal 60 Frames/s und wenn ich gen Himmel gucke, dann etwa 170 F/s.

Hab mal V-Sync ausgeschaltet. Die 40 habe ich nur, wenn ich Landschaft und Himmel anschaue. Wenn ich nur innen Himmel gucke, habe ich auch ~200.

Zitat:
Das sind einfach nur zufallsgenerierte GL_LINES, die ein wenig transparent geblendet werden und mit konstanter Beschleunigung, also quadratische Ortsänderung nach unten fallen.

Wirkte gar nicht so. Aber dürfte immerhin sehr performancefreundlich sein.

Im Übrigen scheint die Engine sich nicht richtig zu beenden, wenn man statt Escape Alt+F4 drückt, zumindest die Maus wird nen bisschen blöd festgehalten.
Ich würde ein Log einbauen, das zeigt, was beim Initialisieren so schief gelaufen sein könnte. Da könntest du auch die Shaderlogs ausgeben lassen.
Ein bisschen Beispielcode von mir:
Code:
  1. function TglShaderManager.GetInfoLog(Handle: GLHandle): string;
  2. var
  3.   Len, Len2: Integer;
  4. begin
  5.   Result := '';
  6.   if glIsProgram(Handle) then
  7.   begin
  8.     glGetProgramiv(Handle, GL_INFO_LOG_LENGTH, @Len);
  9.     SetLength(Result, Len);
  10.     glGetProgramInfoLog(Handle, Len, Len2, @Result[1]);
  11.   end
  12.   else if glIsShader(Handle) then
  13.   begin
  14.     glGetShaderiv(Handle, GL_INFO_LOG_LENGTH, @Len);
  15.     SetLength(Result, Len);
  16.     glGetShaderInfoLog(Handle, Len, Len2, @Result[1]);
  17.   end;    
  18.  
  19. end;


Und noch viel Glück bei der Fehlersuche...

MfG

Autor:  Flash [ Di Mai 20, 2008 22:08 ]
Betreff des Beitrags: 

Wieso sind denn die Wolken so rechenintensiv. Die musst du doch nur einmal erzeugen und kannst die dann immer nur verschieben.

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/