下面是我的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;
}
以下是错误消息:
Unhandled exception at 0x00000000 in HelloGL5.exe: 0xC0000005: Access violation.
请注意,我注释掉了两行代码,我没有收到此错误。当我将两行中的一行添加到代码中时,为什么会出现此错误?
答案 0 :(得分:2)
正如你在评论中所说的那样。
我的目标是OpenGL 4.4.0
您收到“访问冲突”错误的原因是因为您在OpenGL中使用了许多已弃用的功能。
以下函数是OpenGL 3.1版中不推荐使用的一些函数
这是一个关于“所有”OpenGL函数的优秀电子表格,以及它们是否已被弃用,删除,核心等等Click here to see it。我之所以说“全部”,是因为电子表格是由使用OpenGL而非 The Khronos Group 的人制作的。
现在你可能会问,如果不推荐使用 Matrix Stack 那么我们该怎么做呢,好吧......一切。现在你想要建立/计算和控制自己的 MatrixStack 。
以下是一些链接,您可以在其中阅读有关矩阵计算和矩阵变换的信息。
不推荐使用glBegin()
,glEnd()
等原因的原因。是因为不推荐使用整个立即模式渲染。现在,您假设VAOs与VBOs(和IBO)一起使用。
顶点数组对象(VAO)是一个OpenGL对象,它封装了指定顶点数据所需的所有状态(下面提到了一个小的例外)。它们定义顶点数据的格式以及顶点数组的源。请注意,VAO本身不包含数组;数组存储在Buffer Objects中(见下文)。 VAO只是引用已有的缓冲区对象。
来源:http://www.opengl.org/wiki/Vertex_Array_Objects#Vertex_Array_Object
顶点缓冲区对象(VBO)是一个缓冲区对象,用作顶点数组的数据源。它与任何其他缓冲区对象没有区别,用于转换反馈或异步像素传输的缓冲区对象可用作顶点数组的源值。
来源:http://www.opengl.org/wiki/Vertex_Specification#Vertex_Buffer_Object
答案 1 :(得分:1)
您使用NULL地址调用了函数。调试器会告诉你到底是哪一个。
在不知道你的库,上下文等的情况下,我的猜测是你的gl *函数在“glload / gll.h”或“glfw3.h”中都被声明为指针。删除这些包含内容并将其替换为#include <GL/gl.h>
。