关于opengl中颜色表函数glcolortable出现异常的问题(opengl红宝书8-7程序)解决方法

最近使用glcolortable()函数,运行是出现异常,网上查找也有人遇到类似问题,但是都没有给出解决方法。

#include "Glee.h"
 #include <GL/glut.h>
 #include<stdio.h>
 #include <stdlib.h>
 
GLubyte  pixels[64][64][3];
 void init(void)
 {
    
    int   i,j,c;
    GLubyte  colorTable[256][3];
    //pixels = readImage("leeds.bin", &width, &height);
    for (i = 0; i < 64; i++) {
    for (j = 0; j < 64; j++) {
    c = ((((i&0x8)==0)||((j&0x8))==0))*255;
     pixels[i][j][0] = (GLubyte) c;
     pixels[i][j][1] = (GLubyte) c;
     pixels[i][j][2] = (GLubyte) c;
    }
    }
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    
    /* Set up an inverse color table */
    
    for ( i = 0; i < 256; ++i ) {
        colorTable[i][0] = 255 - i;
        colorTable[i][1] = 255 - i;
        colorTable[i][2] = 255 - i;
    }
    glColorTable(GL_COLOR_TABLE, GL_RGB, 256, GL_RGB, GL_UNSIGNED_BYTE,colorTable);// 出错位置
     glEnable(GL_COLOR_TABLE);
 }
 
void display(void)
 {
    glClear(GL_COLOR_BUFFER_BIT);
    glRasterPos2i( 1, 1 );
    glDrawPixels(64, 64, GL_RGB, GL_UNSIGNED_BYTE, pixels );
    glFlush();
 }
 
void reshape(int w, int h)
 {
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho (0, w, 0, h, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
 }
 
void keyboard(unsigned char key, int x, int y)
 {
    switch (key) {
       case 27:
          exit(0);
    }
 }
 
int main(int argc, char** argv)
 {
 
   glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(640, 480);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);
    init();
    glutReshapeFunc(reshape);
    glutKeyboardFunc(keyboard);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
 }

在实验了各种方法都没解决问题。

红宝书中230页有样一句段话:

尽管图像处理自己一直是一个OpenGL扩展,但其功能在OpenGL 3.0中废弃了,并且从OpenGL3.1规范中删除了。

开始怀疑是opengl版本问题。于是测试版本

const char* verstr = (const char*)glGetString( GL_VERSION );

出错机器是opengl 2.1,没有错误的机器是opengl3.1版本。

 

同样glGenvertexArrays在2.1版本中也出错,在3.1版本中没有问题。也有人这么解决

http://blog.csdn.net/niexiao2008/article/details/8898171

,在glewInit()在添加

glewExperimental = GL_TRUE;

但我在2.1版本中测试没有通过。

 

出错机器的版本号2.1.0-Build 8.15.10.1840 没有错误的版本号3.1 NVIDIA 188.98,所以应该显卡对opengl版本支持不一样的。

 

主要原因见:

http://blog.csdn.net/zhouschina/article/details/8960309

你可能感兴趣的:(OpenGL)