powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Open GL
2 сообщений из 2, страница 1 из 1
Open GL
    #37762296
ilya4171
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток. Помогите разобраться у меня есть окно в нем два кубика при нажатие на стрелочки должна поворачиваться камера. Но проект реагирует на кнопки только после нажатие на рабочую область. Как сделать фокус на 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
Open GL
    #37763192
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilya4171,

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


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