Здравствуйте, Ossto, Вы писали:
O>Вопрос такой: O>как его вывести так чтобы он был всегда в окне?
O>Собственно вопрос можно расширыть... как делаются все худы(показатели) в 3д играх (в перспективной проекции)?
Ага... Я сам долго мучился с этй же фигней
Я решил эту проблему так (типа кроссхайр-худ):
...
сначала рисую сцену
....
// теперь кроссхайр - рисовать так, чтобы не проваливался за стены =)))
// Crosshair
glPushMatrix();
glDisable(GL_DEPTH_TEST); //!!!!! Эта та самая фигня!!! Отключаем тест глубины.
glLoadIdentity();
glTranslated(0.0f,0.0f,-55.0f);
glColor3f(0.0f,1.0f,0.0f);
glBegin(GL_LINES);
glColor3f(0.0f,1.0f,0.0f);
glVertex2f(0.0f,1.0f);
glColor3f(0.0f,0.0f,0.0f);
glVertex2f(0.0f,0.1f);
glVertex2f(0.0f,-0.1f);
glColor3f(0.0f,1.0f,0.0f);
glVertex2f(0.0f,-1);
glVertex2f(1.0f,0.0f);
glColor3f(0.0f,0.0f,0.0f);
glVertex2f(0.1f,0.0f);
glVertex2f(-0.1f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex2f(-1.0f,0.0f);
glEnd();
glEnable(GL_DEPTH_TEST); // Включаем тест глубины
Здравствуйте, mksa, Вы писали:
M>Ага... Я сам долго мучился с этй же фигней M>Я решил эту проблему так (типа кроссхайр-худ):
M>
M> код ...
M>
А вот именно со шрифтом у меня не получилось... ежели делать его через
font = CreateFont( -24, // Высота фонта ( НОВОЕ )
0, // Ширина фонта
0, // Угол отношения
0, // Угол Наклона
FW_BOLD, // Ширина шрифта
FALSE, // Курсив
FALSE, // Подчеркивание
FALSE, // Перечеркивание
DEFAULT_CHARSET, // Идентификатор набора символов
OUT_TT_PRECIS, // Точность вывода
CLIP_DEFAULT_PRECIS, // Точность отсечения
ANTIALIASED_QUALITY, // Качество вывода
FF_SWISS|DEFAULT_PITCH, // Семейство и Шаг
"MS San Serif"); // Имя шрифта
SelectObject(hDC, font); // Выбрать шрифт, созданный нами ( НОВОЕ )
wglUseFontBitmaps(hDC, 32, 96, base);
то такая феня не проходит... не видно его и усе тут.... то есть вообще нигде не видно....
а вот объекты сделанные таким макаром отлично лежат и не дергаются
Здравствуйте, Ossto, Вы писали:
O>Вопрос такой: O>как его вывести так чтобы он был всегда в окне?
O>Собственно вопрос можно расширыть... как делаются все худы(показатели) в 3д играх (в перспективной проекции)?
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-10,10,-10,10);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//Рисуем что-нибудь в 2D
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(67.5, 4/3, 1.0, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//Преобразования камеры
//Сразу оговорюсь: Моя камера не шутерная, а для стратегий/РПГ
glTranslatef(0,0,-distance);
glRotatef(height_angle,1,0,0);
glRotatef(azimuth_angle,0,1,0);
glTranslatef(camx,0,camy);
//Рисуем в 3D
Здравствуйте, Ossto, Вы писали:
O>А вот именно со шрифтом у меня не получилось... ежели делать его через O>
O>font = CreateFont( -24, // Высота фонта ( НОВОЕ )
O> 0, // Ширина фонта
O> 0, // Угол отношения
O> 0, // Угол Наклона
O> FW_BOLD, // Ширина шрифта
O> FALSE, // Курсив
O> FALSE, // Подчеркивание
O> FALSE, // Перечеркивание
O> DEFAULT_CHARSET, // Идентификатор набора символов
O> OUT_TT_PRECIS, // Точность вывода
O> CLIP_DEFAULT_PRECIS, // Точность отсечения
O> ANTIALIASED_QUALITY, // Качество вывода
O> FF_SWISS|DEFAULT_PITCH, // Семейство и Шаг
O> "MS San Serif"); // Имя шрифта
O> SelectObject(hDC, font); // Выбрать шрифт, созданный нами ( НОВОЕ )
O> wglUseFontBitmaps(hDC, 32, 96, base);
O>
O>то такая феня не проходит... не видно его и усе тут.... то есть вообще нигде не видно.... O>а вот объекты сделанные таким макаром отлично лежат и не дергаются
// Call first before printing
GLvoid PrintBegin()
{
//--------------------------------------------------------------//
//- START ORTHOGRAPHIC MODE ------------------------------------//
//--------------------------------------------------------------//
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION); //Select the projection matrix
glPushMatrix(); //Store the projection matrix
glLoadIdentity(); //Reset the projection matrix
glOrtho(0,m_ClientRect.right,0,m_ClientRect.bottom,-1,1); //Set up an ortho screen
glMatrixMode(GL_MODELVIEW); //Select the modelview matrix
}
// Call after printing
GLvoid PrintEnd()
{
glMatrixMode(GL_PROJECTION); //Select the projection matrix
glPopMatrix(); //Restore the old projection matrix
glMatrixMode(GL_MODELVIEW); //Select the modelview matrix
glEnable(GL_DEPTH_TEST);
//--------------------------------------------------------------//
//- END ORTHOGRAPHIC MODE --------------------------------------//
//--------------------------------------------------------------//
}
// Print text on OpenGL screen
GLvoid Print(GLint x, GLint y, const char *fmt, ...) // Custom GL "Print" Routine
{
char text[256]; // Holds Our String
va_list ap; // Pointer To List Of Argumentsif (fmt == NULL) // If There's No Textreturn; // Do Nothing
va_start(ap, fmt); // Parses The String For Variables
vsprintf(text, fmt, ap); // And Converts Symbols To Actual Numbers
va_end(ap); // Results Are Stored In Text
glPushMatrix(); // Store The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
glRasterPos2d(x, y);
glListBase(m_base - 32); // Sets The Base Character to 32
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
glPopMatrix(); // Restore The Old Projection Matrix
}
GLvoid BuildFont(GLvoid) // Build Our Bitmap Font
{
HFONT font; // Windows Font ID
HFONT oldfont; // Used For Good House Keeping
m_base = glGenLists(223); // Storage For 96 Characters
font = CreateFont( 0, // 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"Arial cyr"); // Font Name
oldfont = (HFONT)SelectObject(m_hDC, font);
wglUseFontBitmaps(m_hDC, 32, 223, m_base);
SelectObject(m_hDC, oldfont); // Selects The Font We Want
DeleteObject(font); // Delete The Font
}
GLvoid KillFont(GLvoid) // Delete The Font List
{
glDeleteLists(m_base, 223); // Delete All 96 Characters
}
что — то типа этого...
Сначала
PrintBegin();
Print(x,y, "FPS = %d", m_fps);
Print(x,y, "Time = %d", m_time);
PrintEnd();