Problem displaying a triangle array/mesh

I agree with you Riven. As soon as a JOGL user asks for help explicitly mentioning it, I will complain if anybody uses this thread to promote its competitor. If I owned a car, if I needed some help to repair it, I would be angry if someone used this “opportunity” to try selling me another car.

There are some tutorials but lots of them use JOGL 1.1.1a, a few still uses an old beta version even older. This is not a problem as it is quite easy to switch from JOGL 1.1.1a to JOGL 2.0 and the API is documented:
http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/

Anyway, using a Java binding of OpenGL requires some knowledge of plain old OpenGL and you can easily find the documentation of all OpenGL methods on Internet.

Someone else on this forum ported some Nehe tutorials to JOGL 2.0, maybe you could have a look at them.

I know you’re trying to help but don’t dirty your nice and helpful explanations with advertising. I think you know the programmable part of OpenGL better than me. Personally I have used both bindings, I had even complained about a regression in the competitor of JOGL and it had been fixed.

[quote=“gouessej,post:21,topic:37735”]
http://img.chan4chan.com/img/2009-03-16/1237240452958.jpg

Because downloading a car is so expensive. ;D

The only thing I said was that
A) I currently use LWJGL (or “the competitor of JOGL” as you insist to call it. Afraid of mentioning its name? =S) so that is where my example code is going to come from, and
B) I said he could use the same one as me to make it easier to follow my code, which turned out to be unnecessary as he seems to be able to handle it just fine with JOGL.

I’ll avoid doing B again if your gonna be that cranky about it… ._.

What do you mean exactly?

Like creating n-buffers?

I think I explained it badly, I go on the Project Properties, then in the run tab, then under the VM Options, here to be clear:

LOL :D, I dont know exaclty, I just took on the fly from an example over internet :stuck_out_tongue:

Do you mean here: http://jogamp.org/wiki/index.php/Jogl_Tutorial ?

I found among those examples only one using JOGL2 and VBOs, the second link under Wade

I am sorry that I have caused a dispute :frowning:

However, although by a rigorous point of view you are right, theagentd wanted only to help me by suggesting me that and I appreciated it, also if I didnt follow this one of his suggests. He was not obsessive at all, so I would say that there is no problem :wink:

Ok, now coming back to my program ^^, I tried this command that another guy suggested me about the buffer creation:

        vertexData = ByteBuffer.allocateDirect(triangleNumber*9).order(ByteOrder.nativeOrder()).asFloatBuffer();

But I get a:

[quote]Exception in thread “AWT-EventQueue-0” java.nio.BufferOverflowException
Reshape
Reshape
Display

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b38fd72, pid=7144, tid=120

JRE version: 6.0_18-b07

Java VM: Java HotSpot™ Client VM (16.0-b13 mixed mode windows-x86 )

Problematic frame:

C 0x6b38fd72

An error report file with more information is saved as:

H:\Dokumente und Einstellungen\gbarbieri\Eigene Dateien\NetBeansProjects\JOpenGL with Cuda\hs_err_pid7144.log

If you would like to submit a bug report, please visit:

http://java.sun.com/webapps/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

at java.nio.DirectFloatBufferU.put(DirectFloatBufferU.java:311)
at java.nio.FloatBuffer.put(FloatBuffer.java:813)
at Viewer.initVertexArray(Viewer.java:199)
at Viewer.init(Viewer.java:131)
at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:135)
at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:154)
at javax.media.opengl.awt.GLCanvas$InitAction.run(GLCanvas.java:886)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:379)
at javax.media.opengl.awt.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:799)

Java Result: 1
[/quote]
No matter how many triangles (it is the same also with very few of them)

Ok, I solved only the overflow with this ( I forgot also the *4):

ByteBuffer vvb = ByteBuffer.allocateDirect(triangleNumber*9*4);
vvb.order(ByteOrder.nativeOrder());
FloatBuffer vertexData = vvb.asFloatBuffer();

But I am still getting the memory violation access:

[quote]#

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b38fd72, pid=6412, tid=1808

JRE version: 6.0_18-b07

Java VM: Java HotSpot™ Client VM (16.0-b13 mixed mode windows-x86 )

Problematic frame:

C 0x6b38fd72

An error report file with more information is saved as:

H:\Dokumente und Einstellungen\gbarbieri\Eigene Dateien\NetBeansProjects\JOpenGL with Cuda\hs_err_pid6412.log

If you would like to submit a bug report, please visit:

http://java.sun.com/webapps/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

Java Result: 1
[/quote]
.log

[quote]#

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b38fd72, pid=6412, tid=1808

JRE version: 6.0_18-b07

Java VM: Java HotSpot™ Client VM (16.0-b13 mixed mode windows-x86 )

Problematic frame:

C 0x6b38fd72

If you would like to submit a bug report, please visit:

http://java.sun.com/webapps/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

--------------- T H R E A D ---------------

Current thread (0x68a40800): JavaThread “AWT-EventQueue-0” [_thread_in_native, id=1808, stack(0x692a0000,0x692f0000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

Registers:
EAX=0x6b932ee0, EBX=0x6b8b0000, ECX=0x00000000, EDX=0x000000aa
ESP=0x692ef594, EBP=0x692ef5a0, ESI=0x00000000, EDI=0x00000000
EIP=0x6b38fd72, EFLAGS=0x00010212

Top of Stack: (sp=0x692ef594)
0x692ef594: 000000aa 6b8b0000 00000000 6b473e80
0x692ef5a4: 69c9f47d 6b8b0000 6b932edc 00000000
0x692ef5b4: 000000aa 6b473e80 00000000 00000004
0x692ef5c4: 00000003 00000000 000000aa 6b38fd40
0x692ef5d4: 69c9f5b9 00000004 0009c4d8 0009c582
0x692ef5e4: 6b8b0000 69631ed1 6b8b0000 00000004
0x692ef5f4: 00000000 0009c582 68a40800 60c688c8
0x692ef604: 60c688c8 692ef628 693e8c81 00000004

Instructions: (pc=0x6b38fd72)
0x6b38fd62: 04 8b 35 28 5c 8d 6b 8b 76 04 8d 3c 49 8d 34 be
0x6b38fd72: 8b 3e 8b 6e 04 89 38 89 68 04 8b 7e 08 89 78 08

Stack: [0x692a0000,0x692f0000], sp=0x692ef594, free space=13d692ef0c8k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C 0x6b38fd72

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j jogamp.opengl.gl4.GL4bcImpl.dispatch_glDrawArrays1(IIIJ)V+0
j jogamp.opengl.gl4.GL4bcImpl.glDrawArrays(III)V+39
j Viewer.init(Ljavax/media/opengl/GLAutoDrawable;)V+250
j jogamp.opengl.GLDrawableHelper.init(Ljavax/media/opengl/GLEventListener;Ljavax/media/opengl/GLAutoDrawable;Z)Z+13
j jogamp.opengl.GLDrawableHelper.init(Ljavax/media/opengl/GLAutoDrawable;)V+48
j javax.media.opengl.awt.GLCanvas$InitAction.run()V+11
j jogamp.opengl.GLDrawableHelper.invokeGL(Ljavax/media/opengl/GLDrawable;Ljavax/media/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+238
j javax.media.opengl.awt.GLCanvas.maybeDoSingleThreadedWorkaround(Ljava/lang/Runnable;Ljava/lang/Runnable;)V+36
j javax.media.opengl.awt.GLCanvas.display()V+31
j javax.media.opengl.awt.GLCanvas.paint(Ljava/awt/Graphics;)V+135
j sun.awt.RepaintArea.paintComponent(Ljava/awt/Component;Ljava/awt/Graphics;)V+6
j sun.awt.RepaintArea.paint(Ljava/lang/Object;Z)V+326
j sun.awt.windows.WComponentPeer.handleEvent(Ljava/awt/AWTEvent;)V+107
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+853
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+46
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
0x669d7400 JavaThread “Timer-0” [_thread_blocked, id=6692, stack(0x6be00000,0x6be50000)]
0x002b8400 JavaThread “DestroyJavaVM” [_thread_blocked, id=5572, stack(0x008c0000,0x00910000)]
0x68990400 JavaThread “D3D Screen Updater” daemon [_thread_blocked, id=1804, stack(0x6a960000,0x6a9b0000)]
=>0x68a40800 JavaThread “AWT-EventQueue-0” [_thread_in_native, id=1808, stack(0x692a0000,0x692f0000)]
0x66de8800 JavaThread “AWT-Shutdown” [_thread_blocked, id=4480, stack(0x68e00000,0x68e50000)]
0x66df8400 JavaThread “main-SharedResourceRunner” daemon [_thread_blocked, id=6788, stack(0x69460000,0x694b0000)]
0x68a76800 JavaThread “AWT-Windows” daemon [_thread_in_native, id=6380, stack(0x68e50000,0x68ea0000)]
0x68a5a400 JavaThread “Java2D Disposer” daemon [_thread_blocked, id=6752, stack(0x68db0000,0x68e00000)]
0x66973000 JavaThread “Low Memory Detector” daemon [_thread_blocked, id=7400, stack(0x66bc0000,0x66c10000)]
0x6696d400 JavaThread “CompilerThread0” daemon [_thread_blocked, id=4392, stack(0x66b70000,0x66bc0000)]
0x6696bc00 JavaThread “Attach Listener” daemon [_thread_blocked, id=7472, stack(0x66b20000,0x66b70000)]
0x6696a800 JavaThread “Signal Dispatcher” daemon [_thread_blocked, id=4508, stack(0x66ad0000,0x66b20000)]
0x66956000 JavaThread “Finalizer” daemon [_thread_blocked, id=4296, stack(0x66a80000,0x66ad0000)]
0x66954800 JavaThread “Reference Handler” daemon [_thread_blocked, id=4428, stack(0x66a30000,0x66a80000)]

Other Threads:
0x66951c00 VMThread [stack: 0x669e0000,0x66a30000] [id=5968]
0x6697e000 WatcherThread [stack: 0x66c10000,0x66c60000] [id=6968]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
def new generation total 18688K, used 4569K [0x02990000, 0x03dd0000, 0x21d90000)
eden space 16640K, 23% used [0x02990000, 0x02d5bc60, 0x039d0000)
from space 2048K, 33% used [0x039d0000, 0x03a7a810, 0x03bd0000)
to space 2048K, 0% used [0x03bd0000, 0x03bd0000, 0x03dd0000)
tenured generation total 41396K, used 34742K [0x21d90000, 0x245fd000, 0x60590000)
the space 41396K, 83% used [0x21d90000, 0x23f7d890, 0x23f7da00, 0x245fd000)
compacting perm gen total 12288K, used 11034K [0x60590000, 0x61190000, 0x64590000)
the space 12288K, 89% used [0x60590000, 0x61056ba8, 0x61056c00, 0x61190000)
No shared spaces configured.

Dynamic libraries:
0x00400000 - 0x00424000 H:\Programme\Java\jdk1.6.0_18\bin\java.exe
0x7c910000 - 0x7c9c9000 H:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c908000 H:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e4a000 H:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee3000 H:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 H:\WINDOWS\system32\Secur32.dll
0x7c340000 - 0x7c396000 H:\Programme\Java\jdk1.6.0_18\jre\bin\msvcr71.dll
0x6d8b0000 - 0x6db47000 H:\Programme\Java\jdk1.6.0_18\jre\bin\client\jvm.dll
0x7e360000 - 0x7e3f1000 H:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000 H:\WINDOWS\system32\GDI32.dll
0x76af0000 - 0x76b1e000 H:\WINDOWS\system32\WINMM.dll
0x76330000 - 0x7634d000 H:\WINDOWS\system32\IMM32.DLL
0x6d860000 - 0x6d86c000 H:\Programme\Java\jdk1.6.0_18\jre\bin\verify.dll
0x6d3e0000 - 0x6d3ff000 H:\Programme\Java\jdk1.6.0_18\jre\bin\java.dll
0x6d340000 - 0x6d348000 H:\Programme\Java\jdk1.6.0_18\jre\bin\hpi.dll
0x76bb0000 - 0x76bbb000 H:\WINDOWS\system32\PSAPI.DLL
0x6d8a0000 - 0x6d8af000 H:\Programme\Java\jdk1.6.0_18\jre\bin\zip.dll
0x68000000 - 0x68036000 H:\WINDOWS\system32\rsaenh.dll
0x77be0000 - 0x77c38000 H:\WINDOWS\system32\msvcrt.dll
0x76620000 - 0x766d6000 H:\WINDOWS\system32\USERENV.dll
0x66e80000 - 0x66ed5000 H:\WINDOWS\system32\netapi32.dll
0x6d6c0000 - 0x6d6d3000 H:\Programme\Java\jdk1.6.0_18\jre\bin\net.dll
0x71a10000 - 0x71a27000 H:\WINDOWS\system32\WS2_32.dll
0x71a00000 - 0x71a08000 H:\WINDOWS\system32\WS2HELP.dll
0x719b0000 - 0x719f0000 H:\WINDOWS\System32\mswsock.dll
0x76ee0000 - 0x76f07000 H:\WINDOWS\system32\DNSAPI.dll
0x76d20000 - 0x76d39000 H:\WINDOWS\system32\iphlpapi.dll
0x76f70000 - 0x76f78000 H:\WINDOWS\System32\winrnr.dll
0x76f20000 - 0x76f4d000 H:\WINDOWS\system32\WLDAP32.dll
0x76f80000 - 0x76f86000 H:\WINDOWS\system32\rasadhlp.dll
0x66f70000 - 0x66f9b000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\JCudaDriver-windows-x861267435476727095117.dll
0x66fb0000 - 0x674ef000 H:\WINDOWS\system32\nvcuda.dll
0x67520000 - 0x67733000 H:\WINDOWS\system32\nvapi.dll
0x774b0000 - 0x775ee000 H:\WINDOWS\system32\ole32.dll
0x770f0000 - 0x7717b000 H:\WINDOWS\system32\OLEAUT32.dll
0x77f40000 - 0x77fb6000 H:\WINDOWS\system32\SHLWAPI.dll
0x7e670000 - 0x7ee91000 H:\WINDOWS\system32\SHELL32.dll
0x778f0000 - 0x779e4000 H:\WINDOWS\system32\SETUPAPI.dll
0x77bd0000 - 0x77bd8000 H:\WINDOWS\system32\VERSION.dll
0x773a0000 - 0x774a3000 H:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll
0x6d6e0000 - 0x6d6e9000 H:\Programme\Java\jdk1.6.0_18\jre\bin\nio.dll
0x67f50000 - 0x67f5a000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln561151374246547883\jln5225070793958013922\gluegen-rt.dll
0x6d0b0000 - 0x6d1fa000 H:\Programme\Java\jdk1.6.0_18\jre\bin\awt.dll
0x72f70000 - 0x72f96000 H:\WINDOWS\system32\WINSPOOL.DRV
0x67f80000 - 0x67fb8000 H:\WINDOWS\system32\uxtheme.dll
0x746a0000 - 0x746ec000 H:\WINDOWS\system32\MSCTF.dll
0x75250000 - 0x7527e000 H:\WINDOWS\system32\msctfime.ime
0x6d410000 - 0x6d416000 H:\Programme\Java\jdk1.6.0_18\jre\bin\jawt.dll
0x6a440000 - 0x6a44a000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln561151374246547883\jln5225070793958013922\nativewindow_awt.dll
0x6d2e0000 - 0x6d334000 H:\Programme\Java\jdk1.6.0_18\jre\bin\fontmanager.dll
0x68ee0000 - 0x69086000 H:\WINDOWS\system32\d3d9.dll
0x6de80000 - 0x6de86000 H:\WINDOWS\system32\d3d8thk.dll
0x6c100000 - 0x6c110000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln561151374246547883\jln5225070793958013922\nativewindow_win32.dll
0x692f0000 - 0x693bc000 H:\WINDOWS\system32\OpenGL32.dll
0x693c0000 - 0x693e0000 H:\WINDOWS\system32\GLU32.dll
0x736d0000 - 0x7371b000 H:\WINDOWS\system32\DDRAW.dll
0x73b30000 - 0x73b36000 H:\WINDOWS\system32\DCIMAN32.dll
0x693e0000 - 0x69453000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln561151374246547883\jln5225070793958013922\jogl_desktop.dll
0x69500000 - 0x6a34a000 H:\WINDOWS\system32\nvoglnt.dll

VM Arguments:
jvm_args: -Dfile.encoding=UTF-8 -Xmx1500m -XX:MaxDirectMemorySize=256m
java_command: CudaImplementation
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=H:\Programme\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin;H:\WINDOWS\system32;H:\WINDOWS;H:\WINDOWS\System32\Wbem;h:\Programme\Microsoft SQL Server\90\Tools\binn;H:\IFOR\WIN\BIN;H:\IFOR\WIN\BIN\EN_US;H:\Programme\Microsoft Visual Studio 10.0\VC\bin;H:\Programme\Microsoft Visual Studio 10.0\VC\bin
USERNAME=gbarbieri
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel

--------------- S Y S T E M ---------------

OS: Windows XP Build 2600 Service Pack 3

CPU:total 4 (4 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1

Memory: 4k page, physical 3144748k(1361480k free), swap 5070780k(3145220k free)

vm_info: Java HotSpot™ Client VM (16.0-b13) for windows-x86 JRE (1.6.0_18-b07), built on Dec 17 2009 13:35:55 by “java_re” with MS VC++ 7.1 (VS2003)

time: Fri Dec 16 09:26:00 2011
elapsed time: 17 seconds
[/quote]
The old way vertexData = GLBuffers.newDirectFloatBuffer(triangleNumber33); works like a charm (below 2M triangles)

Hi

You should always use the class Buffers to create your NIO buffers for JOGL but your source code does almost the same thing:

I don’t understand why you cannot create a bigger NIO buffer of several MB. I already succeeded in creating bigger ones. Orangy Tang suggests that the direct NIO buffer uses continuous memory, you might have enough memory but not enough continuous memory, that is why he suggests using several smaller NIO buffers instead of a single big one. I do the same when I implement streaming.

That is a slightly old version of Java you’ve got there - maybe this bug has been fixed in a newer release?

Cas :slight_smile:

Like? More than 64MB you mean? Have you used the -XX:MaxDirectMemorySize=256m option?

Ok, im going to install the 6.30, it should be the last one, right?.. or do you suggest me to try the 7 or a beta?

@gouessej, what java you have?

Use Java 7 if you’ve not got any good reason not to - it’s great.

Cas :slight_smile:

When I released a small test made in Java 7, everyone started flaming me. Did people suddenly realize that it’s actually a newer version of Java?

Lots of people here write applets, and the standard browser plugin version is STILL 1.6, which is what makes 1.7 such a sticky wicket. Most of my server apps have been upgraded already (except for one that simply won’t work even on 1.7u2 for reasons unknown), but if I were distributing to mass markets, I wouldn’t be able to touch 1.7. I think it’s not going to change unless and until they get javafx 2.0 running on linux and mac (still beta on mac, still no sign of it for linux).

Personally I think Oracle simply cannot manage commodity consumer software… and it’s not like they even had a high bar to clear what with the previous owner being Sun.

I succeeded in creating a VBO measuring about 200 MB on a 64-bits machine under Cent OS Linux 5.3. I used this option but with a greater value of course.

I often use both Java 1.6 update 26, Java 1.6 update 30 and OpenJDK 1.6. I have not yet tested Java 1.7.

Nice, I will try the same, that is VBOs.

However just a question about the displaying the image over the screen.

I am testing now how a 3d view of my model looks like. I applied a mouse listener and I can rotate and zoom, but I would like that it could rotate only around the X and Y axes. The problem arises when I rotate it first over Y axes, lets say, for 90° in left or right direction and then I try the rotation over X, but in this case the rotation is over Z for me.

I guess when I rotate over Y for 90°, also the model coordinating system rotate with it, and that is why its X axes corresponds to the Z axes in my coordinating system (the viewer).

Are you trying to implement a virtual trackball? There is an exemple of implementation using it in MSG (minimal scenegraph) and another one in Ardor3D, look at OrbitCamExample. I already implement it at work, do you use Euler angles?

No no :smiley:

I am just trying to get a custom 3d view of a model, like this

However, I found a solution, but this implies that I do set the modelview matrix by myself

But how do I set modelview matrix in JOGL2? :confused:

Let us suppose that I have this 3d model

i perform a

gl.glRotatef(90, 0, 1, 0);

But if I do

gl.glRotatef(90, 0, 1, 0);
gl.glRotatef(90, 1, 0, 0);

But I would like to get this one

The second rotation must somehow connected to the first one

When you rotate an object, you’re also rotating its axes so that further rotations are along those axes. So in order to get the picture on the bottom, you rotate on the X axis, then on the Y axis, which has now been rotated to be where your Z axis used to be.

It helps to visualize this for real: head over to an arts and crafts store, and get three colored pencils: one each of red, blue, and green, and a styrofoam ball. Poke the pencils into the ball so that the red pencil points right (X axis), the green one points up (Y axis), and the blue one points toward you (Z axis). When you want to visualize a rotation along an axis, loosely grab with your right hand the axis you want to rotate, pointing your thumb away from the ball. The direction your fingers curl is the positive direction of rotation.

Stick the rig on a spike like one from an office supply store and you can keep it in place while you visualize rotations.

Of course you can just fire up blender and do the same thing, but it’s not nearly as fun. :slight_smile:

So you are telling me that there is no solution? :frowning:

I guess the problem is just to connect somehow the second rotation to the first one with some geometric formulas

I just gave you the solution in the first paragraph: Rotate on the X axis, then on Y.

That was just an example to show my problem, I needed to do solve this for every rotation that one could make

However I found a solution thank to another guy with:

 float newRotation[] = multiply(rotationX(-dy), rotationY(-dx));
            currentRotation = multiply(currentRotation, newRotation);

At every new rotation (within mouseDragged) I call this piece of code, where rotationX(a) returns the rotation matrix for a rotation over X, rotationY does the same over Y

Then I obtain a new rotation matrix that in turn I multiply on right side for the current (or the old, as you prefer) rotation matrix…

In this way I obtain rotation only over x and y axes referred to the coordinating system of the viewer, no matter which rotation you are performing! ;D

However next part is normal vectors, and I am experiencing crashed (or better again memory access violation)

what I do is simply

 // in init
// Create the the vertex data
            gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
            gl.glEnableClientState(GL2.GL_NORMAL_ARRAY);

            initVertexArray(gl);
            initNormalArray(gl);
            
            //  specify buffer that hold vertex/normal
            gl.glVertexPointer(3, GL2.GL_FLOAT, 0, vertexData);
            gl.glNormalPointer(GL2.GL_FLOAT, 0, normalData);
            
            //  draw
            gl.glDrawArrays(GL.GL_TRIANGLES, 0, triangleNumber*3);




private void initNormalArray(GL2 gl)    {
        normalData = GLBuffers.newDirectFloatBuffer(triangleNumber*3);
      
        for(int i=0; i<triangleNumber; i++) {
            Triangle tmp = triangleArray.get(i);
            normalData.put(new float[]{tmp.nx, tmp.ny, tmp.nz});
            //System.out.println("nx: "+tmp.nx+" ny: "+tmp.ny+" nz: "+tmp.nz);
        }
        System.out.println("normalData: "+normalData.toString());
        normalData.flip();
        System.out.println("normalData: "+normalData.toString());
    }


A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6b2efd91, pid=8044, tid=7040

JRE version: 6.0_18-b07

Java VM: Java HotSpot™ Client VM (16.0-b13 mixed mode windows-x86 )

Problematic frame:

C 0x6b2efd91

If you would like to submit a bug report, please visit:

http://java.sun.com/webapps/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

--------------- T H R E A D ---------------

Current thread (0x6898f000): JavaThread “AWT-EventQueue-0” [_thread_in_native, id=7040, stack(0x6b750000,0x6b7a0000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x689ce000

Registers:
EAX=0x6aff1ce0, EBX=0x6b810000, ECX=0x00001400, EDX=0x00000041
ESP=0x6b79f5b4, EBP=0x3cb8df9e, ESI=0x689ce000, EDI=0x00003c00
EIP=0x6b2efd91, EFLAGS=0x00010206

Top of Stack: (sp=0x6b79f5b4)
0x6b79f5b4: 00000055 6b810000 000013ec 6b3d3e80
0x6b79f5c4: 69c9f47d 6b810000 6aff1afc 000013ec
0x6b79f5d4: 00000055 6b3d3e80 00000000 00000004
0x6b79f5e4: 00000006 00000000 00000055 6b2efd40
0x6b79f5f4: 69c9f5b9 00000004 00001ed7 00003318
0x6b79f604: 6b810000 69631ed1 6b810000 00000004
0x6b79f614: 00000000 00003318 6898f000 60c6a328
0x6b79f624: 60c6a328 6b79f648 693e8c81 00000004

Instructions: (pc=0x6b2efd91)
0x6b2efd81: 08 8b 35 28 5c 83 6b 8b 76 30 8d 3c 49 8d 34 be
0x6b2efd91: 8b 3e 8b 6e 04 89 78 0c 89 68 10 8b 7e 08 89 78

Stack: [0x6b750000,0x6b7a0000], sp=0x6b79f5b4, free space=13d6b79f0e8k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C 0x6b2efd91

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j jogamp.opengl.gl4.GL4bcImpl.dispatch_glDrawArrays1(IIIJ)V+0
j jogamp.opengl.gl4.GL4bcImpl.glDrawArrays(III)V+39
j Viewer.init(Ljavax/media/opengl/GLAutoDrawable;)V+170
j jogamp.opengl.GLDrawableHelper.init(Ljavax/media/opengl/GLEventListener;Ljavax/media/opengl/GLAutoDrawable;Z)Z+13
j jogamp.opengl.GLDrawableHelper.init(Ljavax/media/opengl/GLAutoDrawable;)V+48
j javax.media.opengl.awt.GLCanvas$InitAction.run()V+11
j jogamp.opengl.GLDrawableHelper.invokeGL(Ljavax/media/opengl/GLDrawable;Ljavax/media/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+238
j javax.media.opengl.awt.GLCanvas.maybeDoSingleThreadedWorkaround(Ljava/lang/Runnable;Ljava/lang/Runnable;)V+36
j javax.media.opengl.awt.GLCanvas.display()V+31
j javax.media.opengl.awt.GLCanvas.paint(Ljava/awt/Graphics;)V+135
j sun.awt.RepaintArea.paintComponent(Ljava/awt/Component;Ljava/awt/Graphics;)V+6
j sun.awt.RepaintArea.paint(Ljava/lang/Object;Z)V+326
j sun.awt.windows.WComponentPeer.handleEvent(Ljava/awt/AWTEvent;)V+107
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+853
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+46
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
0x689bc400 JavaThread “Timer-0” [_thread_blocked, id=6892, stack(0x6bd60000,0x6bdb0000)]
0x002b8400 JavaThread “DestroyJavaVM” [_thread_blocked, id=7416, stack(0x008c0000,0x00910000)]
0x68981c00 JavaThread “D3D Screen Updater” daemon [_thread_blocked, id=4776, stack(0x6b7a0000,0x6b7f0000)]
=>0x6898f000 JavaThread “AWT-EventQueue-0” [_thread_in_native, id=7040, stack(0x6b750000,0x6b7a0000)]
0x68972400 JavaThread “AWT-Shutdown” [_thread_blocked, id=5124, stack(0x6a950000,0x6a9a0000)]
0x68983800 JavaThread “main-SharedResourceRunner” daemon [_thread_blocked, id=8024, stack(0x69460000,0x694b0000)]
0x6698f400 JavaThread “AWT-Windows” daemon [_thread_in_native, id=7808, stack(0x68e50000,0x68ea0000)]
0x66e10800 JavaThread “Java2D Disposer” daemon [_thread_blocked, id=4116, stack(0x68db0000,0x68e00000)]
0x66973400 JavaThread “Low Memory Detector” daemon [_thread_blocked, id=4944, stack(0x66bc0000,0x66c10000)]
0x6696d400 JavaThread “CompilerThread0” daemon [_thread_blocked, id=6876, stack(0x66b70000,0x66bc0000)]
0x6696bc00 JavaThread “Attach Listener” daemon [_thread_blocked, id=5056, stack(0x66b20000,0x66b70000)]
0x6696a800 JavaThread “Signal Dispatcher” daemon [_thread_blocked, id=3220, stack(0x66ad0000,0x66b20000)]
0x66959400 JavaThread “Finalizer” daemon [_thread_blocked, id=5640, stack(0x66a80000,0x66ad0000)]
0x66954800 JavaThread “Reference Handler” daemon [_thread_blocked, id=5892, stack(0x66a30000,0x66a80000)]

Other Threads:
0x66951c00 VMThread [stack: 0x669e0000,0x66a30000] [id=8088]
0x6697e000 WatcherThread [stack: 0x66c10000,0x66c60000] [id=1320]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
def new generation total 4928K, used 3332K [0x02990000, 0x02ee0000, 0x21d90000)
eden space 4416K, 72% used [0x02990000, 0x02cab1c0, 0x02de0000)
from space 512K, 29% used [0x02e60000, 0x02e85f70, 0x02ee0000)
to space 512K, 0% used [0x02de0000, 0x02de0000, 0x02e60000)
tenured generation total 10944K, used 2894K [0x21d90000, 0x22840000, 0x60590000)
the space 10944K, 26% used [0x21d90000, 0x22063b48, 0x22063c00, 0x22840000)
compacting perm gen total 12288K, used 11034K [0x60590000, 0x61190000, 0x64590000)
the space 12288K, 89% used [0x60590000, 0x610569d0, 0x61056a00, 0x61190000)
No shared spaces configured.

Dynamic libraries:
0x00400000 - 0x00424000 H:\Programme\Java\jdk1.6.0_18\bin\java.exe
0x7c910000 - 0x7c9c9000 H:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c908000 H:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e4a000 H:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee3000 H:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 H:\WINDOWS\system32\Secur32.dll
0x7c340000 - 0x7c396000 H:\Programme\Java\jdk1.6.0_18\jre\bin\msvcr71.dll
0x6d8b0000 - 0x6db47000 H:\Programme\Java\jdk1.6.0_18\jre\bin\client\jvm.dll
0x7e360000 - 0x7e3f1000 H:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000 H:\WINDOWS\system32\GDI32.dll
0x76af0000 - 0x76b1e000 H:\WINDOWS\system32\WINMM.dll
0x76330000 - 0x7634d000 H:\WINDOWS\system32\IMM32.DLL
0x6d860000 - 0x6d86c000 H:\Programme\Java\jdk1.6.0_18\jre\bin\verify.dll
0x6d3e0000 - 0x6d3ff000 H:\Programme\Java\jdk1.6.0_18\jre\bin\java.dll
0x6d340000 - 0x6d348000 H:\Programme\Java\jdk1.6.0_18\jre\bin\hpi.dll
0x76bb0000 - 0x76bbb000 H:\WINDOWS\system32\PSAPI.DLL
0x6d8a0000 - 0x6d8af000 H:\Programme\Java\jdk1.6.0_18\jre\bin\zip.dll
0x68000000 - 0x68036000 H:\WINDOWS\system32\rsaenh.dll
0x77be0000 - 0x77c38000 H:\WINDOWS\system32\msvcrt.dll
0x76620000 - 0x766d6000 H:\WINDOWS\system32\USERENV.dll
0x66e80000 - 0x66ed5000 H:\WINDOWS\system32\netapi32.dll
0x6d6c0000 - 0x6d6d3000 H:\Programme\Java\jdk1.6.0_18\jre\bin\net.dll
0x71a10000 - 0x71a27000 H:\WINDOWS\system32\WS2_32.dll
0x71a00000 - 0x71a08000 H:\WINDOWS\system32\WS2HELP.dll
0x719b0000 - 0x719f0000 H:\WINDOWS\System32\mswsock.dll
0x76ee0000 - 0x76f07000 H:\WINDOWS\system32\DNSAPI.dll
0x76d20000 - 0x76d39000 H:\WINDOWS\system32\iphlpapi.dll
0x76f70000 - 0x76f78000 H:\WINDOWS\System32\winrnr.dll
0x76f20000 - 0x76f4d000 H:\WINDOWS\system32\WLDAP32.dll
0x76f80000 - 0x76f86000 H:\WINDOWS\system32\rasadhlp.dll
0x66f70000 - 0x66f9b000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\JCudaDriver-windows-x865311847391007711519.dll
0x66fb0000 - 0x674ef000 H:\WINDOWS\system32\nvcuda.dll
0x67520000 - 0x67733000 H:\WINDOWS\system32\nvapi.dll
0x774b0000 - 0x775ee000 H:\WINDOWS\system32\ole32.dll
0x770f0000 - 0x7717b000 H:\WINDOWS\system32\OLEAUT32.dll
0x77f40000 - 0x77fb6000 H:\WINDOWS\system32\SHLWAPI.dll
0x7e670000 - 0x7ee91000 H:\WINDOWS\system32\SHELL32.dll
0x778f0000 - 0x779e4000 H:\WINDOWS\system32\SETUPAPI.dll
0x77bd0000 - 0x77bd8000 H:\WINDOWS\system32\VERSION.dll
0x773a0000 - 0x774a3000 H:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll
0x6d6e0000 - 0x6d6e9000 H:\Programme\Java\jdk1.6.0_18\jre\bin\nio.dll
0x67f50000 - 0x67f5a000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln335667427994843198\jln4822347258357380250\gluegen-rt.dll
0x6d0b0000 - 0x6d1fa000 H:\Programme\Java\jdk1.6.0_18\jre\bin\awt.dll
0x72f70000 - 0x72f96000 H:\WINDOWS\system32\WINSPOOL.DRV
0x67f80000 - 0x67fb8000 H:\WINDOWS\system32\uxtheme.dll
0x746a0000 - 0x746ec000 H:\WINDOWS\system32\MSCTF.dll
0x75250000 - 0x7527e000 H:\WINDOWS\system32\msctfime.ime
0x6d410000 - 0x6d416000 H:\Programme\Java\jdk1.6.0_18\jre\bin\jawt.dll
0x6a440000 - 0x6a44a000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln335667427994843198\jln4822347258357380250\nativewindow_awt.dll
0x6d2e0000 - 0x6d334000 H:\Programme\Java\jdk1.6.0_18\jre\bin\fontmanager.dll
0x68ee0000 - 0x69086000 H:\WINDOWS\system32\d3d9.dll
0x6de80000 - 0x6de86000 H:\WINDOWS\system32\d3d8thk.dll
0x6c100000 - 0x6c110000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln335667427994843198\jln4822347258357380250\nativewindow_win32.dll
0x692f0000 - 0x693bc000 H:\WINDOWS\system32\OpenGL32.dll
0x693c0000 - 0x693e0000 H:\WINDOWS\system32\GLU32.dll
0x736d0000 - 0x7371b000 H:\WINDOWS\system32\DDRAW.dll
0x73b30000 - 0x73b36000 H:\WINDOWS\system32\DCIMAN32.dll
0x693e0000 - 0x69453000 H:\Dokumente und Einstellungen\gbarbieri\Lokale Einstellungen\Temp\jogamp.tmp.cache_000000\jln335667427994843198\jln4822347258357380250\jogl_desktop.dll
0x69500000 - 0x6a34a000 H:\WINDOWS\system32\nvoglnt.dll

VM Arguments:
jvm_args: -Dfile.encoding=UTF-8 -Xmx1500m -XX:MaxDirectMemorySize=256m
java_command: CudaImplementation
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=H:\Programme\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin;H:\WINDOWS\system32;H:\WINDOWS;H:\WINDOWS\System32\Wbem;h:\Programme\Microsoft SQL Server\90\Tools\binn;H:\IFOR\WIN\BIN;H:\IFOR\WIN\BIN\EN_US;H:\Programme\Microsoft Visual Studio 10.0\VC\bin;H:\Programme\Microsoft Visual Studio 10.0\VC\bin
USERNAME=gbarbieri
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel

--------------- S Y S T E M ---------------

OS: Windows XP Build 2600 Service Pack 3

CPU:total 4 (4 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1

Memory: 4k page, physical 3144748k(831488k free), swap 5070780k(2614724k free)

vm_info: Java HotSpot™ Client VM (16.0-b13) for windows-x86 JRE (1.6.0_18-b07), built on Dec 17 2009 13:35:55 by “java_re” with MS VC++ 7.1 (VS2003)

time: Wed Dec 21 10:55:20 2011
elapsed time: 13 seconds

Where am I wrong?

Ok, i am trying to switch to VBOs and keeping it as simple as possible (1 triangle)


...init...

            // Create the the vertex data
            initVertexArray(gl);

            // generate buffer
            int[] bufferID = new int[1];
            gl.glGenBuffers(1, bufferID, 0);
            
            gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
            
            //  select buffer
            gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferID[0]);
            triangleNumber=1;
            
            //  copy data
            gl.glBufferData(GL2.GL_ARRAY_BUFFER, triangleNumber*3*3*4, 
                                                vertexData, GL2.GL_STATIC_DRAW);
            
            //  draw
            gl.glDrawArrays(GL.GL_TRIANGLES, 0, triangleNumber*3);

    private void initVertexArray(GL2 gl)    {
        triangleNumber = 1;
        vertexData = GLBuffers.newDirectFloatBuffer(triangleNumber*3*3);
        vertexData.put(new float[]{0,0,0,1,0,0,0,1,0});
        vertexData.flip();
    }

But it still crashes at the glDrawArrays in the init… why?