0

説明したコードの参照については、 Github の StrixaGL ライブラリを参照してください。


現在、私のライブラリに 2 つの重大な問題があり、何が起こっているのか理解できません。皆さんが私を助けてくれることを望んでいました。まず、テクスチャなしでディスプレイ リスト (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#GL_CW と GL2#GL_CCW の両方で GL2#glFrontFace を使用して巻き上げ順序を変更しようとしましたが、どちらも機能せず、テクスチャは (私の観点から) 背面にまだ描画されていました。次に、ポイントが追加された順序を手動で逆にしてみました。それも何もしませんでした。したがって、描画されたオブジェクトは外側ではなく内側から照らされるため、これは照明にも影響します。

ここで何が起こっているのか、誰にもわからないでしょうか?


アップデート


まず第一に、何が起こっているかをより明確に定義した画像を次に示します。

ここに画像の説明を入力

(赤で囲まれた正面の壁 (視聴者に最も近い壁) は、一見見えないように見えます。しかし、背面の壁は完全に不透明です。この場合、面が正しくなるように、サーフェス法線も追加しました。それだけですが、照明を有効にし、立方体を青色に設定しました. 残念ながら、それは私が見ているものではありません. おそらく、これは誰かが私の問題についてもう少し洞察を与えるでしょう.

また、何を読み込んでいるのか気になる方のために、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 への対応: ここにダンプがあります: 文字数制限のためリンク


アップデート[1]


gluPerspective で「near」パラメータと「far」パラメータを逆にすると、ポリゴンが正しく描画されないという問題が修正されました。現在、大規模な問題はクラッシュであり、なぜそれが発生しているのかです。


アップデート[2]


ドライバーがクラッシュする問題を修正しました。表示リストからテクスチャをロードするコードを移動すると、正常に動作します。

4

2 に答える 2

1

これはATIドライバのクラッシュのようです。テルテイルはatio6axx.dllです。試す標準的なことは、ドライバーを見つけられる最新のものに更新することです。

正しく見えないテクスチャは、ほとんどの場合、あなたが思っているものとは異なるテクスチャ座標が原因です。「ポリゴンの間違った面」が何を意味するのかは明確ではありません。あなたが何を意味するかを私たちに示すために写真を投稿してください。

ポスター追加後に追加

すでに説明したように、これはカリングの問題です。近くと遠くを反転すると、法線のZ成分が反転し、カリングが反転します。前面はカリングされ、背面は保持されます。それはまさにあなたの写真が示すものです。

投稿した完全なダンプは、クラッシュがドライバーのディスプレイリストのレンダリングコード内にあることを明確に示していますが、クラッシュすることはありません。つまり、これはドライバーのバグです。他のマシンでアプレットを試して、実行されるかどうかを確認してください。

それ以外の場合は、さらにサポートする前にコードを投稿する必要があります。ドライバーがクラッシュすることはないはずですが、呼び出し元のディスプレイリストの記録または再生コードに問題がある場合は、クラッシュする可能性が高くなります。

于 2012-10-21T23:28:03.630 に答える
1

表示リストは単なる指示のリストです。

編集: hs_err_pid5104.log をここに投稿します。実際のエラーメッセージが含まれているため。

(おそらく) jogl のデバッグ フラグを使用しているため、GL がクラッシュしています。フラグがないと、すべての gl エラーが無視されます。

于 2012-10-22T20:33:31.893 に答える