java - 在显示列表和多边形面上

标签 java jogl

有关讨论的代码的引用,请参阅:StrixaGL Library on Github

<小时/>

目前我的库中有两个关键问题,我不明白发生了什么,希望你们能帮助我解决。首先,使用没有纹理的显示列表(请参阅 com.strixa.gl.Strixa3DElement#draw 方法)效果非常好。使用纹理而不使用显示列表也可以完美地工作。但我不确定的是,当同时使用它们时。如果同时使用两者,JVM 就会崩溃 here在第 145 行出现以下错误:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007173ffe0, pid=5104, tid=7284
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [atio6axx.dll+0x129ffe0]  atiPS+0xd8010
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of   Windows
#
# An error report file with more information is saved as:
# D:\User Data\My Documents\Eclipse Workspace\git\firepenguindiscopanda\fpdp_applet\bin\hs_err_pid5104.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

如果您想查看的话,我也可以提供故障转储。我以前从未处理过 JVM 崩溃,因此除了 native OpenGL dll 崩溃导致 JVM 崩溃之外,我对可能发生的情况知之甚少。

其次,当我绘制纹理时(通过禁用代码的显示列表部分),纹理会绘制在多边形的错误面上。我尝试过将 GL2#glFrontFace 与 GL2#GL_CW 和 GL2#GL_CCW 一起使用来更改缠绕顺序,但这些都不起作用,并且纹理仍然绘制在(从我的角度来看)背面。然后我尝试手动反转添加点的顺序。那也没有什么作用。因此,这也会影响照明,因为绘制的任何对象都将从内部而不是外部照亮。

可能有人知道这里发生了什么吗?

<小时/>

更新

<小时/>

首先,这是一个更清晰地描述正在发生的事情的图像:

enter image description here

(前墙(最靠近观察者的墙),以红色勾勒,看似不可见。但后墙完全不透明。在这种情况下,我什至添加了表面法线,以便面应该是正确。不仅如此,我还启用了照明并将正在绘制的立方体设置为蓝色。但遗憾的是,这不是我所看到的。也许这会让某人更深入地了解我的问题。

此外,如果您对我正在加载的内容感到好奇,这里是 OBJ 文件的内容:

# Blender v2.63 (sub 0) OBJ File: ''
# www.blender.org
mtllib pony.mtl
o Cube
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 1.000000 0.999999
v -0.999999 1.000000 -1.000001
v 1.000000 1.000000 -1.000000
v 1.000000 1.000000 1.000000
vn -0.000000 -1.000000 0.000000
vn 0.000000 1.000000 -0.000000
vn -1.000000 0.000000 -0.000000
vn 0.000000 -0.000000 -1.000000
vn 1.000000 -0.000000 0.000000
vn -0.000000 0.000000 1.000000
usemtl Material
s off
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6

MTL文件的内容:

# Blender MTL File: 'None'
# Material Count: 1
newmtl Material
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.000000 0.011431 0.640000
Ks 1.000000 1.000000 1.000000
Ni 1.000000
d 1.000000
illum 2

其次,响应 olamedia:这是转储:link because of character limit

<小时/>

更新[1]

<小时/>

通过反转 gluPerspective 上的“近”和“远”参数,修复了多边形绘制不正确的问题。现在主要的问题是崩溃及其发生的原因。

<小时/>

更新[2]

<小时/>

修复了驱动程序崩溃的问题。如果我移动代码以将纹理加载到显示列表之外,它就可以正常工作。

最佳答案

显示列表只是一个指令列表。

编辑: 在此处发布 hs_err_pid5104.log。因为它包含真正的错误消息。

GL 崩溃是因为(我想)你正在使用 jogl 的调试标志。如果没有标志,所有 gl 错误都将被忽略。

关于java - 在显示列表和多边形面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13003053/

相关文章:

java - 如何从 lambda 表达式返回值?

java - 在Java中包装Selenium wait.until函数,函数作为参数

java - 是否存在 Java 同步关键字比 Atomics 更好的可行用例?

java - GLCanvas 上的模糊文字

java - Java 9 中 vector/流数据的异步、可组合返回值

java - 在 Java 中使用正则表达式划分数字列表

Java OpenGL - 计算等距 View 的正交平截头体

jogl - 在 JOGL 中找不到 GL.glColor3f?

Java OpenGL保存深度缓冲区

java - 如何使用 JOGL2 隐藏鼠标光标?