2012-10-21 47 views
0

仅供参考,以讨论代码,请参阅: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崩溃,所以我不知道除了本地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]


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

+0

是。如果近端和远端翻转,则法线的Z分量反转,并且剔除反转。正面被剔除,后面被保留。这正是你所看到的(正如我们前面所讨论的)。正如我前面所猜测的那样,完整的转储清楚地显示出崩溃位于驱动程序的显示列表呈现代码中,该代码永远不会崩溃。也就是说,这是一个驱动程序错误。在其他机器上尝试你的applet,看它是否运行。否则,在我们可以进一步帮助之前,您必须先发布代码。 – Gene

回答

1

看起来这是ATI驱动程序崩溃。该告示是atio6axx.dll。标准的事情是尝试更新你的驱动程序,最新的,你可以找到。

看起来不正确的纹理几乎总是由于纹理坐标,而不是你认为的纹理坐标。目前还不清楚“多边形的错误面”是什么意思。张贴图片向我们展示你的意思。

新增海报的另外

正如我们讨论后,这是剔除问题。当近端和远端翻转时,法线的Z分量反转,并且剔除反转。正面被剔除,后面被保留。这正是你的照片所显示的。

您发布的完整转储清楚地表明崩溃位于驱动程序的显示列表呈现代码内,该代码永远不会崩溃。也就是说,这是一个驱动程序错误。在其他机器上尝试你的applet,看它是否运行。

否则,您必须先发布代码,然后才能进一步提供帮助。虽然驱动程序不应该崩溃,但如果对调用显示列表记录或重放代码有不正确的地方,则更有可能这样做。

+0

我希望我能得到web小程序工作...然后我可以直接告诉你。 XD给我一下,我给你一张图片,但简而言之,问题是我可以看到距离相机最近的物体的一侧,也就是距离相机最远的一侧。 ,为什么ATI驱动程序会在使用显示列表时崩溃,但是否则会崩溃? –

+0

[Image you requested](http://imgur.com/XKpNP)。这是我可以给你的最好的。非常清楚,这是我目前在我的电脑上唯一的型号 –

+1

很难说它应该是什么样子,是否打开了剔除?如果是这样,看起来你的法向矢量指向了错误的方向,所以另一种可能是你没有启用Z缓冲区,所以你没有得到隐藏的表面去除 – Gene

1

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

编辑: 发表hs_err_pid5104.log这里。因为它包含真正的错误信息。

GL粉碎,因为(我想)你用jogl的调试标志。没有标志,所有的gl错误将被忽略。

+0

好吧,对于漫长的等待,我感到非常抱歉。我已将转储添加到原始帖子的底部。 –