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

Aktuelle Zeit: So Jul 20, 2025 00:33

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Konkaves Polygon texturieren..?
BeitragVerfasst: So Jul 17, 2005 13:02 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

erst mal sorry das ich hier so reinplatze ;)

Aber ich muss unbedingt bis heute abend ein konkaves Polygon gekachelt texturieren können!

Das Polygon ist gezeichnet, ne Textur draufgebunden, aber es wird immer nur der erste Pixel der Textur über das gesamte Polygon gestrecht.

Ich dachte eigentlich, das geht ganz einfach mit

Code:
  1.  
  2.  glTexCoord2f(0,0);
  3.  glTexCoord2f(1,0);
  4.  glTexCoord2f(1,1);
  5.  glTexCoord2f(0,1);
  6.  


- tuts aber nicht. Wie texturiere ich das Polygon richtig? ICh hoffe ihr könnt mir schnell helfen ;)

Danke + Grüße
Passi


Zuletzt geändert von Passi am Di Sep 20, 2005 20:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:15 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Willkommen im Forum.
Jedem Vertex kann man dieverse Eigenschaften zuordnen. Eine von denen sind Texturkoordinaten. Um einem Vertex eine Texturkoordinate zuzuordnen gibt man zuerst die Texturkoordinaten ein und dann das zugehörige Vertex. So in etwa:
Code:
  1.        glTexCoord2f(1,1); glVertex2f(-1, -1);
In deinem Beispiel wird nur die Letzte von glTexCoord als "gültige" Angabe anerkant und vermutlich allen Verticen zugeordnet.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
EDIT: Dumpfsinn geschrieben...

wie willst du es den gekachelt haben? mit festerkachelanzahl oder mit fester kachelgröße?
einfach als erste koordinate "0|0" und als zweite "Anzahl der Kacheln|Anzahl der Kacheln" ist für feste kachelanzahl geeignet.

wenn die größe der kacheln fest sein soll, musst du wohl noch ein bisschen rechnen....

PS: wäre das nicht das ideale einsatzgebiet für einen einfachen shader?

_________________
Bild

"User Error. Replace User and hit Continue."


Zuletzt geändert von luketheduke am So Jul 17, 2005 13:31, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:30 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

Danke für eure Antworten!

Zitat:
aber wenn es eh nur ein pixel ist, kannst du auch glColor hernehmen.


Nein, das Problem ist ja, dass er nur einen Pixel nimmt statt 32.

Zitat:
1/texture.width


Zitat:
glTexCoord2f(1,1); glVertex2f(-1, -1);



Hmm.. dann sieht mein Code jetzt so aus:

Code:
  1.  
  2.  glTexCoord2f(1/32,1/32); glVertex2f(-1, -1);
  3.  glTexCoord2f(1/32,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,1/32); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6.  


Leider tut sich da genau das Selbe.. Muss ich vielleicht den Vertex oder die Texturkoordianten für jede Koordiante des Polygons zuweisen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
ja, sorry, wie oben editiert, hatte gemeint, du willst nur einen pixel haben.

aber eigentlich sollte er bei 0 und 1 als koordinaten die textur komplett über das polygon stretchen. ist deine textur rechteckig oder quadratisch?

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:45 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Quadratisch.. 32x32.

Mh also vllt. geht das auch anders, weil ich zeichne das Polygon ja nicht mit den Polygonfunktionen von OpenGL, sondern tesselier das erst.. ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 17, 2005 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
tja, wenns n konkaves ploygon ist, dann wird das ja erst in (mindestens) zwei polygone aufgeteilt. du musst dann für jedes vertex die richtigen texturkoords berechnen und einstellen. probier es erstmal mit einem quad, und probier da rum, wie es sich auswirkt.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 00:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du mathematisch etwas beschlagen bist, dann kannst du sicherlich auch die Vertex-Koordinaten in den Texturraum so transformieren, dass du die passenden Texturkoordinaten erhälst. Jedenfalls, wenn die Textur nich gekachelt werden soll.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 07:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
Muss ich vielleicht den Vertex oder die Texturkoordianten für jede Koordiante des Polygons zuweisen?

Wie übergibst du bisher die Koordinaten des Polygons?
glVertex ist ja gerade eines der Kommandos, mit dem mit dem man Koordinaten an OpenGL übergeben kann, wenn man davor mit glTexCoord eine Texturkoordinate festlegt, wird diese dann für den mit glVertex übergebenen Schnittpunkt verwendet. Wenn man mehrere glTexCoord Kommandos direkt hintereinander aufruft, ist das praktisch sinnlos, da die vorhergehende Kommandos jeweils von den nachkommenden Kommandos überschrieben wurden.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Irgendwie geht die Diskussion etwas auseinander ohne konkretes Problem habe ich das Gefühl :?:

Um zu gucken ob im einfachen fall alles funktioniert solltest du vieleicht wirklich erstmahl nen einfaches quad zeichnen und das den so:

Code:
  1. glbegin(gl_quad);
  2.  glTexCoord2f(1,1); glVertex2f(-1, -1);
  3.  glTexCoord2f(1,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,1); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6. glend;


Und ansonsten:

1. Wenn deine "oberfläche" aus vielen dreiecken besteht, musst du in der Tat für alle eckpunkte der dreiecke die richtigen Texturcoordinaten berechnen (sollte in 2d sehr einfach sein)...

2. Wenn du auf ein Dreieck/Viereck/Polygon die textur merfach haben willst, musst du texturcoordinaten GRÖßER 1 eingeben:

Code:
  1. glbegin(gl_quad);
  2.  glTexCoord2f(5,5); glVertex2f(-1, -1);
  3.  glTexCoord2f(5,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,5); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6. glend;


Das wäre glaube ich das, was mann klasisch unter kacheln versteht...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Irgendwie geht die Diskussion etwas auseinander ohne konkretes Problem habe ich das Gefühl :?:

Um zu gucken ob im einfachen fall alles funktioniert solltest du vieleicht wirklich erstmahl nen einfaches quad zeichnen und das den so:

Code:
  1. glbegin(gl_quad);
  2.  glTexCoord2f(1,1); glVertex2f(-1, -1);
  3.  glTexCoord2f(1,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,1); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6. glend;


Und ansonsten:

1. Wenn deine "oberfläche" aus vielen dreiecken besteht, musst du in der Tat für alle eckpunkte der dreiecke die richtigen Texturcoordinaten berechnen (sollte in 2d sehr einfach sein)...

2. Wenn du auf ein Dreieck/Viereck/Polygon die textur merfach haben willst, musst du texturcoordinaten GRÖßER 1 eingeben:

Code:
  1. glbegin(gl_quad);
  2.  glTexCoord2f(5,5); glVertex2f(-1, -1);
  3.  glTexCoord2f(5,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,5); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6. glend;


Das wäre glaube ich das, was mann klasisch unter kacheln versteht...

EDIT: SORRY, da kam gerade "seite kann nicht gefunden..." , da habe ich einmal zurück und noch mal auf posten :roll:

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 18, 2005 17:55 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Das Problem kenne ich, passiert mir hier auch öfters!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 20, 2005 20:42 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

sorry das ich so lang nix von mir hab hören lassen. Ist inzwischen nicht mehr dringen ;), würde das nun aber doch gerne noch hinbekommen.

Also. Die Koordinaten der Polygone hab ich alle, da ich die vorher festlege und in ein Array speicher. Wenn ich das jetzt richtig verstanden habe, muss ich in diesem Code:

Code:
  1.  
  2.  glTexCoord2f(5,5); glVertex2f(-1, -1);
  3.  glTexCoord2f(5,0); glVertex2f(-1, 0);
  4.  glTexCoord2f(0,5); glVertex2f(0, -1);
  5.  glTexCoord2f(0,0); glVertex2f(0, 0);
  6.  


jeweils bei glVertex2f die Texturkoordinaten errechnen und für jede Koordinate dann angeben? Aber eigentlich müsste doch wenigstens ohne Änderung an obigen Code die Textur schon über das gesamte Polygon gestretcht werden oder? Das passiert nämlich leider auch nicht..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 20, 2005 22:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das is auch alles bisl vermurkst. Z.B. sind die Vertexdaten in keiner Reihenfolge sindern in einem X. Das macht schonmal kein sooo dolles Quad ;)

Versuchs mal damit:
Code:
  1.  
  2. glBegin(GL_QUADS);
  3.   glTexCoord(0,0); glVertex2f(-1, 0);
  4.   glTexCoord(0,1); glVertex2f(-1,-1);
  5.   glTexCoord(1,1); glVertex2f( 0,-1);
  6.   glTexCoord(1,0); glVertex2f( 0, 0);
  7. glEnd;
  8.  

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 6 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.009s | 16 Queries | GZIP : On ]