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

Aktuelle Zeit: Do Jul 03, 2025 09:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 16:02 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Hey!

Ich möchte einen Kreis mit einer Textur belegen.
Die Textur ist eine Art Grasfläche und ich möchte natürlich schöne übergänge haben.
Kreis Zeichnen ist kein problem, die Textur draufzulegen an sich auch nicht.
Die art auf die ich meinen Kreis zeichne sorgt jedoch für ein ziemlich bescheidenes Aussehen der Textur:

Ich Zeichne den Kreis aus Dreiecken und belege jedes dreieck mit meiner Textur.
Code:
  1.  
  2. for (int i = 0; i < map.getCount(); i++) {
  3.                     Triangle tri = (Triangle)map.getTriangle(i);
  4.                     Point A = tri.getA();
  5.                     Point B = tri.getB();
  6.                     Point C = tri.getC();
  7.                     Gl.glTexCoord2d(5.0, 0.5);
  8.                     Gl.glVertex3d(A.getX(), A.getY(), A.getZ());
  9.                     Gl.glTexCoord2d(0.0, 0.0);
  10.                     Gl.glVertex3d(B.getX(), B.getY(), B.getZ());
  11.                     Gl.glTexCoord2d(0.0, 1.0);
  12.                     Gl.glVertex3d(C.getX(), C.getY(), C.getZ());
  13.                 }


Der Kreis schaut schön aus, nur die Textur ist natürlich reichnlich zerstückelt.

Gibt es ne bessere Art den Kreis zu zeichnen oder die Textur draufzulegen?

Grüße

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ein Kreis ist ja ein 2D-Objekt. Entsprechend gut lässt sich das texturieren. Im wesentlichen wählst du setzt du die Texturkoordinaten in dem du die Vertexposition auf die Kreisebene projizierst. Klingt kompliziert, ist aber in deinem Fall aller Wahrscheinlichkeit nach ganz einfach:
Den höchstwahrscheinlich liegt dein Kreis entweder in einer die Koordinatenebenen. D.h. eine der drei Koordinaten hat immer einen konstanten Wert. Diesen konstanten Wert lässt du einfach weg und nimmst das als Texturkoordinate. ;) Damit das ganze dann gut aussieht kannst du dann vielleicht noch ein wenig verschieben und skalieren.

Wenn GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T auf GL_REPEAT (Default-Einstellung) stehen vereinfacht das die Sache.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 16:53 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Sorry, das versteh ich leider nicht ganz.

Wie kann ich denn die Textur auf den Kreis legen, der ja aus Dreiecken besteht. bisher kann ich nur die einzelnen Dreiecke texturieren.

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 17:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ok, wir betrachten die ganzen Vertices deines Kreises einzeln. Also als Beispiel ein Vertex mit Position (5,7,0). Weil dein Kreis in der XY-Ebene liegt ist Z immer 0. Jetzt nimmst du einfach (5,7) als Texturkoordinate für diesen Vertex.

Also so:
Code:
  1. Gl.glTexCoord2d(A.getX(), A.getY());
  2. Gl.glVertex3d(A.getX(), A.getY(), A.getZ());


No magic ;)

Sagen wir dein Kreis hat einen Durchmesser von 10 Einheiten. Dann wird jetzt natürlich die Textur auf dem Kreis 10mal wiederholt. Wenn das nicht gewünscht ist kannst du die Koordinaten einfach durch den Durchmesser teilen.
Code:
  1. tx = A.getX() / 10;
  2. ty = A.getY() / 10;
  3. Gl.glTexCoord2d(tx,ty);

Letztlich geht es darum die Vertexposition irgendwie auf den 0...1 Bereich (bzw. ein Vielfaches davon) abzubilden. Allgemein bekommst du das mit folgendem hin, wobei du dir a und b geeignet ausrechnen musst.
Code:
  1. tx = A.getX() * a + b;
  2. ty = A.getY() * a + b;
  3. Gl.glTexCoord2d(tx,ty);

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 17:11 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Bevor ich das ausprobiere:
Wenn mein Kreis aus 100 dreiecken besteht, und ich darüber eine einzige Textur legen will, gebe ich der Textur einfach für jeden "Eckpunkt" jedes Dreiecks die Koordinaten mit 0<x<1 und 0<y<1? und dann wird über den gesamten Kreis diese Textur gelegt?

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 18:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ja, x und y müssen halt für jeden Vertex (Eckpunkt) so gewählt werden, dass sie der gewünschten Position des Eckpunktes in der Textur entsprechen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 18:12 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Dann weiß ich ja wofür der abend draufgeht ;)

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kreis + Textur
BeitragVerfasst: Do Aug 23, 2012 18:56 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Yeah, es läuft xD

Vielen Danke!

_________________
ack nack nack nack nack


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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.008s | 15 Queries | GZIP : On ]