c ++ Текст не отображается на экране - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь напечатать текст на своем экране, используя этот код.

int main(int argc, char* argv[]) {      
glutInit(&argc, argv);

glutInitWindowSize(640, 480);

int WindowHandle = glutCreateWindow("Maze");

if (WindowHandle < 1) {
    fprintf(stderr, "ERROR: Could not create a new rendering window.\n");
    exit(EXIT_FAILURE);
}

//Initialize OpenGL
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//Initialize the viewport
glViewport(0, 0, 640, 480);

//Initialize OpenGL projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, 640.0f, 480.0f, 0.0f, -2.0f, 2.0f);

//Clear back buffer
glClear(GL_COLOR_BUFFER_BIT);

//Create font
GLuint textureName;
glGenTextures(1, &textureName);
PixelPerfectGLFont font;
try {
    font.Create("fonts\\quad20.glf", textureName);
}
catch(GLFontError::InvalidFile) {
    cerr << "Cannot load font\n";
    abort();
}

//Draw some stuff
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
glEnable(GL_TEXTURE_2D);
glColor3f(1.0f, 0.0f, 0.0f);

try {
    font.Begin();
    font.TextOut("hello world", 50, 50, 0);
}
catch(GLFontError::InvalidFont) {
    cerr << "Trying to draw with an uninitialized font\n";
    abort();
}
glDisable(GL_TEXTURE_2D);
glLoadIdentity();


glutMainLoop();
return 0;
}

Поместите этот код в файл main.cpp, и он запустится (при условии, что у вас есть правильные компоновщики)

поверх кода у меня есть

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glew.h>
#include <GL/glut.h>
#endif
#include "glfont.h"

, чтобы использовать glfont.h, вы добавляете using namespace std; сверху (или он выдает ошибки компиляции)

Итак ... когда я запускаюприложение показывает только белый экран без текста.

Может кто-нибудь сказать, что я делаю не так?

ps glfont можно найти здесь http://students.cs.byu.edu/~bfish/glfontdl.php

1 Ответ

0 голосов
/ 17 марта 2012

Может кто-нибудь сказать мне, что я делаю не так?

Все.

Это совсем не так, как вы делаете с GLUT.Вы должны зарегистрировать обратные вызовы, которые будут вызываться, когда GLUT будет готов отображать вещи.Вы никогда не меняете буферы или что-то в этом роде, поэтому вы не увидите ничего.И так далее.

Посмотрите на любой пример GLUT, который вы можете найти, и вы увидите, что он не похож на это.

Прежде чем начать играть вокругс рендерингом текста, вы должны сначала понять обычный рендеринг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...