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
C++ Visual Studio 2008上HelloWorld OpenGL程序中未处理的异常错误_C++_Opengl - Fatal编程技术网

C++ Visual Studio 2008上HelloWorld OpenGL程序中未处理的异常错误

C++ Visual Studio 2008上HelloWorld OpenGL程序中未处理的异常错误,c++,opengl,C++,Opengl,下面是我的opengl代码,它可能做不了什么有意义的事情。我在代码中使用了freeglut库。以下是所有代码的详细信息: #include <glload/gll.h> #include <glload/gl_3_0.h> #include <GL/glut.h> #include "glfw3.h" void ChangeSize(int w, int h) { glViewport(0, 0, w, h); } void RenderScene

下面是我的opengl代码,它可能做不了什么有意义的事情。我在代码中使用了freeglut库。以下是所有代码的详细信息:

#include <glload/gll.h>
#include <glload/gl_3_0.h>
#include <GL/glut.h>
#include "glfw3.h"

void ChangeSize(int w, int h)
{
    glViewport(0, 0, w, h);
}

void RenderScene(void)
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    glLoadIdentity();
    glLineWidth(1);
    glColor3f(1.0f, 0.0f, 0.0f);

    glBegin(GL_LINE);
    glVertex3f(0.0f, 0.0f, 0.5f);
    glVertex3f(0.0f, 1.0f, 0.5f);
    glVertex3f(1.0f, 1.0f, 0.5f);
    glEnd();

    glMatrixMode(GL_PROJECTION);
    glOrtho(-2.0,2.0,-2.0,2.0,-1.0,1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();



}

int main (int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Triangle");
//  glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
//  glShadeModel(GL_SMOOTH);

    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);

    glutMainLoop();

    return 0;
}

请注意,我注释掉了两行代码,我没有得到这个错误。为什么在代码中添加这两行中的一行时会出现此错误

您使用空地址调用了函数。调试器将准确地告诉您


在不知道库、上下文等情况下,我猜想您的gl*函数都在“glload/gll.h”或“glfw3.h”中声明为指针。删除这些包含项并将其替换为
#include

,如您在评论中所述

我的目标是OpenGL 4.4.0

出现“访问冲突”错误的原因是您在OpenGL中使用了许多不推荐使用的函数

以下函数是OpenGL 3.1版中不推荐使用的一些函数

  • glMatrixMode()
  • glLoadIdentity()
  • glBegin()
  • 格伦德()
  • glVertex3*()
  • glTexCoord*()
  • glNormal*()
  • glColor*()
这是一个关于“所有”OpenGL函数以及它们是否被弃用、删除、核心等的优秀电子表格。我之所以这样说“全部”,是因为电子表格是由使用OpenGL的人制作的,而不是由Khronos集团制作的

现在你可能会问,如果矩阵堆栈被弃用了,那么我们该怎么做呢。。。每件事底线现在你要建立/计算并控制你自己的MatrixStack

这里有几个链接,您可以在其中阅读有关矩阵计算和矩阵变换的内容

为什么
glBegin()
glEnd()
等被弃用的原因。是因为不推荐使用整个即时模式渲染。现在假设您使用with(和IBOs)

沃 顶点数组对象(VAO)是一个OpenGL对象,它封装了指定顶点数据所需的所有状态(下面有一个小的例外)。它们定义顶点数据的格式以及顶点数组的源。注意,VAO不包含数组本身;数组存储在缓冲区对象中(见下文)。VAO只是引用已经存在的缓冲区对象

资料来源:

VBO 顶点缓冲区对象(VBO)是用作顶点数组数据源的缓冲区对象。它与任何其他缓冲区对象没有区别,用于变换反馈或异步像素传输的缓冲区对象可以用作顶点数组的源值


来源:

您的目标是哪个版本的OpenGL?我的目标是OpenGL 4.4.0。请阅读我刚刚发布的答案。嗯,似乎我忘了在我的问题文本中提到我是OpenGL世界的新手。:)在你的回答之后,我从代码中得到这个错误是有道理的。那么,在这种情况下,我是否应该假设在代码顶部添加的所有库都在处理旧的不推荐的函数,这样开发人员就不必处理实现“即时模式”渲染的细节了?@ErdemKAYA您总是可以简单地针对OpenGL的旧版本,比如1.5版之类的。我不确定我是否100%理解您对其余函数的意思,但是,您应该只在实际使用不推荐的函数时,而不只是通过加载库来获得这些错误。关于即时模式的事情,正如我在回答的底部写的,今天我们不使用它,我们使用带VBOs的VAOs,这是一种可以将顶点数据加载到其中并存储在GPU上的缓冲区。
Unhandled exception at 0x00000000 in HelloGL5.exe: 0xC0000005: Access violation.