首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

openGL扩展与版本有关问题

2013-04-20 
openGL扩展与版本问题测试显卡支持的openGL版本为2.1.0,要加载什么版本的glew库合适呢,是越高版本的越好吗

openGL扩展与版本问题
测试显卡支持的openGL版本为2.1.0,要加载什么版本的glew库合适呢,是越高版本的越好吗?现在加的是glew是1.5.2版本的,可是有的函数识别不了,有的还发生中断,比如说glPrimitiveRestartIndex函数。如果是低版本的就无法识别,高版本的就发生中断,很纠结。新手,望大家多加指教! 扩展
[解决办法]
用freeglut(freeglut.sourceforge.net/)吧。
[解决办法]
是的,它的用法挺简单的,这里有一个例子:


//
// This code was created by Jeff Molofee '99 (ported to Linux/GLUT by Richard Campbell '99)
//
// If you've found this code useful, please let me know.
//
// Visit me at www.demonews.com/hosted/nehe 
// (email Richard Campbell at ulmont@bellsouth.net)
//
#include <GL/glut.h>    // Header File For The GLUT Library 
#include <GL/gl.h>// Header File For The OpenGL32 Library
#include <GL/glu.h>// Header File For The GLu32 Library
#include <unistd.h>     // needed to sleep

/* ASCII code for the escape key. */
#define ESCAPE 27

/* The number of our GLUT window */
int window; 

/* rotation angle for the triangle. */
float rtri = 0.0f;

/* rotation angle for the quadrilateral. */
float rquad = 0.0f;

/* A general OpenGL initialization function.  Sets all of the initial parameters. */
void InitGL(int Width, int Height)        // We call this right after our OpenGL window is created.
{
  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);// This Will Clear The Background Color To Black
  glClearDepth(1.0);// Enables Clearing Of The Depth Buffer
  glDepthFunc(GL_LESS);        // The Type Of Depth Test To Do
  glEnable(GL_DEPTH_TEST);        // Enables Depth Testing
  glShadeModel(GL_SMOOTH);// Enables Smooth Color Shading

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();// Reset The Projection Matrix

  gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);// Calculate The Aspect Ratio Of The Window

  glMatrixMode(GL_MODELVIEW);
}

/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */
void ReSizeGLScene(int Width, int Height)
{
  if (Height==0)// Prevent A Divide By Zero If The Window Is Too Small
    Height=1;

  glViewport(0, 0, Width, Height);// Reset The Current Viewport And Perspective Transformation

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();



  gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
  glMatrixMode(GL_MODELVIEW);
}

/* The main drawing function. */
void DrawGLScene()
{
  glClear(GL_DEPTH_BUFFER_BIT 
[解决办法]
 GL_COLOR_BUFFER_BIT);// Clear The Screen And The Depth Buffer
  glLoadIdentity();// Reset The View

  glTranslatef(-1.5f,0.0f,-6.0f);// Move Left 1.5 Units And Into The Screen 6.0

  glRotatef(rtri,0.0f,1.0f,0.0f);// Rotate The Pyramid On The Y axis 

  // draw a pyramid (in smooth coloring mode)
  glBegin(GL_POLYGON);// start drawing a pyramid

  // front face of pyramid
  glColor3f(1.0f,0.0f,0.0f);// Set The Color To Red
  glVertex3f(0.0f, 1.0f, 0.0f);        // Top of triangle (front)
  glColor3f(0.0f,1.0f,0.0f);// Set The Color To Green
  glVertex3f(-1.0f,-1.0f, 1.0f);// left of triangle (front)
  glColor3f(0.0f,0.0f,1.0f);// Set The Color To Blue
  glVertex3f(1.0f,-1.0f, 1.0f);        // right of traingle (front)

  // right face of pyramid
  glColor3f(1.0f,0.0f,0.0f);// Red
  glVertex3f( 0.0f, 1.0f, 0.0f);// Top Of Triangle (Right)
  glColor3f(0.0f,0.0f,1.0f);// Blue
  glVertex3f( 1.0f,-1.0f, 1.0f);// Left Of Triangle (Right)
  glColor3f(0.0f,1.0f,0.0f);// Green
  glVertex3f( 1.0f,-1.0f, -1.0f);// Right Of Triangle (Right)

  // back face of pyramid
  glColor3f(1.0f,0.0f,0.0f);// Red
  glVertex3f( 0.0f, 1.0f, 0.0f);// Top Of Triangle (Back)
  glColor3f(0.0f,1.0f,0.0f);// Green
  glVertex3f( 1.0f,-1.0f, -1.0f);// Left Of Triangle (Back)
  glColor3f(0.0f,0.0f,1.0f);// Blue
  glVertex3f(-1.0f,-1.0f, -1.0f);// Right Of Triangle (Back)

  // left face of pyramid.
  glColor3f(1.0f,0.0f,0.0f);// Red
  glVertex3f( 0.0f, 1.0f, 0.0f);// Top Of Triangle (Left)
  glColor3f(0.0f,0.0f,1.0f);// Blue
  glVertex3f(-1.0f,-1.0f,-1.0f);// Left Of Triangle (Left)
  glColor3f(0.0f,1.0f,0.0f);// Green
  glVertex3f(-1.0f,-1.0f, 1.0f);// Right Of Triangle (Left)

  glEnd();// Done Drawing The Pyramid

  glLoadIdentity();// make sure we're no longer rotated.
  glTranslatef(1.5f,0.0f,-7.0f);// Move Right 3 Units, and back into the screen 7

  glRotatef(rquad,1.0f,1.0f,1.0f);// Rotate The Cube On X, Y, and Z

  // draw a cube (6 quadrilaterals)


  glBegin(GL_QUADS);// start drawing the cube.
  
  // top of cube
  glColor3f(0.0f,1.0f,0.0f);// Set The Color To Blue
  glVertex3f( 1.0f, 1.0f,-1.0f);// Top Right Of The Quad (Top)
  glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Top)
  glVertex3f(-1.0f, 1.0f, 1.0f);// Bottom Left Of The Quad (Top)
  glVertex3f( 1.0f, 1.0f, 1.0f);// Bottom Right Of The Quad (Top)

  // bottom of cube
  glColor3f(1.0f,0.5f,0.0f);// Set The Color To Orange
  glVertex3f( 1.0f,-1.0f, 1.0f);// Top Right Of The Quad (Bottom)
  glVertex3f(-1.0f,-1.0f, 1.0f);// Top Left Of The Quad (Bottom)
  glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Bottom)
  glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Bottom)

  // front of cube
  glColor3f(1.0f,0.0f,0.0f);// Set The Color To Red
  glVertex3f( 1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Front)
  glVertex3f(-1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Front)
  glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Front)
  glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Front)

  // back of cube.
  glColor3f(1.0f,1.0f,0.0f);// Set The Color To Yellow
  glVertex3f( 1.0f,-1.0f,-1.0f);// Top Right Of The Quad (Back)
  glVertex3f(-1.0f,-1.0f,-1.0f);// Top Left Of The Quad (Back)
  glVertex3f(-1.0f, 1.0f,-1.0f);// Bottom Left Of The Quad (Back)
  glVertex3f( 1.0f, 1.0f,-1.0f);// Bottom Right Of The Quad (Back)

  // left of cube
  glColor3f(0.0f,0.0f,1.0f);// Blue
  glVertex3f(-1.0f, 1.0f, 1.0f);// Top Right Of The Quad (Left)
  glVertex3f(-1.0f, 1.0f,-1.0f);// Top Left Of The Quad (Left)
  glVertex3f(-1.0f,-1.0f,-1.0f);// Bottom Left Of The Quad (Left)
  glVertex3f(-1.0f,-1.0f, 1.0f);// Bottom Right Of The Quad (Left)

  // Right of cube
  glColor3f(1.0f,0.0f,1.0f);// Set The Color To Violet
  glVertex3f( 1.0f, 1.0f,-1.0f);        // Top Right Of The Quad (Right)
  glVertex3f( 1.0f, 1.0f, 1.0f);// Top Left Of The Quad (Right)
  glVertex3f( 1.0f,-1.0f, 1.0f);// Bottom Left Of The Quad (Right)
  glVertex3f( 1.0f,-1.0f,-1.0f);// Bottom Right Of The Quad (Right)
  glEnd();// Done Drawing The Cube

  rtri+=15.0f;// Increase The Rotation Variable For The Pyramid


  rquad-=15.0f;// Decrease The Rotation Variable For The Cube

  // swap the buffers to display, since double buffering is used.
  glutSwapBuffers();
}

/* The function called whenever a key is pressed. */
void keyPressed(unsigned char key, int x, int y) 
{
    /* avoid thrashing this call */
    usleep(100);

    /* If escape is pressed, kill everything. */
    if (key == ESCAPE) 
    { 
      /* shut down our window */
      glutDestroyWindow(window); 
      
      /* exit the program...normal termination. */
      exit(0);                   
    }
}

int main(int argc, char **argv) 
{  
  /* Initialize GLUT state - glut will take any command line arguments that pertain to it or 
     X Windows - look at its documentation at http://reality.sgi.com/mjk/spec3/spec3.html */  
  glutInit(&argc, argv);  

  /* Select type of Display mode:   
     Double buffer 
     RGBA color
     Alpha components supported 
     Depth buffered for automatic clipping */  
  glutInitDisplayMode(GLUT_RGBA 
[解决办法]
 GLUT_DOUBLE 
[解决办法]
 GLUT_ALPHA 
[解决办法]
 GLUT_DEPTH);  

  /* get a 640 x 480 window */
  glutInitWindowSize(640, 480);  

  /* the window starts at the upper left corner of the screen */
  glutInitWindowPosition(0, 0);  

  /* Open a window */  
  window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99");  

  /* Register the function to do all our OpenGL drawing. */
  glutDisplayFunc(&DrawGLScene);  

  /* Go fullscreen.  This is as soon as possible. */
  glutFullScreen();

  /* Even if there are no events, redraw our gl scene. */
  glutIdleFunc(&DrawGLScene);

  /* Register the function called when our window is resized. */
  glutReshapeFunc(&ReSizeGLScene);



  /* Register the function called when the keyboard is pressed. */
  glutKeyboardFunc(&keyPressed);

  /* Initialize our window. */
  InitGL(640, 480);
  
  /* Start Event Processing Engine */  
  glutMainLoop();  

  return 1;
}



引用:
引用:用freeglut(freeglut.sourceforge.net/)吧。
这个是什么啊 也是openGL的扩展库吗 没有接触过 怎么用的啊

[解决办法]
它是free的glut啊。

引用:
Quote: 引用:
是的,它的用法挺简单的,这里有一个例子:
这个和引用glut有什么区别啊  不就是它就能实现的吗 你说的glutfree和glut一样啊

热点排行