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

Aktuelle Zeit: So Jul 13, 2025 22:36

Foren-Übersicht » Programmierung » Einsteiger-Fragen
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: Texturen sind verzerrt
BeitragVerfasst: Do Jan 27, 2005 19:59 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
Hi
Ich habe ein Problem (nein sowas..)
und zwar habe ich bei den UV-Koordinaten Werte>1 eingegeben, damit sich die Textur wiederholt. Auf meinem alten Rechner sah das wunderbar aus, nämlich so:
Bild
Aber jetzt auf meinem neuen (viel viel besseren PC mit neuster Grafikkarte und aktuellem Treiber) sieht das ganze dann leider so aus:
Bild


Was könnte ich im Programm ändern, damit das wieder schöner aussieht?? :(

EDIT: Da fällt mir noch was ein:
Die Programme, die ich auf meinem alten PC kompieliert habe und auf dem Neuen laufen lasse, sehen aus wie Fall 1.
Diejenigen, die ich auf meinem neuen PC kompiliert habe sehen auf ebendiesem neuen PC aus wie Fall 2.
Die Programme, die ich auf meinem alten PC kompiliert habe sahen auf dem Rechner eines Freundes aus wie Fal 2.

Also sehr verzwickt die Angelegenheit.....

_________________
Bild


Zuletzt geändert von Maricello am Do Jan 27, 2005 20:03, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 20:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
http://www.delphigl.com/forum/viewtopic.php?t=3582
??? Wusste doch, dass mir der Screen bekannt vorkommt :wink:
Hast das vom Lars schon ausprobiert?

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 20:07 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
oh... na das sieht mir ähnlich.
Ne hab ich nicht ausprobiert, aber die EDIT-Sache ist doch auch nomma echt komisch oder?????

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 21:14 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
so, es klappt tatsächlich. Aber immer noch ists komisch.
Also ich arbeite mit glBitmap.pas und da ist dieses Repeatding ja eigentlich automatisch eingestellt oder?? Jedenfalls soweit ich das sehe... Und auf meinem alten Rechner hattes ja auch von sich ausgeklappt...
Ein anderes Problem, was ich ebenfalls auf meinem alten PC nicht hatte:
ich hab eine Bitmapdatei in der was drinsteht (ich will Text ausgeben) und alles was nicht Text ist, ist schwarz. Jetzt render ich das mit folgendem Code:
Code:
  1.  
  2. glBindTexture(GL_TEXTURE_2D, GutTex);
  3. glScalef(1,1,ScaleWert.Value);
  4. glEnable(GL_BLEND);
  5. glBlendFunc(GL_SRC_COLOR, GL_ZERO);
  6. glBegin(GL_QUADS);
  7.   glColor3f(1,0,0);
  8.   glTexCoord2f(0,1); glVertex3f(Raumbreite/2.01,Raumhoehe/2,1.5);
  9.   glTexCoord2f(1,1); glVertex3f(Raumbreite/2.01,Raumhoehe/2,3.5);
  10.   glTexCoord2f(1,0); glVertex3f(Raumbreite/2.01,Raumhoehe/2+0.5,3.5);
  11.   glTexCoord2f(0,0); glVertex3f(Raumbreite/2.01,Raumhoehe/2+0.5,1.5);
  12. glEnd;
  13. glDisable(GL_BLEND);
  14.  

Allerdings seh ich auch alles Schwarze in meinem Programm. Wie gesagt: bei mienem letzten Rechner hat es wunderbar funktioniert..

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 22:00 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bin mir net ganz sicher ob deine BlendFunc die Richtige ist... :roll:
Kannst ja mal im Wiki den Artikel "glBlendFunc" studieren. Eventuell hilft dir das weiter.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 22:43 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
na, gibts denn noch andere Methoden zum Alphablenden? Aber eigentlich hast du Recht, ich will ja nicht Alphablenden sondern eigentlich so etwas wie Colorkeying.. Aber ich weiß nicht wie man das noch anders machen könnte...

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 22:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Methode a :
Du musst beim Laden der Textur einen Alphachannel erstellen und in den Alphawert im Programm mit Color-Keying erzeugen
Methode b :
Du schreibst einen Fragmentshader, der den Alphawert anhand der Farbe setzt, diese Methode hat aber einige Nachteile :
1.Sie funktioniert nur auf neueren Grafikkarten, da Fragmentshader verwendet werden müssen
2.Sie ist langsamer als Methode a, da bei Methode a einmal berechnet wird und bei Methode b jedes Fragment jeden Frame berechnet wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 27, 2005 22:54 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
ok, also ich werd wohl Meth. A nehmen. Aber ich hab ehrlich gesagt nix verstanden..
Also worein erstell ich jetzt den Alphachannel? Kann man ja irgendwie für jeden Pixel oder? Aber wäre das nicht etwas langsam? Und was ist Colorkeying in OGL überhaupt? wie geht das da? (Ich kenns nur aus DirectDraw...)

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 06:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also mit der glBitmap steht der Wrapmode standardmäßig auf GL_CLAMP_TO_EDGE. Das kannst du ändern in dem du dei globale Methode glBitmapSetDefaultTextureWrap aufrufst oder bei der Textur die Methode SetTextureWrap.

OpenGL kennt kein Colorkey! OpenGL benutzt einen zusätzlichen Alphakanal. ColorKey ist einfach nur ein Begriff für ein Stück Quellcode welches aus einer Farbe einen solchen Alphakanal für eine Textur erstellt. Das hat gar nichts mit OpenGL zu tun. Für den ColorKey kannst du bei den Klassen in der glBitmap AddAlphaFromColorKey aufrufen. Anhand von deinem Quellcode denke ich aber mal, dass du deine Texturen mittels der Methode LoadTexture lädst. Das solltest du lassen, da sie leider nicht alles zur Verfügung stellt was die glBitmap zu leisten vermag. Benutze lieber die Klasse TglBitmap2D. Dann besteht auch die Möglichkeit, dass du einen Alphakanal anhand einer Farbe erstellst. Anderfalls bleibt dir nichts anderes übrig als das in einem Grafikprogramm zu machen und in der Textur mit abzu legen.

Wenn du bei der Textur das Filtering aus gestellt hast, dann kannst du die Transparenz auch mit dem Alphatest lösen. Der macht dann anhand eines Alphawertes das Pixel sichtbar oder eben nicht. Wenn du Textur gefiltert wird, dann ergeben sich damit allerdings unschöne render. Anderfalls müsstest du halt entsprechend Blenden. Und einen Shader für so eine Aufgabe halte ich doch ein ganz klitze klein wenig übertrieben. Also vergiss das gleich wieder!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 15:01 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
Hm, muss ich denn, nachdem ich die Instanz dann created habe dann noch was machen? (Ich übergebe als Param einen (korrekten) Dateinamen)
d.h. ich rufe jetzt noch mal für jede Instanz .GenTextures auf, dann klappts. Aber warum bringst du das nicht gleich noch in Create unter?? Oder was bringt es für einen Vorteil das noch seperat zu machen?
Alles was ich sonst noch gändert habe ist, dass ich nun statt glBind(...) nun Instanz.Bind schreibe..
Und fürn Alphawert bräcuht ich dann auch noch etwas weitere Hilfe. Also ich ruf jetzt AddAlphaFromColorKey auf. Das hat aber irgendwie noch gar nix geändert..

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich kann das nicht alles mit dem Create machen. Dann hätte ich mir auch die Klasse komplett sparen können. Die Klasse kann ein wenig mehr als nur eine Datei laden und daraus eine Textur zu generieren. Du kannst zum Beispiel eine Textur mittels einer Funktion erstellen. Du kannst eine Funktion auf die Bilddaten loslassen um ein leichtes Kriseln hinzuzufügen. Du kannst die Farbwerte des Bildes vollkommen nach deinen Wünschen anpassen. Also Invertiert. RGB getauscht. Oder lediglich den roten Kanal invertiert. Also fast alles kann man damit berechnen. In der nächsten Version werde ich auch versuchen, dass ich einen Normalenalgorithmus bekomme und diesen mit implementiere. Schau dir mal die Methode Invert von der Basisklasse an. Ich hoffe dann wirst du verstehen warum das keine Einmethoden Lösung ist. ;-)

Aber zum Verständnis. Wenn du GenTextures aufrufst, dann nimmt die Klasse die Texturdaten und generiert daraus eine Textur. Das sollte normal das Letzte sein was du mit der Textur anstellst. Außer Binden und Freigeben versteht sich.
AddAlphaFromColorKey musst du entsprechend vor GenTextures aufrufen. Evtl solltest du dann noch diverse Parameter einstellen. Also ob du MipMaps haben willst. Ob die Textur gefiltert sein soll. etc. Diese Parameter kannst du auch mittels der Standardwerte (glBitmapSet*) einstellen. Diese werden dann für alle danach erstellten Instanzen benutzt. So kannst du das entsprechend auch vereinfachen.

Allerdings denke ich mal, dass eine zusätzliche Methode kein Problem darstellen sollte. Es gibt reichlich Möglichkeiten wie man so etwas vereinfachen kann. Und sei es nur durch eine Methode die eine Instanze erstelle. Eine Datei lädt. Die Textur generiert und dann die entsprechende Instanze der Klasse zurück liefert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 29, 2005 19:05 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
ok. Und wie sage ich Delphi dann, dass er die Alphawerte aus der Textur nehmen soll? also automatisch macht es nix, so wies aussieht. Jedenfalls sehe ich immer noch ganz klar alle schwarzen Pixel.
Im Moment sage ich bei glBlendFunc eben SRC_ALPHA...
EDIT: aha, also ich darf glBlendFunc einfach nicht aufrufen scheints. Dann funktionierts jedenfalls.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 29, 2005 23:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also du musst
a) einen Alphakanl zu der Textur hinzufügen
und b) musst du OpenGL mitteilen, was er mit dem Kanal anstellen soll. Also entweder glBlendfunc oder glAlphafunc. Je nach einsatzgebiet ist auch schon glAlphafunc vollkommen ausreichend.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 30, 2005 16:32 
Offline
DGL Member

Registriert: Fr Dez 10, 2004 16:59
Beiträge: 52
nuja, mir gings jetzt ja darum was ich als >Parameter für glBlendfunc angeben soll. Im Moment benutz ich: src: GL_SRC_ALPHA dst: GL_ZERO;

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 30, 2005 19:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Da kann ich dir nur unser Blending Tutorial wärmstens an Herz legen. Dort ist das bestens beschrieben.


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 » Einsteiger-Fragen


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.008s | 14 Queries | GZIP : On ]