Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 12:11

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jun 17, 2013 17:44 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Servus,

vorab, dachte für den Einstieg wäre eine Art Minecraft Clone recht einfach. Naja jetzt sehe ich, dass es doch nicht so leicht wird.

Wie verwaltet man die Objekte die gezeichnet werden sollen? Durch einfache Techniken (Octree / Frustum / Occlusion Culling etc.) kann man ja schon viel ausschließen. Aber gerade bei Minecraft sind viele Blöcke vorhanden. Angenommen ich habe 100.000 Blöcke, was ja eigentlich nicht viel ist (für das Spiel). Der Octree geht ja noch recht schnell, aber das sortieren für so viele Blöcke dauert recht lange (ich verwende hier den Bubbelsort, gibt bestimmt auch effizientere).

Mein Idee für meinen Minecraft Clone.
Dachte mir, man erstellt eine Liste wo alle Objekte enthalten sind. Dann gibt es einen Thread der sich um das Frustum kümmert und schaufelt die Objekte von A nach B die sich im Sichtbereich befinden. Anhand der Frustum Liste, erstellt der nächste Thread einen Octree. Der Octree rendert die Daten dann per Culling. So in der Art habe ich mir das ganze vorgestellt :).

Wie wird so was in er Regel bewerkstelligt?
Ich denke das verschiedene Threads im Hintergrund die Arbeit erledigen müssen.

- Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 17, 2013 19:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bubblesort. Das ist O(n²). Such dir mal einen Sortieralgorithmus, der besser zu deinem Problem passt, Quicksort ist erstmal eine generische Antwort. Je nach dem kann auch Merge- oder Heapsort besser sein. Die sind alle O(n log n), und damit deutlich effizienter. Besonders bei vielen Blöcken.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jun 18, 2013 10:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Anhand der Frustum Liste, erstellt der nächste Thread einen Octree.
Wozu zwei threads, wenn der eine erst anfangen kann, wenn der andere fertig ist und nichts mehr zu tun hat?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jun 18, 2013 20:54 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Der Kollege hier hat einen schönen Artikel über seine Erfahrungen mit einem Minecraft Klon geschrieben.
Habe mir da auch einiges abgeschaut. Sein Fazit: Octree taugt für diesen Anwendungsfall kein Stück. Das Rendern war super fix, aber der Zugriff auf einzelne Blöcke hat dem ganzen recht schnell das Genick gebrochen.

Ich mache es ziemlich genau so wie es bei Minecraft gemacht wird. Ich packe 16x16x16 Blöcke zusammen in eine Displayliste/VBO. Diese Strucktur nenne ich Slice. Je nach Höhe der Welt werden mehrere Slices vertikal angeordnet und bilden einen Chunk, der alle Blockinformationen vorhält und für das Laden/Speichern zuständig ist. Die Klasse World hat eine HashMap, die über einen Hash der X und Z Koordinaten indiziert wird und die Chunks beinhaltet. Wenn nun ein Block geändert wird, wird der entsprechende Slice zum Neuerstellen vorgemerkt und in einem der nächsten Frames erstellt. Sobald er valide ist wird die alte Displaylist durch die Neue ersetzt und die alte freigegeben.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Aug 04, 2013 19:55 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Quicksort ist im besten und im mittleren Fall O(n log n) ABER im schlechtesten Fall ebenfalls O(n²).

Falls du nicht weißt was das heißt:
http://de.wikipedia.org/wiki/Landau-Notation


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Aug 04, 2013 21:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Heapsort ist günstiger im Worst Case, und genauso gut im Average Case.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Aug 05, 2013 13:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
Wenn du einen Minecraft-Klon programmieren willst:

Ich kann dir den sourcecode von meinem alten Projekt "mina" zur Verfügung stellen wenn du willst, ich hab ein Octree-System zur Datenverwaltung benutzt und praktisch alle nötigen Funktionen und Codes zum Editieren der Landschaft bis zur Texturverwaltung eingebaut. Vielleicht findest du da den ein oder anderen nützlichen Codeblock.

Hier mal der Link zum Projekt.
Fals Intresse besteht...jederzeit =D

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Aug 05, 2013 17:39 
Offline
DGL Member

Registriert: Di Mai 10, 2011 19:38
Beiträge: 63
Hey Ida, wäre echt cool wenn ich dort mal einen Blick reinwerfen könnte.
Nicht um den Code zu kopieren sondern eher zu schauen wie du das ganze umgesetzt hast.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]