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

Aktuelle Zeit: Mi Jul 16, 2025 18:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: Mi Mär 08, 2006 15:41 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Hi! Hatte irgenwo in dem Forum die gleiche Frage gefunden, sie wurde auch beantwortet mit ner .pas zum downloaden. Hab mir die auch gesogen und mal in C++ umgewandelt für mein Prog. Ich habs bereits geschafft .bmps,... mit SDL auf ein Surface zu laden und dann auf ein Quad auszugeben. (Info: Ich arbeite mit glOrtho). Nur arbeite ich mit der SDL_Ttf, bereits eingebunden und so, keine Fehlermeldungen, allerdings seh ich trotzdem nur nen weißes Quad. Daneben ein Test-Quad mit ner .bmp, das ohne Probs funtzt.

TTF_Font *font;
SDL_Surface *image;
GLuint Tex_Font;

[viel code dazwischen]

Code:
  1.  
  2.     if (!My_SDL_Init()) { return 1; }
  3.     if (TTF_Init() < 0) { return 1; }
  4.     if (!My_GL_Init()) { return 1; }
  5.     if (!PreLoadTextures()) { return 1; }
  6.  
  7.         font = TTF_OpenFont("data/Vera.ttf" , 10);
  8.     if (!font) { return 1; }
  9.     TTF_SetFontStyle( font, 0 );
  10.         SDL_Color color={0,1,0}, bgcolor={0xff,0xff,0xff};
  11.  
  12.     if(!(image =TTF_RenderText_Shaded(font,"Hello World!",color,bgcolor))) { return 0; }
  13.  
  14.         glGenTextures(1, &Tex_Font);
  15.         glBindTexture(GL_TEXTURE_2D, Tex_Font);
  16.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  17.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  18.         gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->w, image->h,GL_RGB, GL_UNSIGNED_BYTE, image->pixels);
  19.  
  20. [ in Render-Schleife, Create_Quad meine Funktion x, y, w, h]
  21.         glBindTexture(GL_TEXTURE_2D, Tex_Font);
  22.         Create_Quad(1.0f, 1.0f, 5.0f, 6.0f);
  23.  


PS: Phöbus, falls du das liest, das war der Auslöser (der letzte Tropfen, der das Fass zum überlaufen brachte), dass ich wirklich angefangen hab ^^
Zitat:
Das sollte keine Aufforderung sein C zu lernen Wink Wenn Du PHP kannst und Dir eine Liste mit Datentypen neben dem Rechner legt und die "Pointerproblematik" kennst, dann "kannst" Du bereits C zumindest lesen. C# selbst hat IMAO übrigens mehr mit Delphi gemeinsam als C und C++ zusammen. Aber gut, immerschön zu sehen, dass der SDL_Mixer bei Dir geht... und ich endlich weiß, dass mein Sample auch nicht nur bei mir läuft Wink


Zuletzt geändert von Dark_Ruler am Mi Mär 08, 2006 17:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Warum das Programm anstürzt sobald du die Größe der Surface änderst weiß ich nicht. Muss aber auch gestehen, dass ich von SDL keine wirkliche Ahnung habe. Dafür aber ein bisschen von Texturen. Und die "weiße Textur" ist ein eindeutiges Anzeichen dafür, dass OpenGL die Textur nicht mit Daten füllen konnte. Da du nur in 2D arbeitest wäre es für dich evtl auch sinnvoll als Target für die NPOT (Non Power Of Two) Texture GL_TEXTURE_RECTANGLE_ARB zu benutzen. Diese Konstante ist Bestandteil von 3 fast identischen Extensions. Diese kommen dann auch mit solchen Texturen klar.

Könnte in etwa so aussehen.
Code:
  1.         glGenTextures(1, &Tex_Font);
  2.         glBindTexture(GL_TEXTURE_RECTANGLE_ARB, Tex_Font);
  3.         glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  4.         glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  5.         glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
  6.  
  7. [ in Render-Schleife, Create_Quad meine Funktion x, y, w, h]
  8.         glBindTexture(GL_TEXTURE_RECTANGLE_ARB, Tex_Font);
  9.         Create_Quad(1.0f, 1.0f, 5.0f, 6.0f);


Bei Texturrectangle solltest du wegen der TexturKoodinaten aufpassen. Die sind nicht mehr im Bereich von 0 bis 1 sonder von 0 bis Höhe bzw von 0 bis Breite. Also Pixelangaben. Du solltest auch überprüfen ob die Extensions GL_(ARB|EXT|NV)_texture_rectange überhupt unterstützt werden. Sonst siehst du wieder nichts mehr. Bei OpenGL 2.0 oder der Extension GL_ARB_texture_non_power_of_two könntest du auch wieder GL_TEXTURE_2D benutzen, da ab diesem Zeitpunkt auch NPOTs unterstützt werden. Koordinaten dann aber wieder 0 bis 1.

Eine andere Alternative wäre das kleine Bild auf ein Konformes zu zeichnen und dann diesen Ausschnitt zu benutzen. So könntest du mehrere Texte auf eine Textur bringen. Das ist auch praktisch. Weiß aber net ob SDL das mit sich machen lässt.

PS: zum Thema OpenGL und SDL bist du hier auf jeden Fall gut aufgehoben. Da spielt die Sprache nur eine untergeordnete Rolle.

PPS: Hoffe das waren jetzt nicht zu viele Texturefacts.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 16:19 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Hi! Danke schon mal für deine Antwort. GL_TEXTURE_RECTANGLE_ARB kennt der Compiler nicht (weißt du bei welchem header das dabei ist?), verwende die sdl_opengl.h wo dann glaux und glu gleich dabei ist, allerdings seh ich schon ich muss mal den Code mit GluMipMaps umproggen weil es ja wirklich wahrscheinlich nur um die Potenzzahl von 2 geht. Ich melde mich später nochmal.

EDIT: das mit dem auf konformes bild zu zeichnen geht meiner meinung ziemlich sicher mit SDL_Blit, aber möchte eigentlich schon eher "reinen" Text rendern.

Ich such mal Tuts für MipMaps und wenn ich das geschnallt habe meld ich mich wieder, wenn ichs immer noch nicht schaffe meld ich mich!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 16:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also auf der Registry Seite von SGI findest du immer die neusten Header für C++. Wie diese einzubinden sind und ob das so überhaupt geht kann ich dir allerdings nicht sagen. Der Header ist auch die Vorlange für unseren Delphiheader.

gluMipMaps sollte deinen Textur anpassen um sie Standardkonform zu gestalten. Was ich persönlich für nicht so gut empfinde, da aktiv die Texturdaten verändert werden. Und MipMaps benötigst du für den Orthomodus sowieso nicht. Und dadurch wird es nur wesentlich langsamer als über glTexImage2D.

EDIT: Ach ja. Es kann natürlich sein, dass bei dir die Konstanten anders heißen. Oder ich mich auch verschrieben habe. Mache das immer so aus dem Kopf. Sie gehen aber immer in etwa so in die Richtung. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Also ich hab das Problem jetzt nicht genau verfolgt, versuch trotzdem mal meinen Senf dazu abzugeben.
1. du kannst nicht einfach die Dimensionen eines SDL_Surface ändern. Bzw. du kannst es schon, allerdings verändert das nicht die Größe deines Bildes. Es kann nur zu Pointerproblemen führen und damit zum Absturz. D.h. wenn du ein 32x32 Bild mit surface->w/h auf 64x64 setzt in RGB sagst du dem Surface, dass es 64x64x3 Bytes hat, es hat aber nur 32x32x3 Bytes und somit wird über die wahren Dimensionen hinausgelesen => Absturz...

2. Wenn du ein Surface in seiner Größe verändern willst, hilft leider kein einfacher Blit. Dazu musst die die Funktion SDL_SoftStretch oder so verwenden, funktioniert so ähnlich, ist allerdings ohne Garantie zu benutzen, da sie zwar vorhanden ist, aber nur inoffiziell (hab sie auch nur durch Zufall gefunden) ...

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 17:04 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Kommt vielleicht etwas spät aber denoch:
Im DGLSDKSVN findest du mit easySDLFont.pas einen Texturmanager der mithilfe von SDL_TTF passende Texturfonts erstellt.
Könnte dir vielleicht helfen.

Zum Stretchen einer Surface:
Dazu gibt es meines Wissens keine offizille Funktion.
Das was Shaijan meint scheint eher ein Makro zu sein.
Bei den Jedi-SDL-Headern ist z.b. auch so eine Funktion dabei.

Als Alternative bietet es sich an einfach eine grössere Surface zu nehmen. Dann hast du zwar nicht ausgefüllte Bereiche, diese kannst du aber per Texturkoordinaten weglassen.


Zum C:
Natürlich ist dies primär ein Pascal-Forum, denoch bzw. zum Glück sind die OpenGL-Befehle gleich, sodass du OpenGL-Fragen jederzeit in jeder Sprache stellen kannst.
Nur C-Probleme solltest du vielleicht in andere Foren stellen, wobei selbst hier genug Cler rumkreuchen, die es dir beantworten könnten.
Kurzum: Fühle dich wie Zuhause.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 17:09 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Lossy eX hat geschrieben:
Also auf der Registry Seite von SGI findest du immer die neusten Header für C++. Wie diese einzubinden sind und ob das so überhaupt geht kann ich dir allerdings nicht sagen. Der Header ist auch die Vorlange für unseren Delphiheader.

gluMipMaps sollte deinen Textur anpassen um sie Standardkonform zu gestalten. Was ich persönlich für nicht so gut empfinde, da aktiv die Texturdaten verändert werden. Und MipMaps benötigst du für den Orthomodus sowieso nicht. Und dadurch wird es nur wesentlich langsamer als über glTexImage2D.

EDIT: Ach ja. Es kann natürlich sein, dass bei dir die Konstanten anders heißen. Oder ich mich auch verschrieben habe. Mache das immer so aus dem Kopf. Sie gehen aber immer in etwa so in die Richtung. ;-)


So. Hab gerade MipMaps umgeproggt und ich merke wie das bmp "verschwommen" wird. Da du ja meinst ich sollte MipMaps nicht verwenden werd ich sie später wieder rausnehmen, aber zum Text schreiben möcht ich die jetzt mal drin lassen. Ich seh jetzt also ne "Textur" auf meinem Quad, hintergrund Schwarz. Aber sieht nicht mal ansatzweise wie Text aus, aber krass gibt sowas wie nen Schatten ^^. Hab den Code danach im 1. Post geändert.

Hab nen Screen hochgeladen - hab quali runtergedrückt wegen Größe, nicht wundern, aber das eingekreiste zeugs sieht bei mir zu 99% gleich aus, das liegt nicht am jpeg :wink:


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 17:17 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
@Shaijan Ja sowas dachte ich mir schon, ich benötige sowas allerdings auch nicht wirklich, habs jetzt ja mit MipMaps überflüssig gemacht.
@i0n0s Dann werd ich mich mal hier zu OpenGL Sachen austoben :) "Im DGLSDKSVN findest du mit easySDLFont.pas einen Texturmanager der mithilfe von SDL_TTF passende Texturfonts erstellt." klingt interessant, aber ich glaub das ist genau die .pas von der ein Teil meines Codes stammt. (hab ich im anfangspost erwähnt)



Das Potenz 2 Prob wurde jetzt ja ausgemerzt. Nur wunder ich mich warum ich so ne seltsam textur bekomme.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

@ionos
Die Funktion SDL_SoftStretch ist eine richtige Funktion, kann man im SDL-source nachsehen, allerdings ist sie nicht offiziell wie ich schon sagte... kommt denke ich aus der gleichnamigen Library ...

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 16:24 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Hmm wollte das mit GL_TEXTURE_RECTANGLE_ARB grad probieren, hab zwar den Header eingebunden, allerdings erkennt er das Attribut trotzdem nicht. (hab den Header der bei DEV-C++ mitgeliefert wird verwendet)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Das sollte nicht so schlimm sein. Texture_rectangle besteht zum Glück auch nur aus 4 Konstanten.

Code:
  1.   GL_TEXTURE_RECTANGLE_ARB = $84F5;
  2.   GL_TEXTURE_BINDING_RECTANGLE_ARB = $84F6;
  3.   GL_PROXY_TEXTURE_RECTANGLE_ARB = $84F7;
  4.   GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = $84F8;


Denke mal sollte jetzt recht einfach sein. Als Target benutzt du lediglich die Oberste. Die 2te und 4te sind zum Abfragen mittels glGet* und die Proxy ist eine Proxytrget zum ausprobieren ob alles klappt. Eher unwichtig.
Die Konstanten bei NV und EXT sind gleich.

Du müsstest jetzt nur noch testen ob die Extensionstrings enthalten sind.
Code:
  1.   Buffer := glGetString(GL_EXTENSIONS);

Darin sollte dann der Text "GL_ARB_texture_rectangle", "GL_NV_texture_rectangle" oder "GL_EXT_texture_rectangle" enthalten sein. Damit wird sie dann unterstützt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 16:39 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm...probier mal den von uns aus.

Ich hatte damals damit zwar probleme (bei mir ging der gar nicht los), aber ich bin auch kein echter c++ler

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 17:56 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Mal n zwischen Dankeschön für eure Hilfe / Zeit aus Innsbruck :D

Hmm soll ich

GL_TEXTURE_RECTANGLE_ARB = $84F5;
GL_TEXTURE_BINDING_RECTANGLE_ARB = $84F6;
GL_PROXY_TEXTURE_RECTANGLE_ARB = $84F7;
GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = $84F8;

in den Header oder in meine Datei einfügen? Und wenn ja, wie? Hab keine Ahnung wie ich sowas einbauen soll :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also wenn ich das recht in erinnerung habe dann geht das in C++ in etwa so.
Code:
  1. const
  2.   GL_TEXTURE_RECTANGLE_ARB = 0x84F5;
  3.   GL_TEXTURE_BINDING_RECTANGLE_ARB = 0x84F6;
  4.   GL_PROXY_TEXTURE_RECTANGLE_ARB = 0x84F7;
  5.   GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = 0x84F8;


oder über define würde das auch gehen

Code:
  1. #define GL_TEXTURE_RECTANGLE_ARB 0x84F5
  2. #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
  3. #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
  4. #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8


Wo du das hin machst ist in erster Linie dir überlassen. Wichtig ist ja nur, dass du an den entsprechenden Stellen darauf Zugriff hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 18:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Also Konstanten werden in C++ in der Regel über den Präprozessor mit #define deklariert ...
Ansonsten werden konstante Variablen so definiert:
Code:
  1.  
  2. const typ name = wert;
  3.  


Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
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.010s | 14 Queries | GZIP : On ]