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
|
package glredbook10;
import com.jogamp.opengl.util.gl2.GLUT;
import java.awt.event.*;
import javax.swing.*;
import javax.media.opengl.*; import javax.media.opengl.awt.GLJPanel;
/**
* This program renders three lighted, shaded teapots, with different ambient
* values.
*
* @author Kiet Le (Java port) Ported to JOGL 2.x by Claudio Eduardo Goes
*/
public class teaambient //
extends GLSkeleton<GLJPanel>
implements GLEventListener, KeyListener {
private GLUT glut;
@Override
protected GLJPanel createDrawable() {
GLCapabilities caps = new GLCapabilities(null);
//
GLJPanel panel = new GLJPanel(caps);
panel.addGLEventListener(this);
panel.addKeyListener(this);
return panel;
}
public static void main(String[] args) {
teaambient demo = new teaambient();
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("teaambient");
frame.setSize(512, 512);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(demo.drawable);
frame.setVisible(true);
demo.drawable.requestFocusInWindow();
}
/*
* Initialize light source and lighting model.
*/
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
glut = new GLUT();
//
float light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
float light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
/* light_position is NOT default value */
float light_position[] = { 1.0f, 0.0f, 0.0f, 0.0f };
float global_ambient[] = { 0.75f, 0.75f, 0.75f, 1.0f };
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, light_ambient, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, light_diffuse, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, light_specular, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, light_position, 0);
gl.glLightModelfv(GL2.GL_LIGHT_MODEL_AMBIENT, global_ambient, 0);
gl.glFrontFace(GL.GL_CW);
gl.glEnable(GL2.GL_LIGHTING);
gl.glEnable(GL2.GL_LIGHT0);
gl.glEnable(GL2.GL_AUTO_NORMAL);
gl.glEnable(GL2.GL_NORMALIZE);
gl.glDepthFunc(GL.GL_LESS);
gl.glEnable(GL.GL_DEPTH_TEST);
}
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
//
float low_ambient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
float more_ambient[] = { 0.4f, 0.4f, 0.4f, 1.0f };
float most_ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f };
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
/* material has small ambient reflection */
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, low_ambient, 0);
gl.glMaterialf(GL.GL_FRONT, GL2.GL_SHININESS, 40.0f);
gl.glPushMatrix();
gl.glTranslatef(0.0f, 2.0f, 0.0f);
glut.glutSolidTeapot(1.0);
gl.glPopMatrix();
/* material has moderate ambient reflection */
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, more_ambient, 0);
gl.glPushMatrix();
gl.glTranslatef(0.0f, 0.0f, 0.0f);
glut.glutSolidTeapot(1.0);
gl.glPopMatrix();
/* material has large ambient reflection */
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, most_ambient, 0);
gl.glPushMatrix();
gl.glTranslatef(0.0f, -2.0f, 0.0f);
glut.glutSolidTeapot(1.0);
gl.glPopMatrix();
gl.glFlush();
}
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
GL2 gl = drawable.getGL().getGL2();
//
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
if (w <= h)
gl.glOrtho(-4.0, 4.0, -4.0 * (float) h / (float) w, 4.0 * (float) h
/ (float) w, -10.0, 10.0);
else
gl.glOrtho(-4.0 * (float) w / (float) h, 4.0 * (float) w
/ (float) h, -4.0, 4.0, -10.0, 10.0);
gl.glMatrixMode(GL2.GL_MODELVIEW);
}
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged,
boolean deviceChanged) {
}
public void keyTyped(KeyEvent key) {
}
public void keyPressed(KeyEvent key) {
switch (key.getKeyCode()) {
case KeyEvent.VK_ESCAPE:
System.exit(0);
break;
default:
break;
}
}
public void keyReleased(KeyEvent key) {
}
public void dispose(GLAutoDrawable arg0) {
}
}
|