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

Aktuelle Zeit: Fr Jul 18, 2025 23:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: VBO
BeitragVerfasst: Mi Jan 31, 2007 16:16 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Hallo,

1)Ich bin gerade dabei VBO inzubinden. Also will meinen Terrain über VBO rendern.
Bin gerade dabei den Array der Vertexdaten zu übergeben.
Ein Vertex besteht ja aus s,t,x,y,z ... Wie sieht es aber mit Normalen aus ?! .. kann ich die mit dem VBO nicht realisieren ?

2)VBO sind ja dafür bekannt dass sie im gegensatz zu Displaylisten Dynamisch sein sollen.
Wenn ich jetzt bei einen bestehenden VBO ein vertex verändern will, wie übergebe ich dem VBO ? Wie bekommt er das mit .. ?

3) achja und drittens folgendes : :) was is daran falsch ?!
(variable Ter nicht beachten ^^

Code:
  1.  
  2. {...}
  3. TVertex=packed record
  4.     s,t,x,y,z:Glfloat;
  5. end;
  6.  
  7.  TVBO  = class
  8.   VBOSize : integer ;
  9.   VBO : GLuInt ;
  10.   VBOPointer : Pointer ;
  11.   constructor create(Vertex : array of TVertex) ;
  12.   procedure draw ;
  13.  end;
  14.  
  15. {...........................................................}
  16.  
  17. procedure TTerrain.create ;
  18. Var
  19.  V : array of TVertex ;
  20. begin
  21. {...}
  22.  for X := 0 to MX-1 do
  23.   for Z := 0 to MZ-1 do
  24.   begin
  25.     ter[X ,Z].ver.x:=2*X ;
  26.     ter[X ,Z].ver.y:=random(10)/20 ;
  27.     ter[X ,Z].ver.z:=2*Z ;
  28.     ter[X ,Z].Ver.s:=X/(MX-1);     // ?
  29.     ter[X ,Z].Ver.t:=Z/(MZ-1);     // ?
  30.     setLength(V,Length(V)+1) ;
  31.     V[Length(V)-1].X := ter[X ,Z].ver.x ;
  32.     V[Length(V)-1].Y := ter[X ,Z].ver.Y ;
  33.     V[Length(V)-1].Z := ter[X ,Z].ver.Z ;
  34.   end;
  35.   VerBufOb := TVBO.create(v) ;
  36.  {...}
  37. end;
  38.  
  39.  
  40.  constructor TVBO.create(Vertex : array of TVertex);
  41. Var  i : integer ;
  42. begin
  43. //Vertexshader aktivieren
  44.   glGenBuffersARB(1, @VBO);
  45.   glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
  46.   glEnableClientState(GL_VERTEX_ARRAY);
  47.   //Speicherplatz im VRam reservieren
  48.   glBufferDataARB(GL_ARRAY_BUFFER_ARB, Length(Vertex)*SizeOf(TVertex), nil, GL_STATIC_DRAW_ARB);
  49.   //Pointer aufs VBO ermitteln
  50.   VBOPointer := glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
  51.   glBufferDataARB(GL_ARRAY_BUFFER_ARB, SizeOf(Vertex), @Vertex, GL_STATIC_DRAW_ARB);
  52.   VBOSize := Length(Vertex) ;
  53.   glUnMapBufferARB(GL_ARRAY_BUFFER_ARB);
  54. end;
  55.  
  56. procedure TVBO.draw ;
  57. begin
  58.  glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), nil);
  59.  glDrawArrays(GL_QUADS, 0, VBOSize);
  60. end;


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]