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

Aktuelle Zeit: Fr Jul 18, 2025 16:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Texturkoordinatengenerierung
BeitragVerfasst: Di Jul 11, 2006 15:16 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Hallo,

ich hab ein paar Objekte in meiner Szene. Jedes Objekt ist in einer
display list gespeichert. Jetzt würde ich gerne eine 1D Textur nehmen
und über alle drüber "ziehen", aber nicht für jedes einzeln.

Ich hab daher folgende Einstellungen für die Generierung gewählt:

Code:
  1. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  5.  
  6. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, anzahl_der_werte_im_array, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, byte_array_mit_farbwerten);
  7.  
  8. glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  9.  
  10. glTexGenfv(GL_S, GL_OBJECT_PLANE, coeff);
  11.  
  12. glEnable( (GLenum) GL_TEXTURE_GEN_S );
  13. glEnable( (GLenum) GL_TEXTURE_GEN_T );


das passiert in der init.
Dann hab ich eine For schleife die mir jede Display liste "called".
Davor mach ich ein glEnable((GLenum)GL_TEXTURE_2D); und danach
ein glDisable((GLenum)GL_TEXTURE_2D);

Jetzt bekommt jedes objekt zwar die textur, aber jedes einzeln das
will ich ja nicht.

Ach so, ich benutzte die 2D Funktionen, als ob es 1D wären, das sollte
aber keine Probleme machen, oder doch?

Danke und Grüße!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 11, 2006 15:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Habe mal das Pascaltag hinzugefügt.

Also im Normalfall macht es keinen Unterschied ob du 2D mit 1 Pixel höhe oder 1D benutzt. Allerdings solltest du dann alle Einstellungen auch für GL_T mit einstellen. Und nicht nur mit einem entschiedenen Manchmal. Allerdings berechnet die Grafikkarte so die Koordinaten für S und für T obwohl die für T immer gleich sind. Also könntest du ihr auch einen Gefallen tun und es weglassen.

Aber du solltest dir mal ein Demo von Sascha Willems anschauen. Unter OpenGL und dann recht weit unten findest du eine Demo zu projezierten Texturen. Er stellt dort noch eine Eye_plane ein und richtet seine Projection mittels der Texturmatrix aus. Habe es jetzt so im überfliegen nicht ganz verstanden was da vor sich geht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 05:54 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Hallo,

erstmal danke für den Link, werde es mir jetzt mal anschauen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 06:46 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Ok, hmm, also unten ein Bildchen, wie ich es
mir vorstelle, vielleicht gehe ich auch falsch dran.

Also jedes quadrat ist in einer displayliste. Jetzt will
ich die beiden Objekte so einfärben wie unten dagestellt.


Danke!


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also als erstes mal. 300 Pixel ist keine gültige Größe für Texturen. Ich sage nur Potenz von 2. ;-)

Aber beide deinem Problem denke ich, dass es durchaus einfachere Wege dafür geben würde. Ich hoffe mal, dass die Linien keine Tiefe sind sondern feste Bildschirmbereiche. Wenn dem so ist, dann kannst du mit dem ScissorTest (glScissor) das rendern auf einen bestimmten rechteckigen Bereich einschränken. Und da würde ich das einfach so machen, dass du für deine Objekte die entsprechende Farbe setzt und sie zeichnechst, dann den nächsten Scissor Bereich einstellst. Szene Zeichnen. Scissor. Szene.

Das bedeutet aber, dass du deine Szene 3 Mal zeichnen musst. Das ist natürlich nur bei halbwegs kleinen Szenen performant. Und es wäre nicht möglich irgendwann einen weichen Farbverlauf zu erzeugen. Aber das ist zu mindest die einfachste und schnellste Lösung. Als Alternative kämen sicherlich auch noch Shader in Frage. Aber wie man das dabei machen müsste ist mir nicht so ganz klar.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 08:36 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Hi,

habe mit glScissor es schon gemacht gehabt, aber habe ein recht große szene am
ende und daher war das nicht mehr perfomant genug...

shader kenn ich mich auch nicht aus und wollte ich eigentlich auch nicht verwenden.
hmm, danke trotzdem!

Vielleicht noch mehr ideen :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 12:27 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Die Textur wird im Bereich von 0 bis 1 angewendet, ist das richtig?
Aber im lokalen koordinaten system, wenn ich das richtig verstehe.
wie kann ich es im globalen anwenden lassen und dann halt trotzdem
auf die objekte anwenden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 13:49 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Mal ne blöde Idee: Wie wärs, wenn Du die Szene ganz in Weiß renderst, und am Schluss ein Bildschirmfüllendes Quad mit deiner Textur drüberblendest?
Sprich: Helligkeitswerte aus dem Farbpuffer verwurschtelt mit den Farbinformationen aus der Textur, ähnlich wie im LichtUndSchatten tut.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 13:53 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm... Könnte man nicht einfach die Texturkoodinatengenerierung das übernehmen lassen. Irgendwie kann man doch Techturkoordinaten in Abhängigkeit von der Tiefe berechnen lassen.

Aber mal ganz anders gefragt: Für was brauchst du es eigentlich. Bevor wir hier Rätselraten... eventuell gibts andere einfache Lösungen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 14:06 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Ok, ich werde mal grad erklären was ich genau vor habe.

Ich hab eine Szene, durch die ich durchlaufen möchte.
Die Szene besteht aus verschiedenen Objekten, die einfach
eine Farbe haben. Dann habe ich Geometrie, die
ich mit der Textur belegen möchte. Durch die Textur will
ich quasi höhenunterschiede darstellen. Die Geometrie sind
Wände die rechts und links angebracht sind. Jedes
Objekt ist jeweils in einer Displayliste und jedes Wandstück
auch. Was ich mit der Textur machen möchte, ist quasi sagen.
Nimm diese Textur und bringe sie im bereich von 0 bis z.B. 10
an und strecke sie auf diesen Bereich, alles was drüber ist soll
die letzte farbe der textur bekommen, alles was darunter ist
soll die erste farbe bekommen.

Danke an alle :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 14:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei den Highmap-Tutorials wurde sowas auch gemacht.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 14:37 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Das arbeitet auf Vertexbasis, oder erinnere ich mich falsch?!
Weil ich "call" ja nur noch die Display Listen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 12, 2006 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
hmm... sollte glcolor bei displaylisten nicht auch funktionieren? und inzwischen sogar schon glbindtexture? oder einfach die displaylisten aufteilen?

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 13, 2006 06:03 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
glColor funktioniert, glaub ich auch. Aber dann kann ich die Farbwerte zur Laufzeit nur ändern,
wenn ich auch die Displaylisten neu mache, was enorm die Performance einbrechen läßt.

Wie meinst du das mit glBindTexture?

Grundlegend funktioniert das ja sehr gut mit der 1D Textur und dann
automatische Texturkoordinaten generierung, aber wie bekomme ich es
hin, das die Textur nicht im Bereich von 0 bis 1 angewendet wird,
sondern in einem von mir defenierten Bereich, z.B. 0 bis 10.
Kann man die Textur nicht skalieren oder so, also mit Matrix operationen
da was machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 13, 2006 08:04 
Offline
DGL Member

Registriert: Di Jun 13, 2006 08:11
Beiträge: 30
Ich glaub ich habs hinbekommen, wenn das so geht, sag ich bescheid wie ich es gemacht hab...


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


Wer ist online?

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