Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

08.10.2008, 14:03

glBitmap

Hi,

kurze Frage: wie erhält man die Größe (with, height) des aktuellen Bitmaps in OpenGL?

Ich möchte nämlich mit "wglUseFontBitmaps" einen Font erstellen und dann diesen in eine eigene Texture speichern, dazu brauche ich aber auch die Größe

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

08.10.2008, 14:16

Du willst die Dimension eines Glyphs? Ansonsten versteh ich die Frage nicht, welches "aktuelle" Bitmap meinst du denn?
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

08.10.2008, 14:45

wglUseFontBitmaps speichert alle Bitmaps (glBitmap) in "glLists".
Wenn ich also nun einer dieser glLists aufrufe (glCallList) dann will ich von dem darin enthaltene Bitmap die Größe haben

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

08.10.2008, 14:54

Zitat von »"LukasBanana"«

wglUseFontBitmaps speichert alle Bitmaps (glBitmap) in "glLists".


Korrekt.

Zitat von »"LukasBanana"«


Wenn ich also nun einer dieser glLists aufrufe (glCallList) dann will ich von dem darin enthaltene Bitmap die Größe haben


Die Breite entspricht dort gmBlackBoxX und die Höhe gmBlackBoxY, aus der Struktur GLYPHMETRICS.
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

08.10.2008, 15:05

Gut, und wie erhalte ich die aktuellen GLYPHMETRICS Struktur Werte?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

08.10.2008, 15:11

Über einen Aufruf von GetGlyphOutline.
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

08.10.2008, 16:02

Also ich hab' das jetzt wie folgt aber es kommt für Breite nur 0 raus.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Load font using "wglUseFontBitmaps" ...

    
    std::string Text = "Hallo Welt";
    
    GLYPHMETRICS Metrics;
    MAT2 Mat;
    
    memset(&Metrics, 0, sizeof(GLYPHMETRICS));
    
    glListBase(FontID); // FontID = glGenLists(256)

    
    for (int i = 0; i < Text.size(); ++i)
    {
        glCallList((unsigned int)Text[i]);
        
        GetGlyphOutline(hDC, (int)Text[i], GGO_BITMAP, &Metrics, 0, 0, &Mat);
        
        Width += Metrics.gmBlackBoxX;
    }
    
    Height = Metrics.gmBlackBoxY;

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

08.10.2008, 16:23

Du musst den entsprechenden Font, selbstverständlich, in deinen Devicecontext selektieren. Deshalb macht es auch keinen Sinn die Informationen beim Rendern auszulesen. Besser wärs z.B. beim erzeugen der Displayliste (hier wglUseFontBitmaps).
Leider ist es nicht möglich über "OpenGL" Wege die Texturdimensionen zu bekommen. Da das Kommandoset, in den kompilierten Listen, vermutlich die Textur "un"-bindet. Aber du kannsts ja mal auf gut Glück versuchen (siehe glGetTexLevelParameter).
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

9

08.10.2008, 18:08

Also dann müsste es so aussehen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Load font using "wglUseFontBitmaps" ...

    
    std::string Text = "Hallo Welt";
    
    GLYPHMETRICS Metrics;
    MAT2 Mat;
    
    memset(&Metrics, 0, sizeof(GLYPHMETRICS));
    
    HFONT hOldFont = (HFONT)SelectObject(hDC, hFont_);
    
    glListBase(FontID); // FontID = glGenLists(256)

    
    for (int i = 0; i < Text.size(); ++i)
    {
        glCallList((unsigned int)Text[i]);
       
        GetGlyphOutline(hDC, (int)Text[i], GGO_BITMAP, &Metrics, 0, 0, &Mat);
       
        Width += Metrics.gmBlackBoxX;
    }
    
    Height = Metrics.gmBlackBoxY;
    
    SelectObject(hDC, hOldFont);

Sry dass ich so blöd nachfrage und immer mein Code Beispiel zeige, aber bei einigen WinAPI Funktionen ohne gutem Beispiel hilft mir eine einfache Beschreibung der parameter nicht sehr viel weiter :oops:

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

08.10.2008, 18:48

Okay, ich hab's jetzt hinbekommen.
Allerdings mit einer völlig anderen Funktion.
Danke trotzdem :)

Ich hab's mit "GetCharWidth" gemacht, klingt ja irgend wie auch logisch oder?! ;)

Werbeanzeige