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

Aktuelle Zeit: Mo Jul 14, 2025 05:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 09, 2006 19:29 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Hi! Also hab jetzt das zoig definiert und kann auch starten. Allerdings werden die Texturen jetzt nicht mehr geladen (Quads sind weiß). Wo könnte ich nen Fehler gemacht haben? (Hab schon GL_BGR / GL_RGB / GL_RGBA usw. austauschen probiert) Lade derzeit hauptsächlich .bmps deswegen eigentlich GL_BGR. Wird wohl eher daran liegen, dass GL_TEXTURE_RECTANGLE_ARB noch bissel mehr ist als nur die 4 definierten Konstanten.


( Code für die Standard Textur-Laderoutine, wenn die mal funtzt kann ich wieder bei der Schrifttextur weiter machen )
Code:
  1.        
  2.         glGenTextures(1, &Texture[i].Tex);
  3.         glBindTexture(GL_TEXTURE_RECTANGLE_ARB, Texture[i].Tex);
  4.         glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  5.         glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  6.         glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, temp->w, temp->h, 0, GL_BGR, GL_UNSIGNED_BYTE, temp->pixels);


Unglaublich der Aufwand für den Text ^^ Schade, dass ich nicht eine Fehlerausgabe von OpenGl bekomme, so muss ich immer raten worans scheitert :o


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Eigentlich gib es für die Fehlerausgabe auch etwas. Und zwar glGetError. Aber ich kann dir versichern. Für Texture_Rectangle genügen diese Konstanten und eigentlich sieht es so auch okay aus. Hast du auch die Koordinaten entsprechend geändert?

Du brauchst das Texture Rectangle aber auch nur für Bilder nehmen die Non Power Of Two sind. Bei allen anderen solltest du weiterhin GL_TEXTURE_2D benutzen.

Und das Problem ist jetzt nur so extem, weil du nicht Delphi benutzt. Für Delphi haben wir so ziemlich alles da. Nur so musst du es dummerweise selber alles machen.


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

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
glGetError: Hmm.. gar nicht gewusst muss ich mir mal zu Gemüte führen.

"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"

d.h. anstatt

[Meine Funktion zum Quad + Textur erstellen]
Code:
  1. void Create_Quad (float x, float y, float w, float h) {
  2.     glLoadIdentity();
  3.     glTranslatef(x, y, 0);
  4.  
  5.     glBegin(GL_QUADS);
  6.         glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
  7.         glTexCoord2f(1.0f, 0.0f); glVertex2f( w, 0.0f);
  8.         glTexCoord2f(1.0f, 1.0f); glVertex2f( w,  h);
  9.         glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f,  h);
  10.     glEnd(); }


so..

Code:
  1. void Create_Quad (float x, float y, float w, float h) {
  2.     glLoadIdentity();
  3.     glTranslatef(x, y, 0);
  4.  
  5.     glBegin(GL_QUADS);
  6.         glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
  7.         glTexCoord2f([b]h[/b], 0.0f); glVertex2f( w, 0.0f);
  8.         glTexCoord2f(h, h); glVertex2f( w,  h);
  9.         glTexCoord2f(0.0f, h); glVertex2f(0.0f,  h);
  10.     glEnd(); }


.? Funtzt auch mit der 2. Variante nicht :?


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

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
ist den w und h gleich der breite und höhe der textur ?

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 10, 2006 09:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
dark_ruler: Genau so meinte ich das bis auf, dass du bei den Texturkoordinaten nur die Höhe verwendet hast. Du müsstest dort aber für X die Breite und für Y die Höhe einsetzen. Was aber im Großen und ganzen nur zu einer komischen Darstellung führen dürte.

Sonst sieht der Code eigentlich ganz gut aus. Kann jetzt nichts entdecken was irgendwie falsch wäre oder fehlen würde. Das einzige wobei ich mir bei C++ nicht ganz so sicher bin ist glGenTextures(1, &Texture[i].Tex);. Normal erwartet er ja einen Pointer. Bin mir da aber grade absolut unschlüssig ob er den so direkt auch bekommt. Evtl solltest du dir da mal Texture[i].Tex ausgeben lassen oder im Debugger anschauen. Wenn da ne 0 drinne steht dann hat er irgendwie keine sinnvolle Textur erstellen können.

Interessant wäre da eigentlich auch noch was du für eine Grafikkarte hast? Wenn die Texture_rectangle zum Beispiel gar nicht unterstützt, dann wäre es klar warum es nicht funktioniert.


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

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
glGenTextures(1, &Texture[i].Tex); ist schon richtig, das & entspricht ja dem delphi-@

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 10, 2006 10:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Ich wusste nur nicht ob er auch in etwa ähnlich arbeitet wie in Delphi. Dabei ist dann nämlich die Frage von was er einen Pointer nimmt? Von Texture[i] oder von .Tex?


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

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
jep is wie &(Texture[i].Tex)

_________________
www.extrawurst.org


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

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Also zu

1) Den Pointern, das stimmt so. mit dem & sag ich dem Compiler dass das einer ist.
2) Meine Grafikkarte unterstützt rectangles nicht; kann ich mir auch kaum vorstellen, da ich ne ATI Radeon 9600 SE AGP [mit 128MB Speicher] hab. Und die is ja wirklich nicht steinzeit mäßig alt.
3) Zu dem ist w und h wirklich die Texturhöhe / Breite. Ist es eigentlich NICHT, sondern die Höhe und Breite des Quads, aber das sollte ja bei abweichungen einfach verzerren, oder? Ich habe trotzdem einmal getestet mit richtigen größen und hat trotzdem nicht geklappt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 10, 2006 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
2. Auf Delphi3D.net gibt es eine Liste mit Erweiterungen. Wenn du dort eine Auswählst siehst du von Welchen Karten + Treibernummer sie unterstützt wird. Und EXT_texture_rectangle wird von ATI bereits ab der 7000er unterstützt. Habe selber eine 96er und die kann es definitiv. ;-)

3. Das sollte dann in der Tat nur in verschobene Texturen resultieren.

Also an deinem Texturen erstellen liegt es nicht. Mache das auch so und habe es gerade noch mal probiert. So geht es. Aber mal was ganz anders was mir dabei aufgefallen ist. Hast du auch das texture_rectangle aktiviert? Also nicht GL_TEXTURE_2D sondern in etwa so.
Code:
  1. glEnable(GL_TEXTURE_RECTANGLE_ARB);

Ist ja ein eigenes Target muss also auch extra aktiviert werden. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 11, 2006 11:00 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
OMG es funtzt, es funtzt :D Dachte, dass glEnable(Texture2D) reicht :oops: Jetzt hab ich aber noch ein Prob mit den Texturen,

Code:
  1.  
  2. void Create_Quad (float x, float y, float w, float h, float TEX_w, float TEX_h) {
  3.     glLoadIdentity();
  4.     glTranslatef(x, y, 0);
  5.  
  6.     glBegin(GL_QUADS);
  7.         glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
  8.         glTexCoord2f(w, 0.0f); glVertex2f(w, 0.0f);
  9.         glTexCoord2f(w, h); glVertex2f(w,  h);
  10.         glTexCoord2f(0.0f, h); glVertex2f(0.0f,  h);
  11.     glEnd(); }


Wenn ich bei glTexCoord2f mit w und h (also die Breite und Höhe des Quads) einfüge, wird die Textur total verkleinert, wenn ich bei TEX_w und TEX_h die Originalgröße der Texturen angebe und damit w und h bei glTexCoord2f ersetze, ergibt das immernoch kein schönes Bild. Wenn ich nen halbwegs gutes Ergebnis haben will dividiere ich w und h durch 13, allerdings kann das ja kaum der wirklich richtige Weg sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 11, 2006 11:26 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
Der Text funtzt trotzdem nicht :(

http://jcatki.no-ip.org/SDL_ttf/SDL_ttf.html#SEC35 Hab alle Modi natürlich schon durchprobiert.

Zitat:
if(!(font = TTF_OpenFont("data/Vera.ttf", 10))) { return 2; }
TTF_SetFontStyle( font, 0 );
SDL_Color color={0,1,0}, bgcolor={0xff,0xff,0xff};

if(!(image =TTF_RenderText_Blended(font,"ABC",bgcolor))) { return 2; }

glGenTextures(1, &Tex_Font);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, Tex_Font);
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
SDL_FreeSurface(image);


Die Frage ist: Liegt der Fehler in SDL oder OpenGL? Denn ich frage ja praktisch alle möglichen SDL-Fehlerquellen ab ..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mir stellt sich gerade die Frage in welchem Format SDL den Text zurück gibt? Kommt der als RGB, RGBA oder sogar Gray zurück? Wobei Gray glaube ich nicht. Tippe vielleicht sogar auf RGBA.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 11:48 
Offline
DGL Member

Registriert: Mo Jan 09, 2006 17:31
Beiträge: 37
http://jcatki.no-ip.org/SDL_ttf/SDL_ttf.html#SEC35 mehr Infos hab ich dazu nicht gefunden. Aber hab natürlich auch schon beides probiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 13, 2006 11:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eigentlich mach ich ja sowas nur sehr ungern, aber ich poste mal meinen PrintText-Code. Der kann noch etwas mehr als nur Text ausgeben. Die Parameter erklär ich net (bisl arbeit musste dir noch machen;) )

Code:
  1. // Renders the given 0-terminatet String int the given font and color at the specified position.
  2. // hAlign and vAlign determine where the anchorpoint is positioned.
  3. void TUIManager::printText(const char *text, TTF_Font *font, GLfloat r, GLfloat g, GLfloat b, SDL_Rect *location, int hAlign, int vAlign)
  4. {
  5.     SDL_Surface *initial;
  6.     SDL_Surface *intermediary;
  7.     SDL_Color   color;
  8.     //SDL_Rect rect;
  9.     int w,h;
  10.     GLuint texture;
  11.    
  12.     if (font == NULL)
  13.     {
  14.         cerr << "Font was NULL while calling TUIManager::printText()!" << endl;
  15.         return;
  16.     };
  17.    
  18.     glPushAttrib(GL_ENABLE_BIT);
  19.    
  20.     /* Use SDL_TTF to render our text */
  21.     color.r = 255; color.g = 255; color.b = 255;
  22.     initial = TTF_RenderUTF8_Solid(font, text, color);
  23.     if (!initial)
  24.     {
  25.         SDL_FreeSurface(initial);
  26.         return;
  27.     };
  28.    
  29.     /* Convert the rendered text to a known format */
  30.     w = nextPowerOfTwo(initial->w);
  31.     h = nextPowerOfTwo(initial->h);
  32.    
  33.     intermediary = SDL_CreateRGBSurface(0, w, h, 32,
  34.             0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
  35.  
  36.     SDL_BlitSurface(initial, 0, intermediary, 0);
  37.    
  38.     glGenTextures(1, &texture);
  39.     glBindTexture(GL_TEXTURE_2D, texture);
  40.     glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_BGRA,
  41.             GL_UNSIGNED_BYTE, intermediary->pixels );
  42.    
  43.     /* GL_NEAREST looks horrible, if scaled... */
  44.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  45.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  
  46.  
  47.     glEnable(GL_TEXTURE_2D);
  48.     glColor3f(r,g,b);
  49.  
  50.     GLfloat xOff, yOff = 0.0f;
  51.    
  52.     switch(hAlign){
  53.         case GUI_FONT_CENTER:
  54.             xOff = -(initial->w / 2.0);
  55.             break;
  56.         case GUI_FONT_LEFT:
  57.             xOff = 0.0f;
  58.             break;
  59.         case GUI_FONT_RIGHT:
  60.             xOff = - initial->w;
  61.             break;
  62.     }
  63.     switch(vAlign){
  64.         case GUI_FONT_CENTER:
  65.             yOff = -(initial->h / 2.0);
  66.             break;
  67.         case GUI_FONT_TOP:
  68.             yOff = - initial->h;
  69.             break;
  70.         case GUI_FONT_BOTTOM:
  71.             yOff = 0.0;
  72.             break; 
  73.     }
  74.    
  75.     /* Draw a quad at location */
  76.     {
  77.         float initH = initial->h;
  78.         glBegin(GL_QUADS);
  79.             /* Recall that the origin is in the lower-left corner
  80.                That is why the TexCoords specify different corners
  81.                than the Vertex coords seem to. The blitting above
  82.                results in a surface with new parts below and left of the text. */
  83.             glTexCoord2f(0.0f, initH/h);
  84.                 glVertex2f(location->x     + xOff, location->y     + yOff);
  85.             glTexCoord2f(1.0f, initH/h);
  86.                 glVertex2f(location->x + w + xOff, location->y     + yOff);
  87.             glTexCoord2f(1.0f, 0.0f);
  88.                 glVertex2f(location->x + w + xOff, location->y + initH + yOff);
  89.             glTexCoord2f(0.0f, 0.0f);
  90.                 glVertex2f(location->x     + xOff, location->y + initH + yOff);
  91.         glEnd();
  92.     };
  93.    
  94.     glFinish();
  95.    
  96.     /* return the deltas in the unused w,h part of the rect */
  97.     location->w = initial->w;
  98.     location->h = initial->h;
  99.    
  100.     /* Clean up */
  101.     SDL_FreeSurface(initial);
  102.     SDL_FreeSurface(intermediary);
  103.     glDeleteTextures(1, &texture);
  104.     glColor3f(1.0f,1.0f,1.0f);
  105.     glPopAttrib();
  106. }

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


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 Vorherige  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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]