Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Vertexausrichtung

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 14.01.2014, 15:54    Titel: Vertexausrichtung Antworten mit Zitat

Hallo,

ich hätte mal ebend eine Frage zu openGL / openB3D. Zwar habe ich einen 3D Array mit Punkten den ich gerne in Polygonen darrstellen würde. Da Cube-Entitys bei der Masse etwas zu langsam sind, hab ich mir überlegt die Mesh selbst zu erzeugen, die dann nur noch aus der Oberfläche aller Würfel besteht.
Das funktioniert auch schon und geht relativ fix (Wenn man einen Punkt entfernt, updatet er die Mesh in ~0.03s und rendert mit > 1000 FPS bei 32*32*32).

Aber Folgendes ist unklar. Wie rum muss ich die Vertexe zu Polygonen vernetzen? Sobald da Licht drauf fällt, sieht es aus wie ein unscharf beleuchteter Schwamm mit Dellen. (Als Wireframe hauts hin) Ich glaube die Vertexes sind falschrum ausgerichtet und noch dazu ist die komplette Mesh invertiert und ich muss sie flippen.
Also, wie zeichnet man richtig? Hängt es damit zusammen, dass ich pro Fläche 4 Vertexes benutze obwohl ja pro Ecker einer reicht?

Danke lächeln

PS.: Später wenn ich am PC bin werde ich den Quellcodeteil mit einfügen.


Ok da bin ich doch mal sofort aus dem Bett gekrochen grinsen Der Code sieht glaube schlimmer aus als er ist, er läuft halt das Array durch und sieht nach wo die Nachbarn fehlen um dort eine Würfelfläche zu zeichnen.

Hier das Problem. Die Oberfläche ist halt totaler Matsch, wenn man
einzelne Würfel von der Oberfläche entfernt ist es noch schlimmer:



Als Wireframe ist aber alles ok:




Code:
Sub chunkT.updateMesh()

   Dim As Integer scaleFactor = 10
   Dim As Integer v01, v02, v03, v04

   With This
      
      
      
      'If .mesh      <> 0 Then freeEntity(.mesh)
      'If .surface <> 0 Then freeEntity(.surface)
      
      
      .mesh   = createMesh()
      .surface = createSurface(.mesh)
      
      For y As UInteger = 0 To 32
         For x As UInteger = 0 To 32
            For z As UInteger = 0 To 32
               If .memory(x, y, z) Then

                  If .memory(x - 1, y, z) = 0  or x = 0 Then
                     v01 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     AddTriangle (.surface, v01, v02, v03)
                     AddTriangle (.surface, v02, v04, v03)
                  EndIf
               
                  If .memory(x + 1, y, z) = 0 or x = 32 Then
                     v01 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     AddTriangle (.surface, v03, v02, v01)
                     AddTriangle (.surface, v03, v04, v02)
                  EndIf
               
                  If .memory(x, y, z - 1) = 0 Or z = 0 Then
                     v01 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     AddTriangle (.surface, v01, v02, v03)
                     AddTriangle (.surface, v02, v04, v03)
                  EndIf
               
                  If .memory(x, y, z + 1) = 0  Or z = 32 Then
                     v01 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     AddTriangle (.surface, v03, v02, v01)
                     AddTriangle (.surface, v03, v04, v02)
                  EndIf
                  
                  If .memory(x, y - 1, z) = 0 Or y = 0 Then
                     v01 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor - (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     AddTriangle (.surface, v01, v02, v03)
                     AddTriangle (.surface, v02, v04, v03)
                  EndIf
                  
                  If .memory(x, y + 1, z) = 0 Or y = 32 Then
                     v01 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v02 = AddVertex(.surface, x * scaleFactor + (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     v03 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor + (scaleFactor/ 2))
                     v04 = AddVertex(.surface, x * scaleFactor - (scaleFactor/ 2), y * scaleFactor + (scaleFactor/ 2), z * scaleFactor - (scaleFactor/ 2))
                     AddTriangle (.surface, v03, v02, v01)
                     AddTriangle (.surface, v03, v04, v02)
                  EndIf
                  VertexTexCoords .surface,2, y, x
               End If
            Next   
         Next
      Next
      flipmesh(.mesh)
      UpdateNormals(.mesh)
      MeshCullRadius(.mesh, 0)
   End With

End Sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 14.01.2014, 16:25    Titel: Antworten mit Zitat

Ung gleich noch was, ... wenn ihr wisst wie ich da Texturen draufbekomme, so dass es kleine Tiles werden, bitte vortragen grinsen Bzw habe ich auch noch keine Idee wie ich testen könnte wo man hingeklickt hat. Könnte man eigentlich nur von den Vertextes ableiten? verwundert

Gerne hau ich für gute Ideen auch den ganzen Anstaz über den Haufen. Habe es schon mit CSG probiert aber das ist irre langsam.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 15.01.2014, 16:38    Titel: Antworten mit Zitat

Kommt schon grinsen Ich bekomms nicht hin. Also um das nochmal runterzubrechen. In welcher Reihenfolge muss ich die Vertexe triangulieren? Ich habe jetzt OpenGL Tuts angesehen und es probiert mit diesen Listen, aber die werden von der Engine beim Rendern ausgelassen.

Und hab herrausgefunden, wenn man den ersten und letzten Punkt eines ganzen Quadrats vertauscht, flipt die Mesh. Es muss eine Reihenfolge geben aber ich kanns unmöglich durchtesten und finde dazu nicht wirklich etwas.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4147
Wohnort: ~/

BeitragVerfasst am: 15.01.2014, 17:31    Titel: Antworten mit Zitat

Mehr als hier steht, kann ich dir über die Reihenfolge leider nicht sagen.
_________________
Meine Großeltern waren als junge Menschen sehr modern - sie hatten schon damals in der Badewanne Email.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 15.01.2014, 18:35    Titel: Antworten mit Zitat

Danke lächeln Ja so eine Liste habe ich schon probiert aber die wird wie gesagt nicht gerendert. Also ich hab den opengl Header nochmals geincludet und einfach so eine Liste angelegt, kam nicht in die Ausgabe von openb3d mit rein.
Ich habe mir jetzt auch mal den Source von openb3d besorgt, teilweise kapier ich das aber habe auch Probleme mit der Syntax von C++ und mit OpenGL direkt. Ich werde mal probieren das zu kompilieren mit mingw, eventuell schaffe ich es da was Eigenes reinzubasteln. GL_TRIANGLE_STRIP klingt nämlich sehr vernünftig lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storky



Anmeldungsdatum: 06.01.2013
Beiträge: 68

BeitragVerfasst am: 15.01.2014, 21:29    Titel: Antworten mit Zitat

Ich bekomm openb3d nicht kompiliert. Unter Linux war es kein Problem aber unter Windows (und da möchte ich entwickeln) ist irgendwas faul mit glee. Zuerst hat es gefehlt, dann hab ich es geladen, die *.lib in den lib Folder gehauen (keine .a), den Header in include. Nun findet er beim Linken aber die Exports nicht.
Hab dann versucht unter Linux Crosscompiling zu betreiben aber da findet er auch glee nicht und wär am Ende das selbe. Man verwundert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz