2012-10-21 70 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

好吧,對於漫長的等待,我感到非常抱歉。我已將轉儲添加到原始帖子的底部。 –