Так что, если я не понял это неправильно, в стандартном окне OpenGL координаты (0,0) находятся в центре экрана.Я настроил следующую функцию изменения размера, используя glOrtho
/ glViewport
, чтобы установить верхний левый угол как (0,0).Но по какой-то причине рисование точки в точке (0,0) по-прежнему отображается в центре экрана (и оно все еще находится в диапазоне -1/1).
Main
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setTitle("OpenGL");
w.resize(500,500);
w.show();
return a.exec();
}
Mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
{
setSurfaceType(QWindow::OpenGLSurface);
QSurfaceFormat format;
format.setProfile(QSurfaceFormat::CompatibilityProfile);
format.setVersion(2,1);
setFormat(format);
context =new QOpenGLContext;
context->setFormat(format);
context->makeCurrent(this);
openGLFuncions = context->functions();
}
void MainWindow::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,w,h,0.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
}
void MainWindow::paintGL()
{
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10.0f);
glBegin(GL_POINTS);
glVertex2f(0.5f,0);
glEnd();
glFlush();
}
MainWidow.h
class MainWindow : public QOpenGLWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void updateAnim();
protected:
virtual void initilizeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
void resizeEvent(QResizeEvent *event);
void paintEvent(QPaintEvent *event);
private:
QOpenGLContext *context;
QOpenGLFunctions *openGLFuncions;
};