2016-09-26 2 views
1

Я работаю над тем, чтобы вернуть к жизни программу, которую я написал семь лет назад. Все это написано в Qt и использует некоторый OpenGL для рисования некоторых фреймов на изображении, отображаемом приложением. Проблема в том, что «gluOrtho2D» используется, но больше не найден. Мне интересно, как я могу обойти эту проблему. Вот код:Как заменить 'gluOrtho2d' в приложении Qt

void MSContext::ResizePaint(int width, int height) 
{ 
    // setup viewport, projection etc.: 
    glViewport(0, 0, (GLint)width, (GLint)height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0.0, (GLdouble) width, 0.0, (GLdouble) height); 
    glMatrixMode(GL_MODELVIEW); 

    glClearColor(0.5, 0.5, 0.5, 1.0); 
    glShadeModel(GL_FLAT); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

    CreatePrintCropMarks(); 
} 

void MSContext::CreatePrintCropMarks() 
{ 
    GLuint print45CropId = openGLListMgr()->print45CropId(); 
    glNewList(print45CropId, GL_COMPILE); 
    { 
     qreal lineSize = 4.0; 
     // Shrink down the canvas by 4 pixels so that the crop will show up 
     const QRectF& viewPort = primaryCanvas()->imageView()->viewRectangle(); 
     QRectF shrunkingCanvas = viewPort.adjusted(lineSize, lineSize, -lineSize, -lineSize); 

     QRectF print45Crop = GetCropRect(shrunkingCanvas, 5, 4); 
     QRectF print57Crop = GetCropRect(print45Crop, 7, 5); 

     glLineWidth(lineSize/2); 
     glLineStipple(1,0xFF00); 
     DrawBox(print57Crop); 
     glLineWidth(lineSize); 
     glLineStipple(1,0xFFFF); 
     DrawBox(print45Crop); 
    } 
    glEndList(); 
} 
+1

по теме: gluOrtho2D звучит как древний eldergod, кто любит чашку послеобеденного чая с C'thulhu. – user4581301

ответ

2

В задней части моей головы, я задавался вопросом, почему я никогда не слышал об этой функции ... Оказывается, есть прекрасная альтернатива в (старой школы) OpenGL. Из SGI GLU implementation:

void GLAPIENTRY             
gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) 
{ 
    glOrtho(left, right, bottom, top, -1, 1); 
} 

Таким образом, вы можете написать:

glOrtho(0.0, (GLdouble) width, 0.0, (GLdouble) height, -1, 1);