Название: Проект с OpenGL
Отправлено: alsav22 от Ноябрь 29, 2012, 03:53
Попробовал собрать проект "OGLPyramid" к 23 главе книги: "Макс Шлее Qt4.5.Профессиональное программирование на C++ (2010)". Проект с использованием OpenGL. Собираю в Студии 2010. Другие проекты делал в Студии без особых проблем. При компиляции компоновщик выдаёт ошибки типа: 1>OGLPyramid.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glShadeModel@4 в функции "protected: virtual void __thiscall OGLPyramid::initialize(void)" (initializeGL@OGLPyramid@@MAEXXZ)1>OGLPyramid.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glEnable@4 в функции "protected: virtual void __thiscall OGLPyramid::initializeGL(void)" (?initializeGL@OGLPyramid@@MAEXXZ) ... и т.д. , т.е. ошибки по поводу функций вида: glShadeModel(), glEnable(), glNewList(), glBegin() и пр. Прототипы этих функций Студия показывает в GL.h. Есть предположение, что компоновщик не находит реализаций. В свойствах проекта: Дополнительные каталоги включаемых файлов: C:\Ot\4.81\include\QtOpenGL, Дополнительные зависимости: QtOpenGL4.lib, QtOpenGLd4.lib. Подскажите, пожалуйста, что и где ещё нужно подключить, или чего не хватает. //main.cpp #include <QApplication> #include "OGLPyramid.h" // ---------------------------------------------------------------------- int main(int argc, char** argv) { QApplication app(argc, argv); OGLPyramid oglPyramid;
oglPyramid.resize(200, 200); oglPyramid.show();
return app.exec(); }
//OGLPyramid.h #ifndef _OGLPyramid_h_ #define _OGLPyramid_h_
#include <QGLWidget>
// ====================================================================== class OGLPyramid : public QGLWidget { private: GLuint m_nPyramid; GLfloat m_xRotate; GLfloat m_yRotate; QPoint m_ptPosition;
protected: virtual void initializeGL ( ); virtual void resizeGL (int nWidth, int nHeight); virtual void paintGL ( ); virtual void mousePressEvent(QMouseEvent* pe ); virtual void mouseMoveEvent (QMouseEvent* pe ); GLuint createPyramid (GLfloat fSize = 1.0f );
public: OGLPyramid(QWidget* pwgt = 0); }; #endif //_OGLPyramid_h_
//OGLPyramid.cpp #include <QtGui> #include "OGLPyramid.h"
// ---------------------------------------------------------------------- OGLPyramid::OGLPyramid(QWidget* pwgt/*= 0*/) : QGLWidget(pwgt) , m_xRotate(0) , m_yRotate(0) { }
// ---------------------------------------------------------------------- /*virtual*/void OGLPyramid::initializeGL() { qglClearColor(Qt::black); glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); m_nPyramid = createPyramid(1.2f); }
// ---------------------------------------------------------------------- /*virtual*/void OGLPyramid::resizeGL(int nWidth, int nHeight) { glViewport(0, 0, (GLint)nWidth, (GLint)nHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10.0); }
// ---------------------------------------------------------------------- /*virtual*/void OGLPyramid::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.0);
glRotatef(m_xRotate, 1.0, 0.0, 0.0); glRotatef(m_yRotate, 0.0, 1.0, 0.0);
glCallList(m_nPyramid); }
// ---------------------------------------------------------------------- /*virtual*/void OGLPyramid::mousePressEvent(QMouseEvent* pe) { m_ptPosition = pe->pos(); }
// ---------------------------------------------------------------------- /*virtual*/void OGLPyramid::mouseMoveEvent(QMouseEvent* pe) { m_xRotate += 180 * (GLfloat)(pe->y() - m_ptPosition.y()) / height(); m_yRotate += 180 * (GLfloat)(pe->x() - m_ptPosition.x()) / width(); updateGL();
m_ptPosition = pe->pos(); }
// ---------------------------------------------------------------------- GLuint OGLPyramid::createPyramid(GLfloat fSize/*=1.0f*/) { GLuint n = glGenLists(1);
glNewList(n, GL_COMPILE); glBegin(GL_TRIANGLE_FAN); qglColor(Qt::green); glVertex3f(0.0, fSize, 0.0); glVertex3f(-fSize, -fSize, fSize); glVertex3f(fSize, -fSize, fSize); qglColor(Qt::yellow); glVertex3f(fSize, -fSize, -fSize); qglColor(Qt::blue); glVertex3f(-fSize, -fSize, -fSize); qglColor(Qt::white); glVertex3f(-fSize, -fSize, fSize); glEnd(); glBegin(GL_QUADS); qglColor(Qt::red); glVertex3f(-fSize, -fSize, fSize); glVertex3f(fSize, -fSize, fSize); glVertex3f(fSize, -fSize, -fSize); glVertex3f(-fSize, -fSize, -fSize); glEnd(); glEndList();
return n; }
Название: Re: Проект с OpenGL
Отправлено: alsav22 от Ноябрь 29, 2012, 04:46
Решение нашёл. Нужно в Свойствах проекта - Компоновщик - Ввод - Дополнительные зависимости прописать: opengl32.lib (наверное, можно ещё и glu32.lib, хотя и так компилируется).
|