读书人

openGL扩展与版本有关问题

发布时间: 2013-04-20 19:43:01 作者: rapoo

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一样啊

读书人网 >C++

热点推荐