正确使用glVertexAttribPointer?

问题描述

我最近决定开始学习OpenGL,并给自己写了一本有关OpenGL Core 3.3的书。这本书通常是关于C ++的。

因此,在寻找了一点之后,我发现了一种语言更好的库,该语言提供了几乎相同的功能 lwjgl

我按照本书的步骤进行操作,并将C ++语法转换为java语法,直到实际绘制某些东西为止,它一直起作用。

在那里,无论我对代码进行了什么更改,JVM都一直崩溃。经过一些调试后,我发现调用 checkVid() { let obj = { user_id: this.user_id } this.db.getVideos2().then((dbVids) => { alert("DB Vid Count: " + dbVids.length) this.auth.getVideos(obj).subscribe((apiVids) => { alert("Api Vid Count: " + apiVids.videos.length) if (dbVids.length < apiVids.videos.length) { alert("Not Equal") this.syncVids(); } else { alert("Videos is equal") } }) }) glVertexAttribPointer时JVM崩溃了。

我是OpenGL的新手,我认为这个问题对于经验丰富的人来说一定很愚蠢,但是:我需要对这段代码进行什么更改?

glDrawArrays

我将非常感谢我能提供的任何帮助,如果您需要更多信息/需要查看更多我的代码,请告诉我。预先感谢

解决方法

在指定顶点属性之前,必须将顶点缓冲区对象绑定到目标GL_ARRAY_BUFFER

glBindBuffer(GL_ARRAY_BUFFER,VBO); 
glVertexAttribPointer(0,3,GL_FLOAT,false,12,0);

调用glVertexAttribPointer时,当前绑定到 ARRAY_BUFFER 目标的缓冲区对象与属性(索引)相关联,并且对该缓冲区对象的引用存储在以下对象的状态向量中Vertex Array Object