2016-11-04 50 views
2

我在OpenGL编程方面很新,而且一切都很好,直到我从无处收到分段错误,现在无法摆脱它。任何人都可以发现分段故障并向我解释吗?在键入glBegin()后出现OpenGL分段错误

注意:虽然这是作业,但我不是在寻找答案。事实上,我甚至不会提及分配的详细信息,甚至发送完整的代码(虽然,下面的代码也导致段错误):

# include <stdio.h> 
# include <stdlib.h> 
# ifdef __APPLE__ 
# include <OpenGL/gl.h> 
# include <OpenGL/glu.h> 
# include <GLUT/glut.h> 
# else 
# include <GL/gl.h> 
# include <GL/glu.h> 
# include <GL/freeglut.h> 
# endif 
# include <iostream> 
# include <ctime> 
# include <cmath> 
using namespace std; 

#define GRID 50 

/* Eye location */ 
float eye[]={5,5,5}; 

void initDefaults(void){ 
    glClearColor(0, 0, 0, 0); 
    glColor3f(1, 1, 1); 
    glMatrixMode(GL_PROJECTION); 
    glFrustum(-10,10,-10,10,0,100); 
    gluPerspective(45,1,1,100); 
} 

/* TEMPORARY */ 
void createGrid(){ 

//After checking, I narrowed down the segmentation fault to here. 
    glColor3f(0, 0, 0); 
    printf("help"); 
    glBegin(GL_POINTS); 
    glVertex3f(25,25,25); 
    glEnd(); 
} 

/* displays UI to user */ 
void display(void){ 

    //Clears the board upon (re)display 
    glClearColor(1.0,1.0,1.0,0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    //Enables backface culling 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 

    //Sets up the perspective matrix (viewing/camera) 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(eye[0], eye[1], eye[2], GRID/2, GRID/2, 0, 0, 1, 0); 

    //I believe the segmentation fault occurs in here. 
    //************************************ 
    createGrid(); 
    //************************************ 

    //Used for double-buffering 
    glutSwapBuffers(); 
} 

/* main function - program entry point */ 
int main(int argc, char** argv){ 

    glutInit(&argc, argv);          
    glutInitWindowSize(600, 600); 
    glutInitWindowPosition(200,200); 
    glutCreateWindow("Terrain");         
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA); 
    glutDisplayFunc(display);       
    gluOrtho2D(-1, GRID + 1, -1, GRID + 1); 
    initDefaults(); 
    glutMainLoop();            
    return(0);             
} 
+0

考虑使用着色器,它们可以制作更大的项目。 freeglut是我最喜欢的图书馆btw;) – Charlie

回答

0

仔细检查你的开发环境。你的代码(迄今为止)非常好,你遇到的问题可能是由不匹配的库引起的。例如,如果您在Linux上开发,则libGL.so必须与GPU驱动程序和版本(或者纯粹使用的间接GLX上下文完全匹配,这通常仅适用于远程X11)。