OpenGL glRasterPos неправильно принимает мои ценности

Я пытался добавить базовый HUD-подобный текст в мой проект OpenGL / C ++.

Поэтому я решил

glutBitmapCharacter( type, character)

быть моим оружием выбора.

Я понял, что для простоты использования я должен добавить 2D-матрицу к моей предыдущей области рендеринга.

glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);

Это должно дать мне приятный 10 * 10 2D куб для игры.

Теперь возникла проблема, когда glutBitmapCharacter запоминает свою последнюю позицию символа, чтобы добавить следующую. Довольно умный, пока он пишет строку, он, очевидно, запоминает эту позицию и заставляет мой текст летать по экрану один раз 🙂 Непослушный.

glRasterPos2f(x,y);

должно быть — как я слышал — нормальная вещь для сброса этой штуки — (хотя я не совсем понимаю, почему функция gl контролирует функцию glu, но это просто sidenote).

Теперь происходит странная вещь, когда я запускаю код:

glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, 10, 0, 10);

string message ="mmh... Pie...";
float poss[3];

glRasterPos3f(0.0, 0.0, 0.0);
glGetFloatv(GL_CURRENT_RASTER_POSITION, poss);
std::cout<< "X" <<(GLfloat) poss[0] << " Y"<<poss[1] << " Z"<<poss[2] <<  std::endl;

for( size_t i = 0; i < message.size(); ++i ) {
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, message[i]);
}
glPopMatrix();

Мой текст не отображается. На самом деле в результате X, Y и Z
(даже не уверен, что Z необходим .. должно быть 0 в любом случае) все inf (бесконечно).
Если я не установлю свой собственный glRasterPos, все будет хорошо, кроме того, что я уйду с экрана. Мои возвращающиеся позиции — повышающие X и 0, 0 — как ожидалось.

Так в чем же дело, что именно я делаю не так?

2

Решение

вы создали большую ошибку сегментации: glGetFloatv (GL_CURRENT_RASTER_POSITION, poss) возвращает 4 значения, поэтому вы должны использовать:

float poss[4];

Кроме того, ваш код отлично работает на моей машине и возвращает:

X0 Y0 Z0.5

Так что, похоже, ошибка не в коде, который вы разместили здесь. Тебе стоит попробовать&скопируйте его в простую программу «HelloWorld» -GL и посмотрите, работает ли он там. Будьте осторожны, что некоторые команды OpenGL работают только после инициализации корректной поверхности рисования — я полагаю, вы это сделали?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]