OpenGL 3.2 keine Bildausgabe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schau dir auf Wikipedia und Co. nochmal die Matrixmultiplikation an.
    Dann wird dir ganz schnell klar, warum hier eben A*B ≠ B*A.
    Schnellzusammenfassung:
    Sieht man jede Spalte bzw. jede Reihe einer Matrix als Vektor an, und gibt die Position eines Datenpunkes in der Matrix mit (Reihe | Spalte) an, dann gilt für jeden Datenpunkt in M=A*B:
    M(Reihe|Spalte) = (A(Reihe)*B(Spalte)).

    Quellcode

    1. 1.0 0.0 60.0 2.0 0.0 0.0 1*2+0*0+60*0 1*0+0*2+60*0 1*0+0*0+60*2 2 0 120
    2. 0.0 1.0 45.0 * 0.0 2.0 0.0 = 0*2+1*0+45*0 0*0+1*2+45*0 0*0+1*0+45*2 = 0 2 90
    3. 0.0 0.0 1.0 0.0 0.0 2.0 0*0+0*0+1*0 0*0+0*2+1*0 0*0+0*0+1*2 0 0 2

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von lasergans ()

  • Ok, das hab ich jetzt auch verstanden (und eine Klasse dafür geschrieben).

    Jetzt eine Frage zur Organisation.
    Da mit glGenBuffers() die Anzahl der Buffer (z.B. Vertex) angegeben werden muss, braucht man dann immer eine Klasse, die den Überblick (z.B. ein Array) über alle zu rendernden Objekte haben muss?
  • Du solltest Dir die Buffer Objekte, die Du erzeugst, natürlich irgendwo merken. Du brauchst sie ja schliesslich jedes Mal beim Zeichnen und muss sie beim Beenden auch wieder freigeben.

    Ich benutze üblicherweise nochmal eigene Klassen für VBOs und FBOs, was die Handhabung noch etwas vereinfacht.

    Es kommt natürlich drauf an, wieviele Objekte Du verwaltest. Wenn es viele sind, oder die Anzahl dynamisch variiert, spricht ja nichts dagegen, das ganze in Arrays (oder Dictionaries) zu halten.

    Wenn Du komplexere Szenen haben willst, wäre auch ein Scene-Graph eine gute Datenstruktur (en.wikipedia.org/wiki/Scene_graph)
    C++
  • Ich habe mir eine Klasse GeometryObject geschrieben.

    Quellcode

    1. @property(assign) GLfloat *fVertices;
    2. @property(assign) GLuint *uiPolygons;


    Im ersten Array werden die Vertices gespeichert, im zweiten die Polygone (Ints geben an, welche Vertices zum Polygon gehören).
    Das hat den Vorteil, dass ein Verhex, der 2x vorkommt nicht doppelt gespeichert wird.

    Wie kann ich jetzt am besten die Figur (Vertices und Polygone) an glBufferData() übergeben?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Vyax ()

  • Ich verstehe die Frage nicht ganz.

    Du musst auch speichern, wieviele Elemente Deine Arrays haben, glBufferData bekommt das ja auch. Und ansonsten dann direkt Buffer binden und glBufferData rufen?

    Oder meinst Du mit den Indizierten Vertices? Weiss ich grad nicht aus dem Kopf, GL_ELEMENT_ARRAY oder so, denk ich. Meiner Erfahrung nach ist es aber in sehr vielen Fällen nicht möglich, Vertices zu teilen, weil die Texturkoordinaten oder die Normalen am "gleichen" Vertex je nach Triangle unterschiedlich sind. Ich konvertiere darum eigentlich immer in eine reine Liste an Triangles.
    C++
  • Ich will in die Richtung Spiel gehen.

    Ein GeometryObject soll ein renderbares Objekt darstellen z.B. Würfel.
    Jedes GameObject hat ein NSMutableArray, in dem alle GeometryObjects gespeichert sind, die dazu gehören.

    Also wäre es in diesem Fall besser, im GeometryObject nur ein GLfloat Array zu speichern, in dem alle Vertices (bilden Dreiecke) gespeichert sind?
  • Ihr müsst ja nicht.
    Aber es gibt hier viele hilfsbereite Leute, die sich das mal ansehen würden.

    Hinweise:

    Die Klasse GeometryObject erzeugt ein Objekt mit den Properties fVertices und uiIndices.
    Der Würfel wird mit seinen 8 Eckpunkten und den 12 Polygonen (Dreiecke) definiert.
    Beim Erzeugen wird ein String-Parameter übergeben. Ist dieser @"cube" so werden die Vertices und Indices vom Shape Manager angefordert.
    Das Rendern wird mit einem DisplayLink umgesetzt und von der Klasse RenderManager übernommen.

    Ich denke mal der Fehler liegt beim Binden an die Render Buffer.