OpenGL glDrawArrays zeichnet nicht richtig?
lima-city → Forum → Programmiersprachen → C/C++ und D
bild
binde
code
darstellen
datum
dreieck
dritte parameter
dritten parameters
erneut speichern
http
kugel
menge
modeln
normalen array
parameter
performance
problem
sparen
url
zweite normalen url
-
Wenn ich ein Vertex/Normalen Array erzeuge und binde, wenn man das so nennt
glNormalPointer(GL_FLOAT, 0, normals); glVertexPointer(3, GL_FLOAT, 0, vertices);
und ich es mit
glDrawArrays(GL_TRIANGLES, 0, 120);
darstellen will erzeugt es nur schei*e (soll eine Kugel sein):
http://krisi12345.lima-city.de/Screen-Pics/opengl-fehler1.png
Die Daten der Kugel sind hier (erste Zeile Vertex und zweite Normalen):
http://krisi12345.lima-city.de/Model.txt
Woran liegt das??? Und wie genau berechnet man den Wert des dritten Parameters von glDrawArrays? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich weiß nicht, woher du die Daten für die Vertices bekommst aber ich würde dir aus Performance-Gründen empfehlen, dass du die Arrays indizierst. Dazu solltest du dich mal über die Funktionalität von glDrawElements informieren. Auf diese Weise würdest du eine menge Speicherplatz sparen. Was dein Bild angeht vermute ich, dass du die Vertices nicht in der Reihenfolge abgespeichert hast, dass sie als die richtigen Dreiecke ausgelesen werden können. Bedenke, dass jeder Vertex für mehrere Dreiecke benötigt wird und du die Daten direkt eingibst, was bedeutet, dass du ihn für jedes Dreieck erneut speichern musst.
Der dritte Parameter von glDrawArrays gibt an, wieviele Vertices eingelesen werden. Das bedeutet bei GL_TRIANGLES, dass pro Dreieck 3 Vertices eingelesen werden. 120 und GL_TRIANGLES erzeugt also 40 Dreiecke. Damit ist klar, dass du abhängig von der Anzahl N der Dreiecke, die du mit GL_TRIANGLES zeichnen willst, als Parameter für glDrawArrays der Wert (3 * N) übergeben werden muss. -
Hab das problem grad gelöst:
Beim öffnen haben sich die Daten verschoben also war der anfang bei 1 und nicht bei 0.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage