Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Open GL / 2 сообщений из 2, страница 1 из 1
20.04.2012, 09:10:40
    #37762296
ilya4171
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open GL
Доброе время суток. Помогите разобраться у меня есть окно в нем два кубика при нажатие на стрелочки должна поворачиваться камера. Но проект реагирует на кнопки только после нажатие на рабочую область. Как сделать фокус на canvas чтобы работа с разу реагировала на стрелки.
Вот код:
Код: java
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.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
package org.yourorghere;

import com.sun.opengl.util.Animator;
import com.sun.opengl.util.texture.Texture;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;



public class SimpleJOGL extends Frame implements GLEventListener, KeyListener {
float xView, zView,  aView;
   private Texture TextureSet[] = { null, null, null, null, null, null, null };
    public static void main(String[] args) {
        Frame frame = new Frame("Simple JOGL Application");
        GLCanvas canvas = new GLCanvas();

        canvas.addGLEventListener(new SimpleJOGL());
        frame.add(canvas);
        frame.setSize(640, 480);
        final Animator animator = new Animator(canvas);
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                new Thread(new Runnable() {

                    public void run() {
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
        frame.setLocationRelativeTo(null);
       frame.setVisible(true);
       
        animator.start();
    }

    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
           drawable.addKeyListener(this);
        GLU glu = new GLU();
        System.err.println("INIT GL IS: " + gl.getClass().getName());

        gl.glMatrixMode(GL.GL_PROJECTION);
	gl.glLoadIdentity();
        glu.gluPerspective(55, (double) -4 / 3, 1, 60);
        glu.gluLookAt(0,0,-4,0,0,0,0,4,0);
        gl.glMatrixMode(GL.GL_MODELVIEW);

        gl.setSwapInterval(1);
        gl.glClearColor(0, 0, 0, 0);
        gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
        gl.glEnable(GL.GL_LIGHTING);
        gl.glEnable(GL.GL_LIGHT0);
        gl.glLightiv(GL.GL_LIGHT0, GL.GL_POSITION, new int[] { -1, -1, -1, 0 }, 0);
        gl.glEnable(GL.GL_COLOR_MATERIAL);
        gl.glEnable(GL.GL_NORMALIZE);
        gl.glEnable(GL.GL_FOG);
	gl.glFogfv(GL.GL_FOG_COLOR, new float[] { 0, 0, 0, 0 }, 0);
	gl.glFogf(GL.GL_FOG_DENSITY, .1f);
        gl.glClearColor(0,0,0,0);



        TextureSet[0] = TextureLoader.Load("1.png");
	TextureSet[1] = TextureLoader.Load("2.png");
	TextureSet[2] = TextureLoader.Load("3.png");
	TextureSet[3] = TextureLoader.Load("4.png");
	TextureSet[4] = TextureLoader.Load("5.png");
	TextureSet[5] = TextureLoader.Load("6.png");
        TextureSet[6] = TextureLoader.Load("7.png");

    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        GLU glu = new GLU();

        if (height <= 0) { // avoid a divide by zero error!

            height = 1;
        }
        final float h = (float) width / (float) height;
    }

public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
       GLU glu = new GLU();
gl.glEnable(GL.GL_DEPTH_TEST);

       gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
       gl.glEnable(GL.GL_TEXTURE_2D);
       gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);



       aView=45;

       gl.glMatrixMode(GL.GL_PROJECTION);
       gl.glLoadIdentity();
       glu.gluPerspective(aView, (double) -4 / 3, 1, 60);
       glu.gluLookAt(xView, zView, -4, 0, 0, 0, 0, 4, 0);
       gl.glMatrixMode(GL.GL_MODELVIEW);



       gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[0].getTextureObject());
         long millis = System.currentTimeMillis();
	 int cycle = 3600;
	 double deg = millis % cycle * 360d / cycle;

       gl.glPushMatrix();
   
      gl.glTranslated(-.5, 0, 0);
      gl.glRotated (deg, 1, 1, 1);
       gl.glScaled(.3, .3, .3);

        gl.glBegin(GL.GL_QUADS);
		// Установка нормали
		gl.glNormal3d(0, 0, -.5);
		// Установка координат текстуры
		gl.glTexCoord2d(1, 1);
		// Установка координат вершины
		gl.glVertex3d(-.5, .5, -.5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, -.5);
		gl.glEnd();

                gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[1].getTextureObject());
                gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(.5, 0, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, .5, .5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, -.5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[5].getTextureObject());

                gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, 0, .5);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, .5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[4].getTextureObject());

                gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(-.5, 0, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, .5, -.5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[2].getTextureObject());

                gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, .5, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, .5, -.5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, .5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, .5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[3].getTextureObject());

                gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, -.5, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glEnd();
                gl.glPopMatrix();



		// Рисование второго кубика
		gl.glPushMatrix();
                gl.glTranslated(.5, 0, 0);
		gl.glRotated(deg, -1, -1, -1);
		gl.glScaled(.3, .3, .3);
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[0].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, 0, -.5);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, -.5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, -.5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[1].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(.5, 0, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, .5, .5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, -.5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[5].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, 0, .5);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, .5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[4].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(-.5, 0, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, .5, -.5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[2].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, .5, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, .5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(-.5, .5, -.5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, .5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(.5, .5, .5);
		gl.glEnd();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[3].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, -.5, 0);
		gl.glTexCoord2d(1, 1);
		gl.glVertex3d(-.5, -.5, .5);
		gl.glTexCoord2d(1, 0);
		gl.glVertex3d(.5, -.5, .5);
		gl.glTexCoord2d(0, 0);
		gl.glVertex3d(.5, -.5, -.5);
		gl.glTexCoord2d(0, 1);
		gl.glVertex3d(-.5, -.5, -.5);
		gl.glEnd();
		gl.glPopMatrix();

                gl.glPushMatrix();
		gl.glBindTexture(GL.GL_TEXTURE_2D, TextureSet[6].getTextureObject());
		gl.glBegin(GL.GL_QUADS);
		gl.glNormal3d(0, -5, 0);
		gl.glTexCoord2d(5, 5);
		gl.glVertex3d(-50, -5, 50);
		gl.glTexCoord2d(5, -5);
		gl.glVertex3d(-50, -5, -50);
		gl.glTexCoord2d(-5, -5);
		gl.glVertex3d(50, -5, -50);
		gl.glTexCoord2d(-5, 5);
		gl.glVertex3d(50, -5, 50);
		gl.glEnd();
		gl.glPopMatrix();
		// Окончание рисования (освобождения памяти)

		gl.glFlush();
	        gl.glDisable(GL.GL_TEXTURE_2D);

    }

    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
    }
public void keyPressed (KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP)
	zView += 1;
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
	zView -= 1;
else if (e.getKeyCode() == KeyEvent.VK_LEFT)
        xView -= 1;
else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
	xView += 1;
else if (e.getKeyCode() == KeyEvent.VK_PAGE_UP)
        aView += .05;
else if (e.getKeyCode() == KeyEvent.VK_PAGE_DOWN);
	aView -= .05;}

   

    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

   
}
...
Рейтинг: 0 / 0
20.04.2012, 15:06:47
    #37763192
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Open GL
ilya4171,

Отсутствие события или фокус не имеют отношения gl. Уберите его и оттрассируйте изменение переменной zVIEW
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Open GL / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]