Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 尝试使用SDL+;格洛_Opengl_Sdl_Glew - Fatal编程技术网

Opengl 尝试使用SDL+;格洛

Opengl 尝试使用SDL+;格洛,opengl,sdl,glew,Opengl,Sdl,Glew,我正在尝试学习如何使用SDL和OpenGL,使用GLEW作为扩展方法。据我所知,从SDL角落之类的页面,以下代码应该可以工作 #include <glew.h> #include <SDL.h> #include <cstdlib> int main(int argc, char *argv[]) { if (SDL_Init( SDL_INIT_EVERYTHING ) != 0) exit(EXIT_FAILURE); if (SDL_

我正在尝试学习如何使用SDL和OpenGL,使用GLEW作为扩展方法。据我所知,从SDL角落之类的页面,以下代码应该可以工作

#include <glew.h>
#include <SDL.h>

#include <cstdlib>

int main(int argc, char *argv[]) {
    if (SDL_Init( SDL_INIT_EVERYTHING ) != 0) exit(EXIT_FAILURE);
    if (SDL_GL_LoadLibrary( NULL ) != 0) exit(EXIT_FAILURE);
    if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL) exit(EXIT_FAILURE);
    if (glewInit() != GLEW_OK) exit(EXIT_FAILURE);

    glViewport(0, 0, 640, 480);

    while (1) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(50.0, 1.0, 0.1, 1000.0);

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, 2.0, 0.0, 1.0, 0.0);

        glPolygonMode(GL_FRONT, GL_FILL);

        glBegin(GL_QUADS);
            glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
            glColor3f(1, 1, 0); glVertex3f(3, 0, 0);
            glColor3f(1, 0, 1); glVertex3f(3, 3, 0);
            glColor3f(1, 1, 1); glVertex3f(0, 3, 0);
        glEnd();

        SDL_GL_SwapBuffers();
    }

    SDL_Quit();
    return 0;
}

SDL版本为1.2.14,GLEW版本为1.7.0。

尝试将投影和模型视图部分放置在while循环之外,并在投影后放置glViewport:

#include <glew.h>
#include <SDL.h>

#include <cstdlib>

int main(int argc, char *argv[]) {
    if (SDL_Init( SDL_INIT_EVERYTHING ) != 0) exit(EXIT_FAILURE);
    if (SDL_GL_LoadLibrary( NULL ) != 0) exit(EXIT_FAILURE);
    if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL) exit(EXIT_FAILURE);
    if (glewInit() != GLEW_OK) exit(EXIT_FAILURE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, 0, 640, 480);
    gluPerspective(50.0, 1.0, 0.1, 1000.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, 2.0, 0.0, 1.0, 0.0);

    while (1) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPolygonMode(GL_FRONT, GL_FILL);

        glBegin(GL_QUADS);
            glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
            glColor3f(1, 1, 0); glVertex3f(3, 0, 0);
            glColor3f(1, 0, 1); glVertex3f(3, 3, 0);
            glColor3f(1, 1, 1); glVertex3f(0, 3, 0);
        glEnd();

        SDL_GL_SwapBuffers();
    }

    SDL_Quit();
    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
如果(SDL_Init(SDL_Init_EVERYTHING)!=0)退出(退出失败);
如果(SDL_GL_LoadLibrary(NULL)!=0)退出(退出失败);
如果(SDL_SetVideoMode(640、480、0,SDL_OPENGL)==NULL)退出(退出失败);
如果(glewInit()!=GLEW_正常)退出(退出失败);
glMatrixMode(GL_投影);
glLoadIdentity();
glViewport(0,060480);
gluPerspective(50.0,1.0,0.1,1000.0);
glMatrixMode(GLU模型视图);
glLoadIdentity();
gluLookAt(0.0,0.0,3.0,0.0,0.0,2.0,0.0,1.0,0.0);
而(1){
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glPolygonMode(GL_前端,GL_填充);
glBegin(GL_QUADS);
glColor3f(1,0,0);glVertex3f(0,0,0);
glColor3f(1,1,0);glVertex3f(3,0,0);
glColor3f(1,0,1);glVertex3f(3,3,0);
glColor3f(1,1,1);glVertex3f(0,3,0);
格伦德();
SDL_GL_SwapBuffers();
}
SDL_退出();
返回0;
}

这不是一个真正的答案,但可能会有所帮助。特别是,您没有调用SDL_CreateWindow(但您的一个调用可能会隐式地执行此操作?
SDL_GL_LoadLibrary
,因为GLEW会为您执行此操作。你的代码对我来说很好。尝试编译其他一些示例,可能是您的工具出了问题?请提供回溯。另外,有关卡、驱动程序和OpenGL版本的信息。@Calvin1602您的评论代表SDL 1.3/2.0。SDL 1.2没有
SDL_CreateWindow
和其他功能-所有功能都是在
SDL_SetVideoMode
中处理的,这不是SEGFULT的原因。
#include <glew.h>
#include <SDL.h>

#include <cstdlib>

int main(int argc, char *argv[]) {
    if (SDL_Init( SDL_INIT_EVERYTHING ) != 0) exit(EXIT_FAILURE);
    if (SDL_GL_LoadLibrary( NULL ) != 0) exit(EXIT_FAILURE);
    if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL) exit(EXIT_FAILURE);
    if (glewInit() != GLEW_OK) exit(EXIT_FAILURE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, 0, 640, 480);
    gluPerspective(50.0, 1.0, 0.1, 1000.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 3.0, 0.0, 0.0, 2.0, 0.0, 1.0, 0.0);

    while (1) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPolygonMode(GL_FRONT, GL_FILL);

        glBegin(GL_QUADS);
            glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
            glColor3f(1, 1, 0); glVertex3f(3, 0, 0);
            glColor3f(1, 0, 1); glVertex3f(3, 3, 0);
            glColor3f(1, 1, 1); glVertex3f(0, 3, 0);
        glEnd();

        SDL_GL_SwapBuffers();
    }

    SDL_Quit();
    return 0;
}