当调用glDraweElements()时,我得到了一个错误,我不知道为什么:/I是使用OpenGL的新手,我正在尝试了解它的工作原理。
注意:我正在使用此库将OBJ文件转换为OpenGL应该能够使用的数组:https://github.com/korre/java-obj-to-opengl/blob/master/MeshObjectLoader.java
public class Mesh {
private int vaoId;
private List<Integer> vboIdList = new ArrayList<>();
@Getter
@Setter
private float scale = 1;
@Getter
@Setter
private Vector3f position = new Vector3f(0, 0, 0);
@Getter
@Setter
private Vector3f rotation = new Vector3f(0, 0, 0);
@Getter
@Setter
private String textureKey;
private int vertexCount;
private Mesh(MeshObjectLoader.MeshArrays meshArrays) {
vaoId = glGenVertexArrays();
glBindVertexArray(vaoId);
var vboId = 0;
vertexCount = meshArrays.getNumVertices();
// Load vertices
vboId = glGenBuffers();
vboIdList.add(vboId);
var vertexBuffer = (FloatBuffer) meshArrays.getVertices();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, vertexBuffer, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0 ,0);
// Load texture coordinates
vboId = glGenBuffers();
vboIdList.add(vboId);
var textureCoordsBuffer = (FloatBuffer) meshArrays.getTexCoords();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, textureCoordsBuffer, GL_STATIC_DRAW);
glVertexAttribPointer(1, 2, GL_FLOAT, false, 0, 0);
// Clean everything up
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
public static Mesh loadFromObjFile(String resourcePath) throws IOException {
try (var resourceStream = Mesh.class.getResourceAsStream(resourcePath)) {
return new Mesh(MeshObjectLoader.loadModelMeshFromStream(resourceStream));
}
}
public void render(int textureId) {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureId);
glBindVertexArray(vaoId);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnable(GL_DEPTH_TEST);
glDrawElements(GL_TRIANGLES, vertexCount, GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindVertexArray(0);
}
public void cleanup() {
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
for (int vboId : vboIdList) {
glDeleteBuffers(vboId);
}
glBindVertexArray(0);
glDeleteVertexArrays(vaoId);
}
}
崩溃的原因是你从来没有将一个缓冲区对象绑定到VAO的< code > GL _ ELEMENT _ ARRAY _ BUFFER 绑定点,所以< code>glDrawElements的最后一个参数(...,0)被解释为主机地址指针,而不是任何元素数组缓冲区中的字节偏移量。当然,解引用< code>0地址会失败。
每当您调用像glDrawElements
这样的索引绘制调用时,您还需要一个元素数组缓冲区(也称为“索引缓冲区”)。
该库返回位置、纹理坐标和法线的列表,您只需通过 glDrawArrays()
执行非索引绘制调用即可。这也是波前OBJ加载器的典型特征,因为波前OBJ格式具有位置,法线和纹理坐标的单独索引,因此典型的加载无论如何都会对所有人脸索引进行交叉乘积,并为您提供顶点数据的线性/重复列表。
所以:请改用< code>glDrawArrays。
问题内容: 这是使用内存映射将值写入内存的代码。当我尝试运行代码时, 在memcpy(pBuf,szMsg,len(szMsg))OSError中 出现错误 “文件“ MMF.py”,第26行,OSError:异常:访问冲突写入0xFFFFFFFFFA1C001B” 问题答案: 在此之前,这里(几乎)是您需要的一切:[Python 3.Docs]:ctypes- Python的外部函数库 。没有解
http://www.youtube.com/watch?v=bWl98dhvf8Q我参考了这个网站,并添加了MP4视频到javafx程序,我得到了一个致命的错误,有人请帮我清除这个运行时错误!谢谢你... Java运行时环境检测到一个致命错误:pc=0x6b9589ec,pid=1812,tid=5132 JRE版本:7.0_10-b17 Java VM:Java HotSpot(TM)客户端V
我试图在OSGi(Felix)中使用新的Leap运动传感器,但我最终遇到了一个异常访问冲突。 在我的清单中,我声明捆绑NativeCode如 当然: 在OSGi之外使用相同库的简单程序运行良好 这两个库在“x86”文件夹中的我的包中 “osname=win32;processor=x86”适合我(已经用其他bunble进行了测试) 在反编译Leap Motion jar后,我看到LeapJava.
我试图在C语言中实现一个四叉树,但是我有一个读访问冲突,我花了几个小时试图弄清楚。请注意,我已将所有成员变量公开,仅用于调试工作。 每当我试图细分一个象限,即根象限,我得到 抛出异常:读取访问冲突。标准::_Vector_alloc 四叉树由一个指向连续象限数组的指针和点组成。这些指针被传递到每一个象限,所以它们能够写入而不需要复制。 我做错了什么?你能提出改进的建议吗? 这是我的四叉树类: 四叉
作为一个新的反应者,我被一些看似简单的事情所困扰。不知道我做错了什么。 我有一个组件BasicReactComponent。我喜欢这样: 我试图在我的主文件中调用它,如下所示: 我一直得到下面的错误
尝试使用AWS C++SDK创建SQS队列。 运行在Windows上,64位,VC++。 更改调用以使用AWS::SQS::SQSClient*,将所有NuGet包更新到latets版本(以X.60结束)。这是堆栈跟踪: Testdb.exe!AmazonSQSqueue::AmazonSQSqueue(std::Basic_String,std::Allocator>queueIdentifie