wojownik266 Temat założony przez niniejszego użytkownika |
[Qt5, OpenGL] Texturowanie sześcianu - problem! » 2017-04-21 10:31:48 Zabrałem się za pisanie bardzo prostego programu, którego zadaniem jest oteksturowanie sześcianu. Program ładnie wyświetla bryłę sześcianu ale niestety bez tekstur. Czy ktoś bardziej obeznany z OpenGl mógłby rzucić okiem na kod tego programu i powiedzieć co źlę zrobiłem i jak to naprawić? Przypuszczam że głównym podejrzanym będzie funkcja wczytująca teksturę ale nie wiem tego na pewno… #------------------------------------------------- # # Project created by QtCreator 2017-04-20T19:58:29 # #-------------------------------------------------
QT += core gui opengl
greaterThan( QT_MAJOR_VERSION, 4 ) : QT += widgets TARGET = OpenGL_Texture_001 TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp cpp\ qglbegin.cpp HEADERS += mainwindow.h h\ qglbegin.h FORMS += mainwindow.ui LIBS += - lopengl32 - lglu32 #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow>
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow( QWidget * parent = 0 ); ~MainWindow(); private slots: void on_pushButton_pressed(); private: Ui::MainWindow * ui; };
#endif
#ifndef QGLBEGIN_H #define QGLBEGIN_H
#include <QtWidgets> #include <QTimer>
class QGLBegin : public QOpenGLWidget { Q_OBJECT public: explicit QGLBegin( QWidget * parent = 0 ); void Rysuj(); void loadGLTextures(); protected: void initializeGL(); void paintGL(); void resizeGL( int width, int height ); signals: public slots: private: GLuint texture[ 2 ]; QTimer * czas; };
#endif
#include "mainwindow.h" #include "ui_mainwindow.h"
MainWindow::MainWindow( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::MainWindow ) { ui->setupUi( this ); }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_pushButton_pressed() { ui->openGLWidget->Rysuj(); }
#include "qglbegin.h" #include <QOpenGLWidget>
#include <gl\gl.h> #include <gl\glu.h> #include <cmath> #include <QGLWidget>
QGLBegin::QGLBegin( QWidget * parent ) : QOpenGLWidget( parent ) { }
void QGLBegin::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 ); }
void QGLBegin::paintGL() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glLoadIdentity(); gluLookAt( 5.0f, 5.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f ); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glBindTexture( GL_TEXTURE_2D, texture[ 0 ] ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glBegin( GL_QUADS ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( - 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( 1.0f, 1.0f, 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( - 1.0f, 1.0f, 1.0f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( 1.0f, - 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( 1.0f, 1.0f, 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( - 1.0f, - 1.0f, - 1.0f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( 1.0f, - 1.0f, - 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( - 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( - 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( - 1.0f, - 1.0f, - 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( - 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( - 1.0f, 1.0f, 1.0f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( - 1.0f, 1.0f, 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( 1.0f, 1.0f, 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( - 1.0f, 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( - 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( 1.0f, - 1.0f, 1.0f ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( 1.0f, - 1.0f, - 1.0f ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( - 1.0f, - 1.0f, - 1.0f ); glEnd(); glDisable( GL_LIGHTING ); glMatrixMode( GL_MODELVIEW ); glPopMatrix(); }
void QGLBegin::resizeGL( int width, int height ) { glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); GLdouble aspect_ratio =( GLdouble ) width /( GLdouble ) height; gluPerspective( 45.0f, aspect_ratio, 0.1, 100.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); } void QGLBegin::loadGLTextures() { QImage t; QImage b; if( !b.load( "logo.bmp" ) ) { qDebug( "Didn't found the image." ); b = QImage( 16, 16, QImage::Format_RGB32 ); b.fill( 1 ); } 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 QGLBegin::Rysuj() { update(); }
#include "mainwindow.h" #include <QApplication>
int main( int argc, char * argv[] ) { QApplication a( argc, argv ); MainWindow w; w.show(); return a.exec(); }
|