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.");
}
}