Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (404)
games submitted by our members
Games in WIP (289)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Projection problems  (Read 1059 times)
0 Members and 1 Guest are viewing this topic.
Offline Orangy Tang

JGO Kernel


Medals: 48
Projects: 11


Monkey for a head


« Posted 2002-11-30 14:18:19 »

I'm at something of a loss here, and i'm not sure whether my problem is Gl or native buffer related, but hopefully someone here can give some hints..

I'm attempting to get screen x/y coords from a x/y/z position in world space. Now while the theory behind doing this manually is pretty simple, I thought it would be easier to use the glu.project routine for ease. Unfortunatly this works once, and only once on the first usage, and then clams up on me Sad the method returns GL.FALSE to indicate faliure, yet gl.getError returns GL.NO_ERROR  Huh

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
// Member vars, created in constructor
     private IntBuffer viewport;
      private DoubleBuffer modelViewMatrix;
      private DoubleBuffer projectionMatrix;
      private DoubleBuffer windowCoords;
     
      private DoubleBuffer windowX;
      private DoubleBuffer windowY;
      private DoubleBuffer windowZ;
      private int pWindowX;
      private int pWindowY;
      private int pWindowZ;
     
      private int pViewport;
      private int pModelViewMatrix;
      private int pProjectionMatrix;
      private int pWindowCoords;

// From the mouse classes update():
                 viewport.clear();
                  modelViewMatrix.clear();
                  projectionMatrix.clear();
                  windowCoords.clear();
                 
                  windowX.clear();
                  windowY.clear();
                  windowZ.clear();
                 
                 
                  gl.getIntegerv(GL.VIEWPORT, pViewport);
                  gl.getDoublev(GL.MODELVIEW_MATRIX, pModelViewMatrix);
                  gl.getDoublev(GL.PROJECTION_MATRIX, pProjectionMatrix);
                 
                 
                  // Projection/scrolling test code
                 int returnCode = GL.TRUE;
                      returnCode = glu.project(/*position.x, position.y, position.z,*/
                                                           0, 0, 0,
                                                             pModelViewMatrix,
                                                             pProjectionMatrix,
                                                             pViewport,
                                                      //       pWindowCoords, pWindowCoords+8, pWindowCoords+16);
                                                            pWindowX, pWindowY, pWindowZ);
                 
                  if (returnCode == GL.TRUE)
                  {
                        /*
                        double x = windowCoords.get(0);
                        double y = windowCoords.get(1);
                        double z = windowCoords.get(2);
                        */

                       
                        double x = windowX.get(0);
                        double y = windowY.get(0);
                        double z = windowZ.get(0);
                       
                       
                        System.out.println("Project, x:"+x +" y:"+y +" z:"+z);
                       
                       
                  }
                  else
                  {
                  //      System.out.println("return code: "+returnCode);
                       
                        int error = gl.getError();
                       
                  //      System.out.println("Error code:"+error);
                       
                       
                       
                        if (error == GL.NO_ERROR)
                        {
                  //            System.out.println("no error");
                       }
                        else if (error == GL.INVALID_ENUM)
                        {
                              System.out.println("invalid enum");
                        }
                        else if (error == GL.INVALID_VALUE)
                        {
                              System.out.println("invalid value");
                        }
                        else if (error == GL.INVALID_OPERATION)
                        {
                              System.out.println("invalid operation");
                        }
                       
                        else if (error == GLU.INVALID_ENUM)
                        {
                              System.out.println("glu invalid enum");
                        }
                        else if (error == GLU.INVALID_VALUE)
                        {
                              System.out.println("glu invalid value");
                        }
                       
                        else
                        {
                              System.out.println("not recognised");
                        }


I assume that theres something somewhere that I have to reset before using gl.project for the second time, since everything seems to go ok for the first attempt. Yet I can't think of anything else i'm missing...

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Offline Orangy Tang

JGO Kernel


Medals: 48
Projects: 11


Monkey for a head


« Reply #1 - Posted 2002-11-30 21:38:42 »

Ooops, my bad - I was calling this method in my update() but it needs to be called during render() for the Gl matricies to be set up correctly. Unfortunatly this ties my update code and my drawing code together in a way I was hoping to avoid. Time to insert some sort of interface layer between the two methinks..

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Try the Free Demo of Revenge of the Titans

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (34 views)
2013-05-17 21:29:12

alaslipknot (42 views)
2013-05-16 21:24:48

gouessej (72 views)
2013-05-16 00:53:38

gouessej (71 views)
2013-05-16 00:17:58

theagentd (79 views)
2013-05-15 15:01:13

theagentd (74 views)
2013-05-15 15:00:54

StreetDoggy (116 views)
2013-05-14 15:56:26

kutucuk (139 views)
2013-05-12 17:10:36

kutucuk (140 views)
2013-05-12 15:36:09

UnluckyDevil (148 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.255 seconds with 21 queries.