Aktuelle Zeit: 23.08.2017 23:18

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Voxel-Darstellung aus dreidimensionalem Array
BeitragVerfasst: 16.04.2017 20:00 
Offline

Registriert: 23.06.2013 06:26
Okay, des ist jetz so ziemlich das zweite Code-Snippet was ich hier veröffentliche...

Für Leute, die Grafikkarten verabscheuen und stattdessen lieber 354GHz Einkernprozessoren* bevorzugen habe ich nun die ultimative Lösung zur Darstellung von 3D-Grafiken gefunden - wenn auch extrem langsam, und ohne Polygone.

*Jetzt auch in gethreadeter Version.

Hier jetzt also eine kleine Voxeldarstellungsengine.
Bewegung erfolgt via IJKL, sich umgucken kann man via WASD.
LShift steigt nach oben, LCtrl sinkt nach unten.

Die vertikale Blickrichtung ist aufgrund von starken Verzerrungen auf 30° in beide Richtungen limitiert.
Die Bilddatei für das Sprite wird als mehrschichtiges, quadratisches Modell behandelt, in etwa wie eine MRT-Aufnahme, wobei dort $FF00FF als durchsichtig gilt.

Auch wenn der Code nicht besonders gut ist, so könnte er dennoch einige Leute interessieren, hoffe ich zumindest.

Anmerkung: Der Debugger verringert die Ausführungsgeschwindigkeit erheblich, also vorher ausschalten.



Im .zip befinden sich SRT[Nummer], der framebasierte, konventionelle Raytracer, und SRT[Nummer]T, die threadbasierte Version mit dynamischen Updates.
Letztere könnte bei einigen Konfigurationen nicht funktionieren, und ich bin mir immer noch nicht ganz sicher, warum das so ist.


Screenshot vom gethreadeten Renderer auf vierfacher Auflösung mit 16facher Genauigkeit:
Bild


Link zum aktuellsten .zip:
Klick!

_________________
Wer braucht schon Unicode? PB5.24LTS


Zuletzt geändert von Jan125 am 18.04.2017 09:43, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Voxel-Darstellung aus dreidimensionalem Array
BeitragVerfasst: 18.04.2017 01:17 
Offline

Registriert: 18.08.2012 19:18
Wohnort: Worms
hey , coole sache ;)
getestet funktioniert wunder bar.

ggf. kann man das ja auch als effekt für ein spiel benutzen.

_________________
i7,12gb ram , Windows 10 ,Purebasic 5.50


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Voxel-Darstellung aus dreidimensionalem Array
BeitragVerfasst: 18.04.2017 09:14 
Offline

Registriert: 23.06.2013 06:26
Oder für ein Spiel an sich.
Momentan arbeite ich an einer Verschönerung des Codes, und auch an einer Thread-basierten Version mit dynamischen Bildupdates.

Funktioniert beides wunderbar auf meinen Maschinen (eine Workstation mit'm Xeon E31230, und 'n Tablet mit 'nem Zweikern-Atom), das Gethreadete jedoch nicht auf dem PC einer Internetbekanntschaft.
Könnte am direkten Bufferzugriff liegen.

Wie auch immer: Beide Versionen sind nun als .zip im Post 1 zu finden, wobei ich SRT7T lieber nicht angucken würde. Grauenvoller Spaghetticode.

_________________
Wer braucht schon Unicode? PB5.24LTS


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Voxel-Darstellung aus dreidimensionalem Array
BeitragVerfasst: 19.04.2017 20:46 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Coole Idee,

vielleicht kannst du dieses Include oder Codeteile daraus gebrauchen: Drawing3D - Draw-Befehle für 3D-Szenen
(Es entstand auch aus der Irrwitzigen Idee, man bräuchte keine Grafikkarte für 3D)

Noch als Hinweis:
Code:
For i = 0 To Random(500000)
  Volume(Random(ArraySize(Volume(), 1)), Random(ArraySize(Volume(), 2)), Random(ArraySize(Volume(), 3))) = $FFFFFF
Next
Dieser Code funktioniert nicht so wie ich denke das du es denkst.
Mit jeder Iterationsschleife wird Random(500000) neu berechnet, sommit kann es im ersten Durchlauf (i=0) zB 2534 sein, dann kommt Next und i = 1 aber auch die To-Grenze wird neu Errechnet und könnte dann nur noch 100 sein oder gar "zufällig" 0 und dann bricht die schleife schon ab. Hier ein Beispiel:
Code:
Procedure.i MyRandom(Value.i)
   Protected Random = Random(Value)
   Debug "MyRandom = "+Random
   ProcedureReturn Random
EndProcedure

Define I.i

RandomSeed(0)
For I = 0 To MyRandom(10)
   Debug "I = "+I
Next


Gleiches gilt übrigens für:
Code:
  For Z = 0 To SpriteWidth(Sprite)/SpriteHeight(Sprite)-1
    For Y = 0 To SpriteHeight(Sprite)-1
      For X = 0 To SpriteHeight(Sprite)-1
Hier wird mit jedem Voxel das Sprite erneut gesucht und SpriteHeight berechnet, oder sogar "langsam" dividiert.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Voxel-Darstellung aus dreidimensionalem Array
BeitragVerfasst: 20.04.2017 08:36 
Offline

Registriert: 23.06.2013 06:26
Hoppla, das Random() hatte ich ganz vergessen, wohl ein kleiner Gehirnaussetzer meinerseits. :>

Da die Übertragung vom Sprite in den Array nur einmal ausgeführt wird, hatte ich Schnelligkeit nicht grade als Hauptziel, soll eh nur 'ne Demo sein - erstmal. :P

Drawing3D hatte ich mir schonmal ganz am Anfang angeguckt, aber es noch nicht wirklich ausprobiert. Muss ich bei Gelegenheit mal machen!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye