1

我正在使用 JOGL 来加载 OBJ 模型并使用 VBO 在 GL 画布中显示它。大多数情况下一切正常,但是有些模型的顶点必须变形。例如,我有一个箭头对象,并且必须能够使箭头的杆变形以根据需要使尾部尽可能长/短,同时保持箭头的对象几何形状。这适用于渲染器的一个实例,但是当我尝试将另一个实例添加到场景中时,系统在 GLDrawElements 调用上退出并输出此错误日志。谁能指出我正确的方向?我完全不知所措。

    #
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000069e3e4c8, pid=6544, tid=2692
#
# JRE version: 6.0_21-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode windows-amd64 )
# Problematic frame:
# C  [nvoglnt.dll+0x93e4c8]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

...
Stack: [0x0000000052640000,0x0000000052740000],  sp=0x000000005273ecb0,  free space=3fb0000000000000000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [nvoglnt.dll+0x93e4c8]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  com.sun.opengl.impl.GLImpl.glDrawElements0(IIIJ)V
J  com.sun.opengl.impl.GLImpl.glDrawElements(IIIJ)V
j  com.sonogenics.model.AbstractModelHandler$Renderer.display(Ljavax/media/opengl/GL;)V+196
j  com.sonogenics.model.AbstractModelHandler$Renderer.display(Ljavax/media/opengl/GL;Lcom/sonogenics/camera/SimpleProjection;FFFLcom/sonogenics/playout/Field;)V+436
...
4

2 回答 2

3

使用GDebugger查看导致错误的调用并检查 gl 调用中的无效数据。

这真是太棒了。:)

于 2011-05-25T13:55:05.727 回答
1

ACCESS_VIOLATION 意味着您告诉 GL 读取“好”区域之外的内存:)

在 Drawelements 中,可能有几个原因,您想检查设置 GL 缓冲区的位置以及传递给 DrawElements 的内容。

  • - 你的一个缓冲区是一个错误的地址,导致它从谁知道哪里读取
  • -您的偏移量之一,步幅太长,导致 GL 超出分配结束
  • - 你说模型中的顶点数太长......导致它超出分配的末尾
  • - 你的 VBO 分配对于 stride * verts 数来说不够大
于 2011-05-26T03:10:42.633 回答