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

Aktuelle Zeit: Di Jul 15, 2025 04:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glBmp und hässliche Texturen
BeitragVerfasst: So Aug 31, 2003 11:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
Moin zusammen

Schon hab ich meine ersten Fragen bezüglich OpenGL...fängt ja gut an :(

Ich lade mittels glBmp ein *.jpg, welches ich dann in der Ortho-Ansicht auf ein Quad klebe. Das ganze sieht dann so aus.

Bild

Nun die Fragen:
1. Wieso sieht das Pic so hässlich aus? (Wie's aussehen sollte, könnt ihr euch ja denken!!!)
2. Der Titelbalken klebt über einem Teil des Canvas. Ich weiss, das ist mehr WinAPI, aber ich stell die Frage trotzdem. Wie kann ich den OpenGL-Canvas um die Höhe des Titelbalkens nach unten schieben, so, dass aber (0,0) immer noch oben links vom OpenGL-Canvas ist und nicht unter dem Titelbalken (arbeite mit API only)

Hat einer eine Idee? (ach ja, das gl-fenster ist auf 32bit, an dem kann (sollte) es also nicht liegen. GraKa ist eine gute alte V3. Auch im Vollbild sieht's Scheisse aus. Öhm...jo :)

Ideen?

_________________
Jailbird


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2003 11:59 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
@1: Das schaut nach einem falsch gewählten Filter aus. Schau dir mal http://www.delphigl.com/main.php?id=2&p ... es&print=1 an, dann solltest du die textur-Filter passend einstellen können. Ansonsten hatte ich mit irgendeiner Texturlib mal Probleme mit JPGs, kann aber nciht mehr sagen welche das war.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2003 12:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
1:
Also für mich sieht das ganz einfach nach dem falschen Format aus. JPG macht eine Verlustkomprimierung. Um Platz zu sparen verwirrft das Format "unwichtige" Teile bzw. ähnliche Blöcke werden zu einem zusammengefasst. Mitunter kann solche ein Effekt durch ein unpassendes Texturformat noch mal verstärkt werden.
Versuche das ganze mal als TGA oder BMP. Also nicht, dass JPG als bmp speichern sondern das ORIGINAL Bild (ohne Verluste) als bmp oder tga zu speichern und dann zu laden. Evtl. kann es auch ausreichen, wenn du beim Speichern des jpg's die Komprimierung kleiner wählst.

Wenn es dann immernoch doof aussieht dann liegt es an dem von dir gewählten Texturformat. Wobei es dabei bei deinem Bild keine Probleme geben sollte.

2:
Also ich weiß es nur als der VCL denn da gibt es keine Probleme mit dem Titel.
Wobei ich mich sowie so Frage, warum du WinAPI verwendest? Da du ja die glBMP.pas verwendest hast du so gut wie keinen Vorteil was die größe deiner Anwendung angeht. Weil die glBMP verwendet intern viele der DelphiUnits die deine Anwendung groß werden lassen. Dan würde es auf die Forms auch nicht mehr ankommen. Nebenbei macht die VCL das Programmieren um einiges leichter.

Aber zu deiner Frage. Wenn ich das so recht sehe. Müsstest du das ClientRect deines Fensters abfragen und das in OpenGL mit einfließen lassen. (glViewport und glOrtho).
Ich schätze mal, dass du derzeit einfach die Höhe und Breite deines Ffensterns dafür verwendest. Was ja nicht stimmt, denn du hast ja noch einen Rand dabei.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
ich komme mir vor wie ein huhn, das nicht weiss, was es da eigentlich tut :)

ich hab jetzt mal das VCL-template gezogen und das mal ein wenig an meine bedürfnisse angepasst.

nun gut...wenn ich ShowText drin habe (gibt infos aus), dann seh ich bei aktiviertem backface culling nur den text, aber nicht meinen "hintergrund".

hab ich ShowText drin, backface culling deaktiviert, dann seh ich meinen hintergrund, allerdings hat alles einen rotstich

hab ich ShowText draussen, backface culling aktiviert, dann hab ich einen schwarzen hintergrund (zeigt nix an)

hab ich ShowText draussen und backface culling deaktiviert, dann seh ich das gleiche kotzige bitmap wie auf dem screenshot oben

kann sich das ev. mal einer angucken?


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

_________________
Jailbird


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 11:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
So ich habe mir das Problemchen mal angesehen.
Du erstellst deine Fläche falsch herum.
Versuche mal das.
Code:
  1.   glBegin(GL_QUADS);
  2.     glTexCoord2f(0, 0); glVertex2f(0, 0);
  3.     glTexCoord2f(0,-1); glVertex2f(0, ClientHeight);
  4.     glTexCoord2f(1,-1); glVertex2f(ClientWidth, ClientHeight);
  5.     glTexCoord2f(1, 0); glVertex2f(ClientWidth, 0);
  6.   glEnd;

Du könntest aber auch Backfaceculling ausstellen. Was aber bei gewissen Grafikkarten geschwindigkeit kostet.

Die rote Färbung deiner Fläche kommt ganz einfach daher, dass du für die FPS Anzeige glColor aufrufst. Das überträgt sich natürlich auch auf deine Fläche. Rufe vor dem Rendern deiner Fläche (code oben) glColor3f(1, 1, 1); auf. Der Text oben wird evtl. dann nicht mehr sichtbar sein aber das liegt daran, dass man weiß auf weiß so schlecht sieht. ;)

Noch ein Hinweis. Du verwendest in deinem Fenster die Openg15.pas glBMP verwendet aber intern die Opengl12.pas von Lischke. Ich schätze mal, dass du das deiner geändert hast. Packe solche von dir veränderten Header am besten in deine Zip mit hinein. Das erspart uns die arbeit.

Zu dem Problem mit den Texturen.
Verändere mal in der glBMP.pas in GenTextures folgende Zeilen.
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA8, ...);
Damit weißt du OpenGL direkt an, das er die Texturen in 32Bit auf der Grafikkarte abzulegen hat. Das bitte bei beiden Aufrufen von gluBuild2DMipmaps.

Allerdings sofern du dich "nur" auf 2D beschränkst empfehle ich dir eher GDI zu verwenden. Eben wegen solchen Dingen. Allerdings wenn du später noch Effekte jeglicher Art hinzufügen willst oder einfach nur OpenGL lernen willst dann solltest du bei OpenGL bleiben. Aber wenn nicht, dann erschwert es deine Sache nur unnötig.

[edit] Ach ja. Woher hast du das geile Bild mit den Smileys?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 12:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
vielen dank...also...das mit dem quad stimmt jetzt...war wirklich verkehrt rum :)
die rotfärbung ist auch weg, das bild ist und bleibt kacke (auch mit veränderung)
könnt's an der Voodoo3 liegen?? (obwohl eine ati rage das pic genau gleich scheisse anzeigt)

ich nutze opengl um es 1. zu lernen und 2. flackert das bei animationen nicht so wie der standart canvas...falls allerdings nix mit opengl daraus wird, steig ich wohl oder übel mit dem standart-canvas dahinter

zum pic mit den smilies :)

http://www.deviantart.com/view/597304/
achtung...kommt grad in voller grösse daher :)

ev. auch mal mein bescheidenes zeuch angucken *werbungmach*
http://scoregraphic.deviantart.com

_________________
Jailbird


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 13:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Jau danke für den Links. :)
Deine sehen auch nicht shlecht aus.

Ich glaube mal auch, dass es an der Voodoo3 liegt. Bei mir (Radeon 9500 Pro) mit den Quellen sah das wie original aus. Als würde ich das Bild direkt geöffnet haben. Es kann ein, dass die V3 und die Rage eine Beschränkung bei den Texturen haben.

Zum Thema Flackern bei GDI.
Bei GDI sollte man nie direkt ins Fenster zeichnen. Da es dadurch richtig langsam wird und nebenbei flackert es ohne Ende. Um es vernünftig einsetzen zu können muss du das schon von Hand doppelt buffern. Also zwei getrennte Bitmaps. Dann klappts auch mitm Nachbarn. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 13:35 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Voodoo 3 unterstützt nur 256*256 Texturen mit 16 Bit Farbtiefe. Intern wird glaube ich mit 21 Bit gerechnet aber daran wird es wohl liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
na dann ist das thema opengl wohl gestorben :( mir ist schon klar, dass die V3 veraltet ist, allerdings soll das game keine wahnsinnigen hardware-anforderungen stellen und imho ist das so überschritten.

mach ich halt gdi-kacke :)

manuelles doublebuffering = 1 bitmap zeigt an, auf das andere wird gezeichnet, dann ein "flip visibility"...oder? das hab ich auf alle fälle so verstanden :D

_________________
Jailbird


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 20:14 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
du kannst acuh so frei sein und die max. texture size auslesen. dann beginnst du die texturen beim einlesen aufzuteilen und dann beim anzeigen wieder zusammenzusetzen - wäre jedenfalls eine idee.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 01, 2003 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Jailbird hat geschrieben:
na dann ist das thema opengl wohl gestorben :( mir ist schon klar, dass die V3 veraltet ist, allerdings soll das game keine wahnsinnigen hardware-anforderungen stellen und imho ist das so überschritten.


Immer mit der Ruhe...es ist noch nicht alles verloren!Selbst mit 16-Bit dürfte obiges Bild nicht zustandekommen, und es gibt einige Leuten bei denen selbst mein recht anspruchsvolles Napalmbomber3D auf ner V3 ohne Probleme in ansprechender Qualität funzt.

Ein 2D-Adventure, das ja graphisch nicht viel mehr macht als ein paar Sprites (teilweise mit Alphamasking) darzustellen, sollte deshalb auch auf einer V3 ohne Probleme laufen (wie andere aufwendigere OpenGL-Titel) auch.Versuchs evtl. auch ganz einfach mal mit ner anderen Texturenlibrary, wie z.B. der von Jan Horn (gibts auff http://www.sulaco.co.za , und findet sich dort unter OpenGL).

Und die Sache mit der maximalen Texturengröße von 256x256-Pixeln lässt sich auch umgehen, in dem du z.B. ne Routine schreibst die beim Programmstart ne größere Textur in 256x256-große Teile zerlegt (oder du machst es von Hand), und eine Routine die dann z.B. deine Hintergründe aus diesen Stückchen anzeigt.

Ich empfehle dir also auf jeden Fall bei OpenGL zu bleiben, zumal die GDI langsamer ist, und bei weitem nicht die Funktionalität bietet die man bei OpenGL hat, wie z.B. einfaches Alphamasking, umfangreiches Blending, usw.Wenn du nämlich wirklich nur die GDI nutzt, kann es im Endeffekt sogar sein das die Hardwareanforderungen höher liegen, zumal sich z.B. viele moderne Grafikkarten in Sachen 2D via GDI ggü. älteren Vertretern die da noch beschleunigt haben recht schlecht schlagen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 02, 2003 09:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Da Bild zerteilen dürfte wohl die beste Lösung sein. Beim alten UT wurde das mit dem Bild der Erde im Hintergrund von einigen Leveln auch gemacht. Das waren eigentlich vier Texturen. Oder du könntest auch versuchen, daß Logo selber mit OpenGL Befehlen zu zeichnen. Dann wäre es unabhängig von der Auflösung immer scharf. Für den Text gibt es spezielle Befehle, die auch in irgendeinen Tutorial auf der Seite hier erklärt werden, glaube ich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 02, 2003 09:56 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
joa...so einen bild-zerteiler hab ich mir mal gebastelt (schon eine weile her)

muss ich jetzt einfach anstatt des einzelnen hintergrund-quads z.b. 4 quads nehmen?

der vorschlag, das logo zu zeichnen hab ich zur kenntnis genommen, da aber später genau auf dieses quad die hintergrund-texturen kommen, macht's keinen grossen sinn, da viel zeit zu investieren :) aber sonst geb ich dir natürlich recht

_________________
Jailbird


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 02, 2003 10:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Jailbird hat geschrieben:
muss ich jetzt einfach anstatt des einzelnen hintergrund-quads z.b. 4 quads nehmen?

So ungefähr.Wenn ich ein 2D-Adventure in OpenGL zu entwickeln hätte, würde ich ungefähr so vorgehen :

1.) Hintergründe ganz normal mit einem 1.33er Ratio zeichnen (also z.B. 800x600 Pixel groß)
2.) Hintergrund vor dem Speichern im Bildbearbeitungsprogramm auf 2^n*2^n bringen, also z.B. auf 512x512 Pixel schrumpfen (machen viele kommerzielle Programm auch so)
3.) Dieses 512x512-Bild beim Programmstart in 4 256x256er Texturen zerlegen.
4.) Wie du gesagt hast statt einem Quad dann 4 Quads mit den 4 256er Texturen als Hintergrund zeichnen, so dass am Ende wieder ein 1.33er Ratio herauskommt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 02, 2003 11:42 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 30, 2003 11:56
Beiträge: 37
Wohnort: Wil, Switzerland
auf gut deutsch verzieh ich dann das pic also doppelt. erst beim speichern, dann beim zeichnen nochmals...umgehen könnte man das höchstens durch kleinere texturen, aber hab grad gerechnet, dann müsste ich 32x32 nehmen, damit's 2^n x 2^n wär...

edit: hab jetzt mal die vorgeschlagene variante gemacht. 512x512 auf 4 256x256 verteilt und aufgepappt. das ganze sieht schon um ein stück besser aus, gut ist aber immer noch ein apfel :)

bringt's was, wenn ich die textur nur auf 128x128 nehm?

_________________
Jailbird


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


Wer ist online?

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