Простое 2D-приложение, имеющее проблемы с glutBitmapCharacter

Я пытаюсь просто написать что-нибудь на экране. Рисование прямоугольников достаточно просто. Я пытаюсь поместить текстовую строку сбоку наложенной на «книгу». Это кажется очень простым и все же …

В качестве заметки я постарался воспользоваться советами на этих форумах, чтобы glDisable(GL_DEPTH_TEST); а также glDisable(GL_LIGHTING); вероятно не нужны. Кроме того, есть ли способ включить отладку самостоятельно? Я обычно фанат добавления cout << "i reached this far yay" << endl; но мне не нравится, когда я помещаю его в void Bookshelf()… это дает мне ошибку C2381 ('function' : redefinition; __declspec(noreturn) differs)

main.cpp

#include "bookshelf.h"
void Initialize()
{
glClearColor (1.0, 1.0, 1.0, 0.0 );
glMatrixMode( GL_PROJECTION );
glOrtho(0,899,899,0,1,0);
}
void main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize( 900, 900 );
glutInitWindowPosition( 510, 100 );
glutCreateWindow("Bookshelf - Ankit Ahuja");
Initialize();
glutDisplayFunc(Bookshelf);
glutMainLoop();
}

bookshelf.h

#include <GL/glut.h>

void Bookshelf()
{
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 0.0, 0.0, 0.0 );
glBegin( GL_QUADS );

//Code that draws a bookshelf
//Book1
glColor3f( 1.0, 0.25, 0.25 );
glVertex3i(240,70,0.5);
glVertex3i(260,70,0.5);
glVertex3i(260,180,0.5);
glVertex3i(240,180,0.5);

//BookTitle1
glPushMatrix();
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glRotatef(90f,0.0f,0.0f,0.0f);
glColor3f( 0.0, 1.0, 0.0 );
glDisable(GL_LIGHTING);
glRasterPos3i(100,100,1);

char text[50]="Alphabet Soup is the best guys";
for(int i=0; i<50; i++)
{
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,(int)text[i]);
}
glPopMatrix();

//Book2
glColor3f( 0.8, 0.8, 0.0 );
glVertex2i(270,70);
glVertex2i(290,70);
glVertex2i(290,180);
glVertex2i(270,180);

//More books and shelves
glEnd();
glFlush();
}

0

Решение

Вы должны настроить ортографическую проекцию, используя glOrtho перед отображением вашего текста.

Убедитесь, что вы правильно нажимаете / выдвигаете матрицу проекции и просмотра модели, прежде чем писать текст, чтобы вы смотрели что-то вроде:

glMatrixMode(GL_PROJECTION);    //Select projection matrix
glPushMatrix();                 //save it
glLoadIdentity();

glMatrixMode(GL_MODELVIEW);    //Select modelview matrix
glPushMatrix();                //save it
glLoadIdentity();

// set up ur glOrtho
glOrtho(...);

glutBitmapCharacter(...)

glMatrixMode(GL_PROJECTION);
glPopMatrix();                //Restore your old projection matrix

glMatrixMode(GL_MODELVIEW);
glPopMatrix();               //Restore old modelview matrix
1

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

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

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