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

Aktuelle Zeit: Fr Jul 11, 2025 21:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 3D Objekt rastern > Voxel
BeitragVerfasst: Di Feb 12, 2013 15:56 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,

ich muss ein beliebiges 3D Modell von oben nach unten rastern können. D.h. das resultat muss je slice ein 1-Bit Image werden, wo 0=Ausserhalb und 1=Innerhalb des meshes ist. Ich muss mir die Infos auch nirgends merken, denn diese werden in echzeit an eine Hardware ausgegeben. Nun zum Ansatz..
Hier: http://http.developer.nvidia.com/GPUGem ... _ch30.html
bissl weiter unten bei "Inside-Outside Voxelization" hab ich was nettes gefunden. Undzwar wird hier der StencilPuffer dazu genutzt ein Modell zu Voxeln.. Das erscheint mir als der einfachste weg.

Mein Problem ist allerdings das ich mit dem Stencil-Buffer bisher noch nie was gemacht habe und auch nicht weiß wie ich da jetzt vorgehen sollte.

Also nochmal zusammenhängend: Ich habe ein definierbares Gitter (z.b. 60x60), wo ein Mesh durchfährt und für jedes Gitterelement brauch ich ne 1 oder 0 jenach dem ob innerhalb oder ausserhalb des Meshes.

Jemand ne Idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Di Feb 12, 2013 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Wenn es ohne OpenGL auch gehen soll, ist vermutlich das leichteste dir deine Voxel in die BoundingBox vom Objekt zu legen und für jeden Voxel zu testen ob er innerhalb oder ausserhalb des Meshes liegt.

Das geht bei geschlossenen Meshes sehr einfach indem du einen Strahl vom Voxel in eine beliebige Richtung schießt und zählst wie oft er sich mit dem Objekt schneidet, ist es eine gerade anzahl ist der Punkt innerhalb des Objektes, ist es eine ungerade zahl ist er ausserhalb :)

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Di Feb 12, 2013 17:29 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
..wie immer hab ich's eben doch selbst hinbekommen :-D.. so schlimm ist das ja doch nich mit dem Stencil Puffer 8)
Funktioniert quasi "fast" so wie beim StencilSchatten...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Di Feb 12, 2013 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Wenn du aber immer nur die Near Plane ein wenig höher schiebst, funktioniert das aber nicht mit jedem beliebigen Objekt.... oder?

Also als ganz simples beispiel, bei einer Pyramide funktioniert diese Art nicht, weil du dann in jedem Layer immer nur die Grundfläche sehen würdest, oder missverstehe ich das Prinzip grade?

Aya

EDIT: Hab grad nicht dran gedacht das man ja mit Front/Back Face Operationen Arbeiten kann bei Stencil.. sorry, mein Denkfehler :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Di Feb 12, 2013 17:48 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
:D ... hier bissl code:
Code:
  1.  
  2.   glColorMask(false, false, false, false);
  3.   glDepthMask(false);
  4.  
  5.   glEnable(GL_STENCIL_TEST);
  6.    glStencilFunc(GL_ALWAYS, 1, $FFFFFFFF);
  7.   glEnable(GL_CULL_FACE);
  8.   glCullFace(GL_BACK);
  9.  
  10.   glFrontFace(GL_CCW);
  11.   glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
  12.   DrawObject;
  13.  
  14.   glFrontFace(GL_CW);
  15.   glStencilOp(GL_KEEP, GL_KEEP, GL_DECR);
  16.   DrawObject;
  17.   glDisable(GL_STENCIL_TEST);
  18.  
  19.  glDisable(GL_CULL_FACE);
  20.  glDepthMask(true);
  21.  glColorMask(true, true, true, true);
  22.  
  23.  glReadPixels(0 ,0 , Width, Height, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, @DataBuffer[0]);
  24.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Mi Feb 13, 2013 18:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Errr, wenn das funktioniert kannst du das ganze auch mit Transform Feedback lösen....

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D Objekt rastern > Voxel
BeitragVerfasst: Mi Feb 13, 2013 20:12 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Aber gravierender Nachteil:

Funktioniert nicht auf "nicht aktueller" HW/Graka...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.010s | 15 Queries | GZIP : On ]