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

Aktuelle Zeit: Mi Jul 09, 2025 11:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zylinder Textur Koordinaten
BeitragVerfasst: Di Nov 07, 2006 21:34 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich zeichne einen zylinder wie folgt:

Code:
  1.  
  2. procedure DrawCylinder(aCylinder: TCylinder);
  3. var
  4.   i: integer;
  5.   w,
  6.   x1, z1,
  7.   x2, z2,
  8.   l, r: single;
  9.   tmp: TQuad;
  10.   Normal: TVector3D;
  11. begin
  12.   glBegin(GL_QUADS);
  13.   with aCylinder do
  14.   begin
  15.     w := 360 / detail;
  16.     for i := 0 to detail - 1 do
  17.     begin
  18.       x1 := cos(degtorad(i * w)) * radius;
  19.       z1 := sin(degtorad(i * w)) * radius;
  20.       x2 := cos(degtorad((i + 1) * w)) * radius;
  21.       z2 := sin(degtorad((i + 1) * w)) * radius;
  22.       with tmp do
  23.       begin
  24.         a.x := x2;
  25.         a.y := - height / 2;
  26.         a.z := z2;
  27.  
  28.         b.x := x1;
  29.         b.y := - height / 2;
  30.         b.z := z1;
  31.  
  32.         c.x := x1;
  33.         c.y := height / 2;
  34.         c.z := z1;
  35.  
  36.         d.x := x2;
  37.         d.y := height / 2;
  38.         d.z := z2;
  39.       end;
  40.       l := i / detail;
  41.       r := (i + 1) / detail;
  42.       Normal := GetNormal(tmp);
  43.       glNormal3f(Normal.x, Normal.y, Normal.z);
  44.       glTexCoord2f(l, 0); glVertex3f(tmp.a.x, tmp.a.y, tmp.a.z);
  45.       glTexCoord2f(l, 1); glVertex3f(tmp.b.x, tmp.b.y, tmp.b.z);
  46.       glTexCoord2f(r, 1); glVertex3f(tmp.c.x, tmp.c.y, tmp.c.z);
  47.       glTexCoord2f(r, 0); glVertex3f(tmp.d.x, tmp.d.y, tmp.d.z);
  48.     end;
  49.   end;
  50.   glEnd;
  51. end;
  52.  


der code ist der übersicht halber unoptimiert \";)\" jetzt berechne ich die texturkoordinaten via:
Code:
  1.  
  2.       l := i / detail;
  3.       r := (i + 1) / detail;
  4.  

jedoch ist das ergebnis nicht das gewünschte, die textur soll sich um den zylinder wickeln, meiner meinung nach
sieht das richtig aus, zumindest vom code, aber irgendwo steckt der fehler ;)

vielen dank schonmal :P

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
kann jetzt erstmal keinen fehler erkennen.
es wüde vieleicht helfen wenn du beschreiben könntest wie es aussieht.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 14:22 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
je größer detail desto gequetschter sieht die textur aus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Kannst du bitte mal ein Bild machen wo man das mal sieht. Also Detail etwas kleiner und Detail mal entsprechend größer. Halt so, dass man da mal was sehen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
hab grad mal gesehen das deine zeichenreihenfolge nicht mit der reihenfolge mit der du deine textur koords übergibst übereinstimmt
ich denk es sollte mehr so aussehen

Code:
  1. glTexCoord2f(r, 0); glVertex3f(tmp.a.x, tmp.a.y, tmp.a.z);
  2. glTexCoord2f(l, 0); glVertex3f(tmp.b.x, tmp.b.y, tmp.b.z);
  3. glTexCoord2f(l, 1); glVertex3f(tmp.c.x, tmp.c.y, tmp.c.z);
  4. glTexCoord2f(r, 1); glVertex3f(tmp.d.x, tmp.d.y, tmp.d.z);


oder so in der art.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 15:17 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
danke, das klappt, aber warum ?

andere quads mappe ich auch so:

Code:
  1.  
  2.     glTexCoord2f(0, 0); glVertex3f(aQuad.a.x, aQuad.a.y, aQuad.a.z);
  3.     glTexCoord2f(0, 1); glVertex3f(aQuad.b.x, aQuad.b.y, aQuad.b.z);
  4.     glTexCoord2f(1, 1); glVertex3f(aQuad.c.x, aQuad.c.y, aQuad.c.z);
  5.     glTexCoord2f(1, 0); glVertex3f(aQuad.d.x, aQuad.d.y, aQuad.d.z);
  6.  


ist das falsch Oo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 15:27 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
ich sags mal so, wenn dein quad vor dir steht ist 'a' der punkt unten rechts, 'b' ist unten links, 'c' ist oben links und 'd' ist oben rechts
das bedeutet bei 'a' sind die texturkoords r (rechts?) und 0 (unten).

siehe auch:
http://wiki.delphigl.com/index.php/Tutorial_Lektion_4

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 15:30 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ja aber normalerweise ist a bei mir unten links und b unten rechts und c oben rechts und d oben links Oo

also muss das so sein:
Code:
  1.  
  2.       with tmp do
  3.       begin
  4.         a.x := x2;
  5.         a.y := height / 2;
  6.         a.z := z2;
  7.  
  8.         b.x := x2;
  9.         b.y := - height / 2;
  10.         b.z := z2;
  11.  
  12.         c.x := x1;
  13.         c.y := - height / 2;
  14.         c.z := z1;
  15.  
  16.         d.x := x1;
  17.         d.y := height / 2;
  18.         d.z := z1;
  19.       end;
  20.  


mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 16:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
:roll:
Ok damit es mit deiner koordzuweisung von ganz oben funzt?

Code:
  1. with tmp do
  2. begin
  3. a.x := x1;
  4. a.y := -height / 2;
  5. a.z := z1;
  6.  
  7. b.x := x1;
  8. b.y :=  height / 2;
  9. b.z := z1;
  10.  
  11. c.x := x2;
  12. c.y :=  height / 2;
  13. c.z := z2;
  14.  
  15. d.x := x2;
  16. d.y := -height / 2;
  17. d.z := z2;
  18. end;


weil laut deiner brechnung:

x1 links
x2: rechts
height / 2 ist oben weil positiv, -height / 2 ist unten weil negativ

| Y=1
|
|
|__________ X=1

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 17:32 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
so wie im letzten post geht das ganze ganz gut, jetzt muss ich noch gescheit deckel machen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 17:40 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hm nee die texturen passen doch net so recht Oo

so ists richtig:
Code:
  1.  
  2. procedure DrawCylinder(aCylinder: TCylinder);
  3. var
  4.   i, j: integer;
  5.   w,
  6.   x1, z1,
  7.   x2, z2,
  8.   l, r: single;
  9.   tmp: TQuad;
  10.   Normal: TVector3D;
  11. begin
  12.   with aCylinder do
  13.   begin
  14.     glBegin(GL_QUADS);
  15.       w := 360 / detail;
  16.       for i := 0 to detail - 1 do
  17.       begin
  18.         x1 := cos(degtorad(i * w)) * radius;
  19.         z1 := sin(degtorad(i * w)) * radius;
  20.         x2 := cos(degtorad((i + 1) * w)) * radius;
  21.         z2 := sin(degtorad((i + 1) * w)) * radius;
  22.         with tmp do
  23.         begin
  24.           a.x := x2;
  25.           a.y := height / 2;
  26.           a.z := z2;
  27.  
  28.           b.x := x2;
  29.           b.y := - height / 2;
  30.           b.z := z2;
  31.  
  32.           c.x := x1;
  33.           c.y := - height / 2;
  34.           c.z := z1;
  35.  
  36.           d.x := x1;
  37.           d.y := height / 2;
  38.           d.z := z1;
  39.         end;
  40.         l := 1 - i / detail;
  41.         r := 1 - (i + 1) / detail;
  42.         Normal := GetNormal(tmp);
  43.         glNormal3f(Normal.x, Normal.y, Normal.z);
  44.         glTexCoord2f(r, 0); glVertex3f(tmp.a.x, tmp.a.y, tmp.a.z);
  45.         glTexCoord2f(r, 1); glVertex3f(tmp.b.x, tmp.b.y, tmp.b.z);
  46.         glTexCoord2f(l, 1); glVertex3f(tmp.c.x, tmp.c.y, tmp.c.z);
  47.         glTexCoord2f(l, 0); glVertex3f(tmp.d.x, tmp.d.y, tmp.d.z);
  48.       end;
  49.     glEnd;
  50.   end;
  51. end;
  52.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
mmh lass mich mal raten die textur steht auf dem kopf :?:

dort wo die Y-Koordinate (in dem fall) positiv ist muss die V-Textur-Koordinate (in dem fall) 1 sein und umgekehrt.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 08, 2006 19:59 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
nee das ist alles korrekt soweit, jetzt muss ich die deckel noch gescheit zeichnen, und wie ich da die textur mappe hab ich auch keine ahnung


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 7 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.013s | 16 Queries | GZIP : On ]