Qt 5.3.0 MiniGW + OpenGL
-
Witam, jestem początkującym programistą, stawiam pierwsze kroki w Qt 5.3.0+ MiniGw i mam problem skompilować jakikolwiek program z OpenGL np. "youtube":http://www.youtube.com/watch?v=1nzHSkY4K18. Proste programy które napisałem działają na innych komputerach (których karty graficzne są komatybline z OpenGL 3.0) niestety mój komputer ma straszą karte graficzną Mobile Intel® 4 Series Express Chipset Family która wspomaga openGL w wer. 2.1. Ten sam problem dotyczy przykładów z qt-creatr'a z openGL. Czy to oznacza że nie uda mi się skompilować żadnego programu z openGl na tej karcie? Najnowsze sterowniki zainstalowane i DirectX. Dodam że OpenGL pod Microsoft Visual Studio działa bez zastrzeżeń
-
Minimalna wersja OpenGLa w Qt 5 to 2.0. Także powinno działać, tym bardziej że sterowniki Intela bardzo się poprawiły w ostatnim czasie.
Spróbuj zainstalować build z ANGLE (używa DirectX), może podziała. Jak nie, to można jeszcze spróbować użyć Mesa-LLVMPipe, czyli softwareowego OpenGLa: ale to raczej dla bardziej zaawansowanych.
Alternatywnie, jeśli mało Ci nauki, to polecam przeskoczyć na Linuxa, tak jak w linkowanym przez ciebie video. Plusy Linuxa są takie, że nie ma tu nigdy problemów z kompilatorami i podstawowym OpenGLem. Minusy też są, a jakże ;-) OK, starczy propagandy :-P
Na koniec całkiem ważna sprawa: podaj jakieś szczegóły do "mam problem skompilować jakikolwiek program z OpenGL". Jakie błędy ci wyskakują? Może wystarczy poustawiać trochę opcji w projekcie i znajdzie brakujące nagłóœki/ biblioteki.
-
Błąd jest dość powszechny: Program opengl.exe przestał działać. a w trybie debbug:
@Podproces zatrzymany, ponieważ otrzymał on sygnał z systemu operacyjnego.Nazwa sygnału:
SIGSEGV
Znaczenie sygnału:
Segmentation fault
@
tak jak pisalem kod dziala na innych komputerach bez najmniejszego problemu. Dołączam kod programu:
mainwindow.cpp
@#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);cScena* scena = new cScena(this); ui->verticalLayout->addWidget(scena);
}
MainWindow::~MainWindow()
{
delete ui;
}
@
cscena.cpp
@#include "cscena.h"cScena::cScena(QWidget *parent) :
QGLWidget(parent)
{
}
cScena::cScena (const QGLFormat & format, QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WindowFlags f = 0)
:QGLWidget(format,parent,shareWidget,f)
{}
void cScena::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex3f(-1.0,-1.0,0);
glVertex3f(-1.0,1.0,0);
glVertex3f(1.0,1.0,0);
glVertex3f(1.0,-1.0,0);
glEnd();
}void cScena::initializeGL()
{
glClearColor (1.0, 1.0, 1.0, 0.0);}
void cScena::resizeGL(int width,int height)
{
glViewport(0,0,width,height);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(-5,5,-5,5,-1.0, 1.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
}@
mainwindow.h
@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <cscena.h>
#include <qpushbutton.h>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private:
Ui::MainWindow *ui;};
#endif // MAINWINDOW_H
@
cscena.h
@
#ifndef CSCENA_H
#define CSCENA_H#include <QGLWidget>
class cScena : public QGLWidget
{
Q_OBJECT //makro
public:
explicit cScena(QWidget *parent = 0);
cScena (const QGLFormat & format, QWidget * parent , const QGLWidget * shareWidge, Qt::WindowFlags f );virtual void paintGL(); virtual void initializeGL(); virtual void resizeGL(int width, int height);
signals:
};
#endif // CSCENA_H
@
dołączyłem oczywiście QT += opengl w opengl.pro. i mama dołączone .dll w katalogu system32. Mógłbys powiedzieć coś więcej o tym angle? i dlaczego nie działa u mnie ten kod skoro podobno qt 5.3 działa juz z opengl'em 2.1?
Dziękuje za dotychczasową odpowiedz. -
NIe znam się dobrze na OpenGLu w Qt (ani na OpenGL w ogóle), sorry. Jedyne co potrafię zauważyć, to to, że używasz starych wywołąń OpenGL. Jeśli exe się wywala tylko na tym kompie i debugging nie pokazuje, gdzie, to może trafiłeś w słaby punkt sterownika.
Angle to projekt, który przerabia wywołania OpenGL na DirectX. Dzięki temu Qt mysli, że używa OpenGL, a tak na prawdę w tle działa sterownik DirectX. Przydatne głownie na starszych kompach i Windowsie XP. Qt Project udostępnia instalatory, które mają wbudowane ANGLE w siebie.