• 7300阅读
  • 2回复

opengl编译出错 [复制链接]

上一主题 下一主题
离线butterflyer
 
只看楼主 倒序阅读 楼主  发表于: 2006-12-04
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我用的是Qt Opengl教程的lesson1创建一个OpenGL窗口
我的电脑装的 是redhat 自带的 qt-3.1
1.编译的 时候出现
> nehewidget.o(.text+0x30d): In function `NeHeWidget::resizeGL(int, int)':
> : undefined reference to `gluPerspective'
> collect2: ld returned 1 exit status
> 我知道是版本的问题.但是写程序的人用的是qt3.1.0啊!我也是3.1啊,差距这么大?
> gluPerspective到底是 哪里的啊?
2.我只好把gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );改为glFrustum( -1,1,-1,1,1,100 );,具体我也不知道什么意思,但是别人说他们基本相同.
当我编译通过了 ,程序正常运行,但是同时出现Xlib: extension "XFree86-DRI" missing on display ":0.0".
的错误!
3.更奇怪的 是 我 编译lesson4旋转,
运行时没有转啊!同时出现Xlib: extension "XFree86-DRI" missing on display ":0.0".
它不转的原因是和什么有关呢?
麻烦大家 ,告诉告诉我 ,好吗?
THANKS VERY MUCH!
[ 此贴被XChinux在2006-12-24 10:11重新编辑 ]
离线butterflyer
只看该作者 1楼 发表于: 2006-12-04
lesson4 部分代码(http://www.qiliang.net/nehe_qt/lesson04.html)
#include "nehewidget.h"

NeHeWidget::NeHeWidget( QWidget* parent, const char* name, bool fs )
  : QGLWidget( parent, name )
{
rTri = 0.0;
rQuad = 0.0;
fullscreen = fs;
setGeometry( 0, 0, 640, 480 );
setCaption( "NeHe's Rotation Tutorial" );

if ( fullscreen )
  showFullScreen();
}

NeHeWidget::~NeHeWidget()
{
}

void NeHeWidget::paintGL()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glTranslatef( -1.5, 0.0, -6.0 );
glRotatef( rTri, 0.0, 1, 0.0 );

glBegin( GL_TRIANGLES );
  glColor3f( 1.0, 0.0, 0.0 );
  glVertex3f( 0.0, 1.0, 0.0 );
  glColor3f( 0.0, 1.0, 0.0 );
  glVertex3f( -1.0, -1.0, 0.0 );
  glColor3f( 0.0, 0.0, 1.0 );
  glVertex3f( 1.0, -1.0, 0.0 );
glEnd();

glLoadIdentity();
glTranslatef( 1.5, 0.0, -6.0 );
glRotatef( rQuad, 1, 0.0, 0.0 );

glColor3f( 0.5, 0.5, 1.0 );
glBegin( GL_QUADS );
  glVertex3f( -1.0, 1.0, 0.0 );
  glVertex3f( 1.0, 1.0, 0.0 );
  glVertex3f( 1.0, -1.0, 0.0 );
  glVertex3f( -1.0, -1.0, 0.0 );
glEnd();

rTri += 0.2;
rQuad -= 0.15;
}

void NeHeWidget::initializeGL()
{
glShadeModel( GL_SMOOTH );
glClearColor( 0.0, 0.0, 0.0, 0.5 );
glClearDepth( 1.0 );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}

void NeHeWidget::resizeGL( int width, int height )
{
if ( height == 0 )
{
  height = 1;
}
glViewport( 0, 0, (GLint)width, (GLint)height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
//gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );
glFrustum( -1,1,-1,1,1,100 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}

void NeHeWidget::keyPressEvent( QKeyEvent *e )
{
switch ( e->key() )
{
case Qt::Key_F2:
  fullscreen = !fullscreen;
  if ( fullscreen )
  {
    showFullScreen();
  }
  else
  {
    showNormal();
    setGeometry( 0, 0, 640, 480 );
  }
  update();
  break;
case Qt::Key_Escape:
  close();
}
}
离线cavendish

只看该作者 2楼 发表于: 2006-12-04
检查一下你的机器里有没有glu库
快速回复
限100 字节
 
上一个 下一个