使用 opengl 编译的程序,但不运行

Posted

技术标签:

【中文标题】使用 opengl 编译的程序,但不运行【英文标题】:Program with opengl compiles, but doesn't run 【发布时间】:2014-12-03 15:44:42 【问题描述】:

我想要 opengl for code::blocks 并使用下面的链接进行设置: http://www.deannicholls.co.uk/tutorials/show/cpp_glut

我尝试了示例文件:

#include <iostream>
#include <GL/glut.h>

using namespace std;

GLfloat mat_ambient[] = 0.5, 0.5, 0.5, 1.0;
GLfloat mat_specular[] = 1.0, 1.0, 1.0, 1.0;
GLfloat mat_shininess[] = 50.0;
GLfloat light_position[] = 10.0, 10.0, 10.0, 0.0;
GLfloat model_ambient[] = 1.0, 0.5, 0.5, 1.0;

void setupMaterials() 
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);


void changeColour(GLfloat r, GLfloat g, GLfloat b, GLfloat A) 
    model_ambient[0] = r;
    model_ambient[1] = g;
    model_ambient[2] = b;
    model_ambient[3] = A;
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);


void init(void) 
    glClearColor(0.0, 0.0, 0.0, 1.0);
    setupMaterials();

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glFrontFace(GL_CCW);
    glShadeModel(GL_SMOOTH);


void reshape(int w, int h) 
    GLfloat fAspect;
    if(h==0) h=1;

    glViewport(0,0,w,h);

    fAspect = (GLfloat)w / (GLfloat)h;

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(60, fAspect, 0.5, 100.0);
    glTranslatef(0,0,-1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();


void display(void) 
    int slices = 30;
    int stacks = 30;
    float radius = 0.2;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    changeColour(0.0, 0.0, 1.0, 1.0);
    glTranslatef(0.0, 0.0, 0.1);
    glutSolidSphere(radius, slices, stacks);
    glPopMatrix();

    glFlush();
    glutSwapBuffers();


void keyboard(unsigned char key, int x, int y) 
    switch (key) 
        case 27:
            exit(0); // Exit the application if 'Esc' key is pressed
    


void animate() 
    glutPostRedisplay();


int main(int argc, char * argv[]) 
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize (800, 600);
    glutCreateWindow (argv[0]);   init();
    glutKeyboardFunc (keyboard);
    glutDisplayFunc (display);
    glutReshapeFunc (reshape);
    glutIdleFunc(animate);
    glutMainLoop();
    return 0;

编译没有问题,但每次我尝试运行它时都会得到:

“进程终止,状态为 -1073741515(0 分钟,2 秒)”

我已经发现是线路引起的:

#include <GL/glut.h>

但我无法弄清楚为什么会导致这种情况。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

我使用的是 Windows7,我提到的网站特别指出“如果您使用的是 64 位 Windows 7,则需要将此文件复制到 'C:\Windows\sysWOW64”,而我没有这样做。当我正确地完成这一步时,我就可以运行程序了!

【讨论】:

给那个网站的作者一个耳光。永远不要将 DLL 放入操作系统路径,这会与其他也使用所述 DLL 但期望不同版本的程序真正混淆。相反,只需将 DLL 放在与 .exe 相同的目录中(或者,如果您通过 Visual Studio 调试器运行它,请将 DLL 的副本放在项目目录中)。

以上是关于使用 opengl 编译的程序,但不运行的主要内容,如果未能解决你的问题,请参考以下文章

切换到使用交错 VBO - 编译但没有绘制 - opengl es 2.0

在我的 OpenGL C++ 项目中究竟应该在哪里添加我的 BMP 文件?在 Mac 上使用 Xcode

Qt 5.5 和 OpenGL:检索设备信息

OpenGL ES 1.1 - alpha 蒙版

OpenGL 着色器有时可以编译,有时不能

程序编译、运行,但不以 DevC++ 结束