문제

나는 다음과 같은 코드를 렌더링하는 텍스트 내 응용 프로그램에서는,먼저 받을에서 마우스 좌표계,다음 사용하 좌표 내의 텍스트,그래서 세상 것을 따라 내 마우스 위치:

편집: 추가 buildfont()함수 코드 예제:

GLvoid BuildFont(GLvoid)                                // Build Our Bitmap Font
{
    HFONT   font;                                       // Windows Font ID
    HFONT   oldfont;                                    // Used For Good House Keeping

    base = glGenLists(96);                              // Storage For 96 Characters

    font = CreateFont(  -12,                            // Height Of Font
                        0,                              // Width Of Font
                        0,                              // Angle Of Escapement
                        0,                              // Orientation Angle
                        FW_NORMAL,                      // Font Weight
                        FALSE,                          // Italic
                        FALSE,                          // Underline
                        FALSE,                          // Strikeout
                        ANSI_CHARSET,                   // Character Set Identifier
                        OUT_TT_PRECIS,                  // Output Precision
                        CLIP_DEFAULT_PRECIS,            // Clipping Precision
                        ANTIALIASED_QUALITY,            // Output Quality
                        FF_DONTCARE|DEFAULT_PITCH,      // Family And Pitch
                        "Verdana");                     // Font Name (if not found, its using some other font)

    oldfont = (HFONT)SelectObject(hDC, font);           // Selects The Font We Want
    wglUseFontBitmaps(hDC, 32, 96, base);               // Builds 96 Characters Starting At Character 32
    SelectObject(hDC, oldfont);                         // Selects The Font We Want
    DeleteObject(font);                                 // Delete The Font
}

GLvoid glPrint(const char *fmt, ...){
    char text[256];
    va_list ap;
    if (fmt == NULL) return;
    va_start(ap, fmt);
        vsprintf(text, fmt, ap);
    va_end(ap);
    glPushAttrib(GL_LIST_BIT);  
    glListBase(base - 32);  
    glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
    glPopAttrib();
}

...

glPushMatrix();
    glColor4f(0,0,0,1);
    // X-1 wont work because these are the world coordinates:
    glRasterPos2d(MousePosX-1, MousePosY);
    glPrint("TEST");

    glColor4f(1,1,0,1);
    glRasterPos2d(MousePosX, MousePosY);
    glPrint("TEST");
glPopMatrix();

하지만 내가 원하는 렌더링 여러 텍스트,또는 텍스트로"국경"(에서 같은 위의 코드를 시도했)또는 텍스트를 배경으로(그래서 나는 그들을 구별할 수 있는 더 나은에서 배경) 그래서 어떻게 해야 하나요?

나는 방법을 알고 있어야 나는 이동할 수 있습 픽셀,그래서 수 있을 정확하게 수정 위치에서 화면을 사용하지 않고 2d 프로젝션 보기 위에 내 3d 렌더링 투...나는 그냥 그것을 만들고 싶은 가능한 한 간단합니다.

나는 그리 쿼드 아래에 텍스트,하지만 물론 그 이후에 아직도 사용하여 세계 좌표...그래서 제가 회전 카메라 텍스트 기 따라 배경 텍스트의...나는 두려워한 유일한 솔루션을 만들의 또 다른 투영 위에서의 3d 프로젝션...

도움이 되었습니까?

해결책

여기에 작은 조각의 코드를 사용하는을 렌더링하는 일부를 디버그에서 텍스트 작은 응용 프로그램:

void
renderText(float x, float y, const char* text) {
    int viewport[4];
    glGetIntegerv(GL_VIEWPORT, viewport);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(viewport[0], viewport[2], viewport[1], viewport[3], -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRasterPos2f(x, viewport[3] - y);
    const int length = (int)strlen(text);
    for (int i = 0; i < length; ++i) {
        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, text[i]);
    }
    glMatrixMode( GL_PROJECTION );
    glPopMatrix();
    glMatrixMode( GL_MODELVIEW );   
    glPopMatrix();
}

xy 이 원하는 창의 좌표 문자열입니다. glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ...) 은 단지 유틸리티 기능에서 과잉을 렌더링하는 9x15 픽셀 큰 비트맵 문자입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top