OpenGL小白在做一個OpenGL顯示帶坐標軸的3D圖形時。在用滾輪進行縮放時,坐標軸會透視在圖形上,如下圖所示。如何修改讓它正常顯示呢?
正常樣子:

用滾輪進行放大后(不正常):

代碼:
void GLWidget::paintGL()
{
//繪制
glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), clearColor.alphaF());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
program->bind();
QMatrix4x4 m;
m.perspective(135.0f, 2.0f/1.0f,1.0f, 200.0f);
m.translate(0, 0, -2);
m.rotate(xRot / 16.0f, 1.0f, 0.0f, 0.0f);
m.rotate(yRot / 16.0f, 0.0f, 1.0f, 0.0f);
m.rotate(zRot / 16.0f, 0.0f, 0.0f, 1.0f);
m.scale(mScale);
program->setUniformValue("matrix", m);
program->enableAttributeArray(PROGRAM_VERTEX_ATTRIBUTE);
program->enableAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE);
program->setAttributeBuffer(PROGRAM_VERTEX_ATTRIBUTE, GL_FLOAT, 0, 3, 5 * sizeof(GLfloat));
program->setAttributeBuffer(PROGRAM_TEXCOORD_ATTRIBUTE, GL_FLOAT, 3 * sizeof(GLfloat), 2, 5 * sizeof(GLfloat));
m_posAttr = program->attributeLocation("posAttr");
m_colAttr = program->attributeLocation("colAttr");
showSurface();
program->release();
}
void GLWidget::wheelEvent(QWheelEvent *event){
//滾輪事件
if(event->delta() > 0 && mScale < 1)
{
mScale *= 1.5;
}
if(event->delta() < 0 && mScale > 0.005)
{
mScale *= 0.67;
}
update();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/242571.html
標籤:Qt
下一篇:安卓學習筆記35:廣播接收者
