pra*_*ran 5 c++ windows opengl logic qt
我正在尝试学习|| Qt中的代码openGL.我做了一个显示两个数字的应用程序.一个是三角形"A",另一个三角形"B"与"A"相同,只是它围绕z轴旋转了-90度(z轴垂直于计算机屏幕).现在,问题是轮换使维度发生变化.我发布下面的"main.cpp",
#include <QApplication>
#include <QHBoxLayout>
#include <QMessageBox>
#include <QtOpenGL/QGLWidget>
#include <QWidget>
class MyOpenGL:public QGLWidget
{
public:
MyOpenGL(QWidget * parent);
~MyOpenGL();
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
};
MyOpenGL::MyOpenGL(QWidget *parent):QGLWidget(QGLFormat(QGL::SampleBuffers),parent)
{
setAutoFillBackground(false);
}
MyOpenGL::~MyOpenGL()
{
}
void MyOpenGL::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
void MyOpenGL::resizeGL(int w, int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,width()/height(),10.0f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void MyOpenGL::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//glTranslatef(0.0,0.0,-10.0);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-1.0f,0.0f,-10.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(1.0f,0.0f,-10.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,4.0f,-10.0f);
glEnd();
glRotatef(90.0,0.0f,0.0f,-1.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-1.0f,0.0f,-10.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(1.0f,0.0f,-10.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,4.0f,-10.0f);
glEnd();
glLoadIdentity();
}
int main(int argc,char * argv[])
{
QApplication app(argc,argv);
MyOpenGL * f = new MyOpenGL(NULL);
f->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
这是专业档案
SOURCES += \
main.cpp
QT += opengl
Run Code Online (Sandbox Code Playgroud)
这是应用程序的屏幕截图

至于我知道轮换不会做任何尺寸变化.但这里的维度正在发生变化.如果有人在这个问题上表示怀疑,我将非常感谢他/她.
我不能肯定地说发生了什么,但我确实看到可能存在一些问题。
gluPerspective(45.0f,width()/height(),10.0f,100.0f);
Run Code Online (Sandbox Code Playgroud)
如果width和height都返回整数(它们可能会返回整数),那么将一个除以另一个将得到一个整数。这不会给你一个合适的纵横比。将其中之一投射到浮点上以获得真实的纵横比。
接下来,尝试将 glLoadIdentity() 调用放在 PaintGL 函数的顶部。