gpt4 book ai didi

c++ - OpenGL - 旋转问题 - Qt

转载 作者:可可西里 更新时间:2023-11-01 13:41:38 25 4
gpt4 key购买 nike

我正在努力学习||在Qt 中编写openGL 代码。我做了一个显示两个数字的应用程序。一个是三角形“A”,另一个三角形“B”除了绕 z 轴旋转 -90 度(z 轴垂直于计算机屏幕)外,与“A”完全相同。现在,问题是旋转使尺寸发生变化。我在下面发布“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();
}

这是pro文件

SOURCES += \
main.cpp

QT += opengl

这是生成的应用程序的屏幕截图

enter image description here

据我所知,旋转不会改变尺寸。但是这里的维度正在发生变化。如果有人解决了我对这个问题的疑问,我将非常感谢他/她。

最佳答案

我不能确定发生了什么,但我确实看到可能存在一些问题。

gluPerspective(45.0f,width()/height(),10.0f,100.0f);

如果 widthheight 都返回整数(它们可能会返回整数),则将一个除以另一个将得到一个整数。那不会给你一个合适的纵横比。将其中一个转换到 float 以获得真实的纵横比。

接下来,尝试在 paintGL 函数的顶部调用 glLoadIdentity()。

关于c++ - OpenGL - 旋转问题 - Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com