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

Aktuelle Zeit: Fr Jul 18, 2025 04:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit GL_QUAD_STRIP
BeitragVerfasst: Do Apr 20, 2006 15:25 
Offline
DGL Member

Registriert: Sa Feb 04, 2006 10:14
Beiträge: 21
hi

ich hab ein problem mit GL_QUAD_STRIP...
ich hab mir ein programm gebastelt dass aus externen dateien coodinaten einliest.
soweit is das kein problem zumindest solange ich polygone aus den cooridanten zeichne...
jetzt habe ich aber für einen turm quad stripe genommen und plötzlich wird eine seite des turm mit der mitte (wahrscheinlich 0/0/0) verbunden...

ich hab einen screenshot beigefügt...

Bild

woran könnte das liegen?

mfg puma

P:S: danke für die hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 20, 2006 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich würde dir gerne helfen allerdings kann ich so nicht sagen wo das Problem liegt. Leider kann man auf dem Bild nur erkennen, dass du ein weißes Gebilde auf einem schwarzen Hintergrund hast. Evtl würde es dir auch schon helfen, wenn du testweise mal den PolygonMode auf Linien umstellst. Damit würden anstelle von Flächen nur Linien gezeichnet werden wodurch du evtl selber sehen kannst was das Problem ist.
Code:
  1. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);


Und du kannst nicht so ohne weiteres ein Polygon in ein quad_strip verwandeln. Siehe dazu folgenden Abschnitt aus dem Wiki.
Bei einem Polygon werden die Punkte gefächert aufgerufen wärend sie bei einem Quadstrip abwechselnd aufgerufen werden. Um zu verdeutlichen was ich meine. Um das abgebildete Polygon als Quadstrip zu rendern müssten die Punkte folgende Reihenfolge haben. 1, 6, 2, 5, 3, 4


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 20, 2006 15:56 
Offline
DGL Member

Registriert: Sa Feb 04, 2006 10:14
Beiträge: 21
hi

danke für den tip ^^
ich bin halt noch ein echter noob wie man so schön sagt ^^

ich weiß dass man die reihenfolge berückichtigen muss... aber ich denke dass ich das gemacht hab ...

ok hier der screenshot in gitteransicht :)

Bild

thx puma

P:S: man sieht hier schön deutlich dass es mit der mitte verbunden is aber warum?
P:S: ich hab keine punkt O angegeben ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 20, 2006 17:51 
Offline
DGL Member

Registriert: Di Sep 06, 2005 20:40
Beiträge: 26
Wohnort: Aarhus, Denmark
wie enthalten Sie Ihre Daten?

wenn sie zu ein array of vectors referiert dann könnte die fehler werden das Sie nicht ein gültig addresse verwendet


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 08:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das sehe ich ähnlich. Ich denke mal das Problem wird darin liegen, dass dort die falschen Koordinaten gesetzt werden. Achja. Du musst natürlich von dem Zylinder die ersten Koordinaten zum Schluss noch einmal rendern, da dieser sonst nicht geschlossen wird. Bzw scheint es auch so als ob du 2 Punkte zu viel renderst. Die befinden sich das sonst wo. Wenn ich mal rate wie es aussehen soll. Wohl gemerkt. Das wissen wir ja nicht was genau da nicht stimmt. ;-)

"noob": Jeder fängt mal klein an und wenn man ein Problem hat ist es immer erst einmal wichtig heraus zufinden wo das eigentlich Problem liegt. Und da lernt man mit der Zeit ein paar Tricks oder Möglichkeiten. Aber dafür sind wir ja da. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 08:57 
Offline
DGL Member

Registriert: Sa Feb 04, 2006 10:14
Beiträge: 21
danke für die hilfe...

@ Lossy eX : du hast was von rendern geschrieben, nach den einzelnen objecten wie genau sieht das aus?

ich geb euch mal den completten quelltest damit ihr mal seht wie ich das gedacht hab...
vll stimmt ja auch was mit den array nicht die ich verwende....

Code:
  1. procedure coordfolder;
  2. begin
  3.  
  4. root[1]:='coordinates\ground\groundarea.txt';
  5. root[2]:='coordinates\tower1\walloutside1-1.txt';
  6. root[3]:='coordinates\tower8\groundt8-1.txt';
  7. end;
  8.  
  9.  
  10. procedure getcoords;
  11. var i,d:integer;
  12. begin
  13. coordfolder;
  14. countroot:=0;
  15. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  16. while countroot<high(root) do
  17.   begin
  18.       countroot:=countroot+1;
  19.       AssignFile(f, root[countroot]);
  20.       Reset(f);
  21.       for i:=1 to 49 do
  22.         begin
  23.  
  24.           Readln(f,c1);
  25.           coord[countroot,i]:=c1;
  26.  
  27.         end;
  28.       CloseFile(f);
  29.   end;
  30.  
  31. // draw
  32.  
  33. for d:=1 to 3 do
  34. begin
  35.         if coord[d,1] = 1 then
  36.                 glBegin(GL_POLYGON);
  37.                         i:=2;
  38.                         while (i<=49) do
  39.                         begin
  40.                         glVertex3f(coord[d,i],coord[d,i+1],coord[d,i+2]);
  41.                         i:=i+3;
  42.                         end;
  43.                 GlEnd;
  44.         if coord[d,1] = 2 then
  45.                 glBegin(GL_QUAD_STRIP);
  46.                         i:=2;
  47.                         while (i<=49) do
  48.                         begin
  49.                         glVertex3f(coord[d,i],coord[d,i+1],coord[d,i+2]);
  50.                         i:=i+3;
  51.                         end;
  52.                 GlEnd;
  53. end;
  54.  
  55.  
  56. end;
  57.  


schaut es euch mal an...

nochmal danke für die unterstützung :D

//edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 10:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Als aller erstes. Bitte verbinde nicht das glBegin mit dem Delphi begin. Die haben nichts miteinander zu tun. Aus dem Grund ist dein Code unten auch falsch. Wobei man den auch noch wesentlich einfacher gestalten könnte.

Code:
  1. for d:=1 to 3 do begin
  2.   if coord[d,1] = 1 then begin
  3.     glBegin(GL_POLYGON);
  4.  
  5.     i:=2;
  6.     while (i<=49) do begin
  7.       glVertex3f(coord[d,i],coord[d,i+1],coord[d,i+2]);
  8.       i:=i+3;
  9.     end;
  10.  
  11.     glEnd;
  12.   end;
  13.  
  14.   if coord[d,1] = 2 then begin
  15.     glBegin(GL_QUAD_STRIP);
  16.  
  17.     i:=2;
  18.     while (i<=49) do begin
  19.       glVertex3f(coord[d,i],coord[d,i+1],coord[d,i+2]);
  20.       i:=i+3;
  21.     end;
  22.  
  23.     glEnd;
  24.   end;
  25. end;


Oder vereinfacht, da das Zeichnen gleich ist.
Code:
  1. for d:=1 to 3 do begin
  2.   if coord[d,1] in [1, 2] then begin
  3.     if coord[d,1] = 1 then begin
  4.       glBegin(GL_POLYGON);
  5.  
  6.     if coord[d,1] = 2 then
  7.       glBegin(GL_QUAD_STRIP);
  8.  
  9.     i:=2;
  10.     while (i<=49) do begin
  11.       glVertex3f(coord[d,i],coord[d,i+1],coord[d,i+2]);
  12.       i:=i+3;
  13.     end;
  14.  
  15.     glEnd;
  16.   end;
  17. end;

Dabei existiert eine Sicherheitsabfrage, damit er überhaupt nur etwas tut, wenn der Wert 1 oder 2 ist. Sonst sieht es eigentlich okay.

Was ich zum QuadStrip meinte. Wenn du bei einem Polygon die Punkte definierst dann geht das Polygon selsttätig her und verbindet den zu letzt gesetzten Pukt mit dem Ersten. Wenn du aber eine Säule mit einem QuadStrip zeichnen möchtest, dann geht er auch nur genau bis zum letzten Punkt. Somit würde eine Seite fehlen. Wie es in deinem Bild der Fall ist. Die am großen Polygon klebt. Umd das zu schließen müsstest du die ersten beiden Punkte am Schluss noch einmal zeichnen. Es kann aber auch durchaus sein, dass das von dir ja auch so bezweckt wurde. Fällt mir gerade nur so ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 22, 2006 11:27 
Offline
DGL Member

Registriert: Sa Feb 04, 2006 10:14
Beiträge: 21
ok ich hab den fehler gefunden...
danke für die hilfe!!!!!
das is echt sehr nett von euch...
ich hab beim einlesen immer zu viele zeilen eingelesen (49) aber die dateien hatten zum teil gar keine 49 zeilen ^^...
da muss ich halt jetzt noch ne abfrage für die dateilänge mit reinschreiben damit das wird...

ok... nochmals vielen dank @ Lossy eX... ich hab einiges gelernt ^^
ach ja eine frage hätte ich doch noch...
gibt es ein tut das du mir besonders empfehlen kannst ? ich hab das von mr_T schon mal durchgelesen und größtenteils aus auchprobiert...
grundlagen sind also hoffe ich zumidnest ein paar auch vorhanden ^^

thx puma


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 23, 2006 10:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich könnte dir reichlich empfehlen. Kommt aber darauf an was du suchst. ;-)

Unsere Tutorials kannst du alle im Wiki finden.
http://wiki.delphigl.com/index.php/Tutorial


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


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]