2011-08-21 11 views
6

मैं सी ++, एसडीएल और ओपन के साथ एक सरल 2 डी प्लेटफ़ॉर्मर बनाने रहा हूँ और अब मैं करने के लिए प्रदर्शन पाठ स्क्रीन, उदा चाहते हैं अंक, टाइमर, सरल संदेश।सरल पाठ (भरमार के बिना)

विभिन्न साइट्स पर मैंने पढ़ा है कि बिटमैप फ़ॉन्ट्स शायद इसके लिए जाने का तरीका होगा, लेकिन क्या कोई मुझे कृपया एक सरल, आसान समझने के लिए उदाहरण देगा कि ओपनजीएल में उन्हें टेस्ट-मैसेज आउटपुट करने के लिए कैसे उपयोग किया जाए स्क्रीन पर?

संपादित करें: मुझे कुछ दिलचस्प, एफटीजीएल मिला। ट्यूटोरियल में दूसरा कोड (दूसरा लिंक) बहुत सरल दिखता है। इसे एटीएम पर काम नहीं मिल सका लेकिन बाद में वापस जायेगा।

एफटीजीएल एक नि: शुल्क क्रॉस-प्लेटफार्म ओपन सोर्स सी ++ लाइब्रेरी है जो ओपनजीएल अनुप्रयोगों में प्रतिपादन फोंट को सरल बनाने के लिए फ्रीटपे 2 का उपयोग करता है। एफटीजीएल बिटमैप्स, पिक्समैप्स, बनावट मानचित्र, रूपरेखा, बहुभुज जाल, और extruded बहुभुज प्रतिपादन मोड का समर्थन करता है।

  1. http://sourceforge.net/projects/ftgl/
  2. http://ftgl.sourceforge.net/docs/html/ftgl-tutorial.html
  3. http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/

उत्तर

0

आप सभी पात्रों आप उपयोग करना चाहते हैं, एक बिटमैप छवि बनाने के लिए है। एक निश्चित चौड़ाई फ़ॉन्ट के साथ सबसे आसान तरीका है। फिर प्रत्येक पत्र के लिए आप बनावट के उस हिस्से को बांधते हैं। मैं/ओपन साल पहले पास्कल में इस तरह के कोड लिखा है, इसके लिए खोज और यहाँ पोस्ट

संपादित होगा कोड

procedure DisplayString(str: string; l: integer; active: integer; align: integer); 
var i,n: integer; 
s: string; 
begin 
    glPushMatrix; 
    glTranslatef(0,-l,0); 
    if align=1 then glTranslatef(-15,0,0); //left alignment 
    if align=3 then glTranslatef(15,0,0);//right aligment 
    s:=uppercase(str); // the font is uppercase only 
    for i:=1 to length(str)-4 do begin 
    n:=ord(s[i]); // get the ASCII code of letter 
    glTranslatef(1,0,0); 
    if n=32 then continue; //space 
    if (n>=48) and (n<=58) then n:=n-47; // translate ascii code to the 
    if (n>=65) and (n<=90) then n:=n-53; // corresponding position in the bitmap 
     if active=0 then glBindTexture(GL_TEXTURE_2D, font2) // two different font files used 
    else glBindTexture(GL_TEXTURE_2D, font); 
    glBegin(GL_QUADS); // 1850 is the total width of the bitmap image, 50 is one character 
    glTexCoord2f(((n-1)*50/1850)-1, 0.0); glVertex3f(0.0, 0.0, 1.0); 
    glTexCoord2f((n*50/1850)-1, 0.0); glVertex3f(1.0, 0.0, 1.0); 
    glTexCoord2f((n*50/1850)-1, 1.0); glVertex3f(1.0, 1.0, 1.0); 
    glTexCoord2f(((n-1)*50/1850)-1, 1.0); glVertex3f(0.0, 1.0, 1.0); 
    glEnd(); 
    end; 
    glPopMatrix; 
end; 
+0

नहीं काफी यकीन है कि यह मैं क्या बात कर रहा हूँ है। मैं कुछ उपलब्ध फ़ॉन्ट, जैसे एरियल, वर्दान इत्यादि का उपयोग क्यों नहीं कर सकता? – Ben

+5

क्योंकि ओपनजीएल उन्हें प्रस्तुत नहीं कर सकता है। आप इसके लिए additioanl पुस्तकालयों का उपयोग कर सकते हैं। इस FAQ को देखें: http://www.opengl.org/resources/faq/technical/fonts.htm –

-2

मैं बिटमैप फ़ॉन्ट भरमार में उपलब्ध हैं उपयोग किया जाता है। JOGL में संबंधित कॉल (जावा + ओपन) कर रहे हैं:

GLU glu = new GLU(); 
GLUT glut = new GLUT(); 
GL gl = drawable.getGL(); 
gl.glRasterPos3f(x, y, z); // move to (x, y, z) for the next text output 
glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, "Message"); 
gl.glRasterPos3f (x2, y2, z2); 
glut.glutBitmapCharacter (GLUT.BITMAP_HELVETICA_18, 'X'); 

यह निश्चित रूप से ओपन + सी ++ आसानी से अनुकूलित किया जा सकता।

+2

मैं एसडीएल का उपयोग कर रहा हूं, जीएलयूटी नहीं। – Ben

1

जब आप एसडीएल का उपयोग करते हैं तो पहले से ही SDL_ttf क्यों नहीं जोड़ते?

SDL_ttf एक ट्रू टाइप फ़ॉन्ट प्रतिपादन पुस्तकालय कि एसडीएल पुस्तकालय के साथ लगभग के रूप में पोर्टेबल प्रयोग किया जाता है, और है। यह ट्रू टाइप फ़ॉन्ट डेटा को संभालने के लिए freetype2 पर निर्भर करता है। यह एक प्रोग्रामर को कई ट्रू टाइप फोंट का उपयोग करने के लिए एक फ़ॉन्ट प्रतिपादन नियमित रूप से कोड किए बिना अनुमति देता है। के साथ रूपरेखा फोंट और एंटीअलाइजिंग की शक्ति, उच्च गुणवत्ता वाले टेक्स्ट आउटपुट को बिना किसी प्रयास के प्राप्त किया जा सकता है।

2

आप SDL_gfx उपयोग कर सकते हैं, यह कर सकते हैं उत्पादन पाठ इस तरह बिटमैप फोंट का उपयोग कर:

#include <SDL/SDL_gfxPrimitives.h> 
#include <SDL/SDL_gfxPrimitives_font.h> 

const char *text = "text to render"; 
stringColor(sdlSurface, x, y, text, 0xff0000ff); 
संबंधित मुद्दे