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

Aktuelle Zeit: Mi Jul 16, 2025 19:44

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jul 15, 2007 17:03 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ah ok. Ich kann also zwei mal rendern. und erst den zweiten renderdurchgang rausgeben.
Wusste nicht dass man mit glReadPixel die Farbe auch auslesen kann, ohne das es mit Swapbuffer ausgegeben wird. Das ist ja super :).
Hab im Wiki auch nichts über die Funktion gefunden. Ich versuch mal zu googlen.

Danke nochmal.
Simon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 12:48 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
hab jetz eine Selektion gebastelt, die mir aber einen Fehler bringt.

Code:
  1. function Selection(x,y : integer) : glFloat ;
  2. begin
  3.  glReadPixels(x,y,x+1,y+1,GL_RED,GL_FLOAT, @RESULT);
  4. end;


Ich wollte mir erstmal den Rotenfarbwert geben lassen.
x,y sind aus dem Ereginis onMouseMove.


Es kommt Internal Error IMP-27nochwas (leider ist mir grad delphi abgestürzt und das Projekt war nicht gespeichert :D )


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 13:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also mir sagt der Fehler so gar nichts aber schau dir mal Artikel zu glReadPixels im Wiki an.

Dort steht etwas von Height und Width und nicht Right und Bottom. Mit andere Worten. Der dritte und vierte Parameter muss jeweils 1 sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 14:19 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok. Das war der Fehler . Hab den dritten und vierten parameter = 1 gesetzt.


Habe aber noh ein problem.. habe dafür mal den selektionstest hochgeladen:

Er gibt nun als Form1.Caption 0 aus, wenn man aufs schwarze trifft und 1 wenn man aufs rote trifft (rechte maustaste fürht die selektion aus)

Wenn ich auf rot (mit der rechtenmaustaste) klick, kommt der wert 0 raus (also meint er es wäre schwarz). wenn ich genau unter das viereck klicke kommt der wert 1 (er meint es wäre Rot) .. da muss irgendwas "verrutscht" sein.

hängt das vielleicht mir glPixelStore, glPixelTransfer oder glPixelMap. ab ?



Hier mein Testprogramm
http://www.rock-spirits.de/Selektionstest.rar


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 20, 2007 18:24 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
omg bin ich dumm :D

Ich hab den Fehler
ich habe vergessen den yWert der Mausposition vom gesamtem ClientHEight abzuzien .. lol .. wieso bin ich da nich früher drauf gekommen

my := ClientHeight - y ;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 21, 2007 10:53 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
hab ein Problem und zwar reichen mir die Farbwerte nicht aus um eine Selection durchzuführen.

Ich habe mein Level und kleinere VBOlisten unterteilt.

array of array of VBOlisten. den r und g wert der Farben , habe ich nun verwendet um zu bestimmen um welche VBOliste es handelt (zweidimensionales array) .. hier reicht mir das intervall von {0.01-1}.
Nun muss ich aber noch schauen welches Dreieck im jeweiligen VBO gemeint ist. Dazu wollte ich den b wert der Farbe verwenden. Jetz reicht mir aber das intervall 0.01, 0.02, 0.03 - 1 nicht aus da in jedem VBO 49x49 verschiedene "Farben" vorhanden sein soll (also knapp 2500).
Habe mir dann überlegt, dass ich einfach kleinere Zahlen nehme 0.0001, 0.0002 - 1. So genau Arbeitet der Farbpuffer leider nicht.
Ist meine Idee der Selektion hier fehl am platz ? .. oder ist mein Ansatz falsch ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 14:10 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
weiß keiner Rat ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Farben am besten als Byte mit glColor4ub übergeben. Dann gibt es auch keine Probleme mit der Genauigkeit und es sind trotzdem genug Farben vorhanden. Selbst wenn man Alpha weglässt sind es noch ca 16 Millionen.

Man kann einen Integer auch direkt als Farbe verwenden mit glColor4ubv(@i); Die Aufteilung der Bits in dem Integer muss nicht unbedingt den Farbkomponenten entsprechen. Für den Flächenindex kann man z.B. 12 Bit verwenden. Das reicht für 4096 Flächen. Die restlichen 12 Bit (insgesammt 24 ohne Alpha) können dann die Zeilen und Spalte jeweils mit 6 Bit erhalten, so dass man insgesammt auf maximal 64x64 VertexBuffer kommt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 15:50 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok .. das is ne lösung mit dem Byte.
Aber da gibts ein Problem:

Mein Vertexspeicher sieht so aus
Code:
  1.   TVertex=packed record
  2.     s,t : GLfloat ;
  3.     r,g,b,a : Byte ;
  4.     nx,ny,nz : Glfloat ;
  5.     x,y,z:Glfloat;
  6.   end;


für den befehl glInterleavedArrays bräuchte ich dann folgendes kürzel


GL_T2F_C4UB_N3F_V3F .. genau das gibt es nicht, oder irre ich mich da
?

es gibt lediglich
GL_2TF_C3UB_V3F


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 15:58 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Interleaved Arrays sind eh zu eingeschränkt. Man kann fast jedes beliebige Format benutzen. Nach dem Binden des Buffers legt man glVertexPointer,glColorPointer,glNormalPointer und glTexCoordPointer den Aufbau fest.

Der letzte Wert ist jeweils das Offset im Vertex record.

Code:
  1. glTexCoordPointer(2,GL_FLOAT,sizeof(TVertex),Pointer(0));
  2. glColorPointer(4,GL_UNSIGNED_BYTE,sizeof(TVertex),Pointer(8));
  3. glNormalPointer(GL_FLOAT,sizeof(TVertex),Pointer(12));
  4. glVertexPointer(3,GL_FLOAT,sizeof(TVertex),Pointer(24));


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 16:14 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ok .. klappt fast :D
also mein Vertex sieht nun so aus
Code:
  1.  
  2.   TVertex=packed record
  3.     s,t : GLfloat ;
  4.     r,g,b,a : GLUByte ;
  5.     nx,ny,nz : Glfloat ;
  6.     x,y,z:Glfloat;
  7.   end;


ich habe dem rgba wert jeweils den wert 0 übergebe.
das rendern sieht so aus

Code:
  1. procedure TNode.drawVBO ;
  2. begin
  3.  glShadeModel(GL_FLAT);
  4.  glBindBufferARB(GL_ARRAY_BUFFER_ARB, VBO);
  5.  glEnableClientState(GL_VERTEX_ARRAY);
  6.  //glInterleavedArrays(GL_T2F_C4F_N3F_V3F, SizeOf(TVertex), nil);
  7.  glTexCoordPointer(2,GL_FLOAT,sizeof(TVertex),Pointer(0));
  8.  glColorPointer(4,GL_UNSIGNED_BYTE,Sizeof(TVertex),Pointer(8));
  9.  glNormalPointer(GL_FLOAT,sizeof(TVertex),Pointer(12));
  10.  glVertexPointer(3,GL_FLOAT,sizeof(TVertex),Pointer(24));
  11.  glDrawArrays(GL_TRIANGLES, 0, VBOSize);
  12. end;


(Weiß nicht ob das mit den Pointern stimmt.)
meine procedure um die Farbe auszulesen sieht so aus

Code:
  1. glReadPixels(x,y,1,1,GL_RED,GL_UNSIGNED_BYTE,@VBOCoord[2]);
  2. glReadPixels(x,y,1,1,GL_GREEN,GL_UNSIGNED_BYTE,@VBOCoord[3]);
  3. glReadPixels(x,y,1,1,GL_BLUE,GL_UNSIGNED_BYTE ,@VBOCoord[0]);

leider bekomm ich immer nur 255 als wert raus...
liegt es an irgendeiner hier beschriebenen funktion ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ach ja, man muss die Arrays noch einzeln aktivieren.

Außer:
glEnableClientState(GL_VERTEX_ARRAY);

noch

glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXCOORD_ARRAY);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 19:17 
Offline
DGL Member

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 10:26 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
ich weiß nicht ob ich fr die Frage einen neuen Treat auf machen soll.

Habe noch ne frage bezüglich der Größe der VBOS ..
Ein VBO fasst bei mir 49*49*6*SizeOf(TVertex).
Davon habe ich pro level bis zu 70*70 VBOs .. (wobei das wäre schon ein Monster großes Level)
habe mein Level in so viele VBO genommen und FrustrumC zu nutzen, um die Performance3 zu steigern. Jetz habe ich aber auch gehört, dass so viele VBOs nicht gut für performance sind.. stimmt das ? .. hab ich zu viele VBOs ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 23, 2007 12:08 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Sorry .. muss nochmal ne andere Frage stellen :D ...
und zwar zu dem hier.
glTexCoordPointer(2,GL_FLOAT,sizeof(TVertex),Pointer(0));
glColorPointer(4,GL_UNSIGNED_BYTE,Sizeof(TVertex),Pointer(8));
glNormalPointer(GL_FLOAT,sizeof(TVertex),Pointer(12));
glVertexPointer(3,GL_FLOAT,sizeof(TVertex),Pointer(24));
ich hab mich gewundert, warum der Alphawert immer auf 255 ist. und da ist mir aufgefallen dass ich wenn ich
Vertex^.a := 3; schreibe, dass da der Rotwert geändert wird. rga- Werte kann ich nicht ändern .. ist der Speicher v errutscht ?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.010s | 14 Queries | GZIP : On ]