1
我試圖在Qt中使用OpenGL創建一個空間,現在我被卡住了紋理部分。它不會將我的紋理放在牆上。在Qt中使用OpenGL進行紋理加載
這是我的代碼:
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent):QGLWidget(parent)
{
camPosx = 0.0, camPosy = 0.0, camPosz = 1.0;
camViewx = 0.0, camViewy = 0.0, camViewz = 0.0;
camUpx = 0.0, camUpy = 1.0, camUpz = 0.0;
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
}
void GLWidget::initializeGL() {
loadGLTextures();
glEnable(GL_TEXTURE_2D);
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
timer->start(50);
}
void GLWidget::resizeGL(int width, int height) {
//set viewport
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//set persepective
//change the next line order to have a different perspective
GLdouble aspect_ratio=(GLdouble)width/(GLdouble)height;
gluPerspective(45.0f, aspect_ratio, 0.1 , 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// store current matrix
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
gluLookAt(camPosx ,camPosy ,camPosz,
camViewx,camViewy,camViewz,
camUpx, camUpy, camUpz);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glScalef(2.0,2.0,2.0);
glBegin(GL_QUADS);
/* Floor */
glColor3f(0,0,0);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glVertex3f(-1,-1,1);
/* Ceiling */
glVertex3f(-1,1,-1);
glVertex3f(1,1,-1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
/* Walls */
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
glVertex3f(-1,1,-1);
glVertex3f(1,1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,1,-1);
glEnd();
glEnable(GL_LIGHTING);
// restore current matrix
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
void GLWidget::loadGLTextures()
{
QImage t;
QImage b;
if (!b.load("images/Naamloos.bmp"))
{
qDebug("Didn't found the image.");
b = QImage(16, 16, QImage::Format_RGB32);
b.fill(1);
}
t = QGLWidget::convertToGLFormat(b);
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
void GLWidget::keyPressEvent(QKeyEvent * e) {
if(e->key() == Qt::Key_Up)
this->camPosy += 0.5;
if(e->key() == Qt::Key_Down)
this->camPosy -= 0.5;
}
它顯示我的平方(這應該是我的房間),但它不會將牆壁上的.bmp文件。
'而QImage :: Format_RGB32'是不一樣'GL_RGBA',這不是」沒有alpha通道。 – cmannett85