움직이는 물체를 화면으로 픽셀당 기초과 glRasterPos()
문제
나는 다음과 같은 코드를 렌더링하는 텍스트 내 응용 프로그램에서는,먼저 받을에서 마우스 좌표계,다음 사용하 좌표 내의 텍스트,그래서 세상 것을 따라 내 마우스 위치:
편집: 추가 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();
}
x
고 y
이 원하는 창의 좌표 문자열입니다. glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ...)
은 단지 유틸리티 기능에서 과잉을 렌더링하는 9x15 픽셀 큰 비트맵 문자입니다.
제휴하지 않습니다 StackOverflow