繁体   English   中英

在显示列表和多边形面上

[英]On Display Lists and Polygon Faces

有关所讨论代码的参考,请参阅: Github上的StrixaGL库


我目前在我的图书馆里有两个关键问题,我不明白发生了什么,并希望你们可以帮助我。 首先,使用不带纹理的显示列表(参见com.strixa.gl.Strixa3DElement#draw方法)可以很好地完成。 使用不使用显示列表的纹理也可以很好地工作。 但我不确定的是,两者同时使用它们。 如果两者都使用时,JVM崩溃这里在用下面的错误行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来改变绕线顺序,但这些都不起作用,并且纹理仍在(从我的角度来看)背面上绘制。 然后我尝试手动反转这些点被添加的顺序。 那也没什么作用。 因此,这也会影响照明,因为所绘制的任何物体都将从内部而不是外部照亮。

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


更新


首先,这是一个更明确定义的正在发生的图像:

在此输入图像描述

(前面的墙(离观察者最近的墙),用红色勾勒出来,看似不可见。然而后墙完全是不透明的。在这种情况下,我甚至添加了表面法线,这样就可以使面部正确。只有这一点,但我已经启用了灯光,并将立方体设置为蓝色。然而,可悲的是,这不是我所看到的。也许这会让人更深入地了解我的问题。

另外,如果你对我正在加载的内容感到好奇,这里是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: 由于字符限制,这是dump: 链接


更新[1]


通过在gluPerspective上反转我的'near'和'far'参数修复了我的多边形被错误绘制的问题。 现在问题在于崩溃,以及它为什么会发生。


更新[2]


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

看起来这是ATI驱动程序中的崩溃。 告密者是atio6axx.dll 要尝试的标准事项是将您的驱动程序更新为您可以找到的最新版本。

看起来不正确的纹理几乎总是由于纹理坐标不是您认为的那样。 目前尚不清楚“多边形的错误面孔”是什么意思。 发布图片向我们展示您的意思。

海报添加后添加

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

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

否则,在我们进一步提供帮助之前,您必须发布代码。 虽然驱动程序不应该崩溃,但如果调用显示列表记录或回放代码不正确,则更有可能这样做。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM