【发布时间】:2019-02-22 17:37:25
【问题描述】:
所以除非我理解错了,否则默认的 OpenGL 窗口坐标 (0,0) 位于屏幕的中心。我使用glOrtho/glViewport 设置了以下调整大小函数,将左上角设置为 (0,0)。但是由于某种原因,在 (0,0) 处绘制的点仍然显示在屏幕的中心(并且仍然在 -1/1 范围内)。
主要
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setTitle("OpenGL");
w.resize(500,500);
w.show();
return a.exec();
}
主窗口.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;
};
【问题讨论】:
-
您已经实现了
MainWindow::resizeEvent。你在那儿做什么?此函数发出调整大小事件并触发对MainWindow::resizeGL的调用。