簡體   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