Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich bin grad dabei ne Klasse zu implementieren, die mit VBOs und Texturen arbeitet. Also erhält das VBO beim erzeugen von mir auch die Texturkoordinaten. Jedoch kann man die Texturen auch deaktivieren. Macht es da Leistungsmäßig Sinn, das VBO neu zu erzeugen, bloß ohne Texturkooridnaten, oder bringt das nich so viel? Eh ich das Ganze ausprobiere und daran vlt nur meine Zeit verschwende wollt ich hier erstma nachfragen.
Also Leistungsmäßig dürfte der Unterschied auf aktueller Hardware kaum auffallen. Trotzdem, du könntest Vertexkoordinaten, Normalen und Texturkoordinaten getrennt in einem Buffer speichern. Also der Buffer könnte statt so
Code:
VNTVNTVNTVNTVNTVNTVNTVNT.......VNT
so aussehen:
Code:
VNVNVNVNVNVNVNVNVNVN.....VNTTTTTTTTTTT.....T
Der Trick ist einfach nur den Stride und Offset korrekt zu setzen. Stichworte: glVertexPointer, glNormalPointer und glTexCoordPointer. Wenn du die Texturkoordinaten nicht benötigst, tust du einfach so als wären diese gar nicht da. Du brauchst also nur einen Buffer und kannst trotzdem beides rendern ohne zu viel Speicherbandbreite zu verschwenden.
Achso, du kannst natürlich auch die Texturkoordinaten nicht angeben, wenn du im VNT Format speicherst. Es liegt einfach daran was du häufiger benötigst.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich denk ma die Texturen brauch ich relativ häufig, aber halt nicht immer. ich probier mich ma an den Pointer-Methoden, wenn ich damit nich klar kommt bleiben die TexturenCoords halt erstma mit drin
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ich hab mich jetz ma dran versucht. Erstmal nur an den Vertecs, aber ich bekomms nich zum laufen Ich hab mir 2 Klassen gemacht:
eine BasisKlasse TVertexBufferObject, von dieser Klasse erben alle weiteren (speziellen) VBOs. Sie erzeugt den Buffer und initialisiert/reserviert den Speicher.
eine spezielle Testklasse TMyVBO, diese erbt von TVertexBufferObject, activiert beim Binden GL_VERTEX_ARRAY un übergibt die Daten mit glVertexPointer. Weiterhin kann man in dieser Klasse die Vertecs in den Speicher schreiben.
Die beiden Klassen hab ich ma als Anhang gemacht, weil ich hier nich alles mit Code zubomben will ^^
Und so wird das ganze dann initialisiert und gezeichnet:
so passiert aber gar nix, schwarzer Bildschirm. Wäre nett wenn da ma jmd n Auge drauf werfen kann.
€: wenn ichs mit glInterleavedArrays mache gehts?! Was macht das genau? Ich date immer das übernimmt nur die funktion von glArrayPointer und glEnableClientState...
€2: ah habs gefunden, ich darf beim glVertexPointer die Adresse nicht mit übergeben, da er ja den ArrayBuffer nehmen soll, also muss da ein nil rein... Wäre gut, wenn man das im Wiki noch nachtragen könnte, da Fehlt bei der Parameterbeschreibung die Zeile für _pointer.
MfG & Thx Bergmann.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
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.