import java.awt.event.*; import javax.swing.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import com.sun.opengl.util.*; /* * Created on 29/07/2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ /** * Alpha3D.java * This program demonstrates how to intermix opaque and alpha blended polygons * in the same scene, by using glDepthMask. Pressing the left mouse button * toggles the eye position. * * @ported to java by Wu Shin-Ting * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Alpha3D// extends JFrame// implements GLEventListener// , KeyListener// , MouseListener // { private GLU glu; private GLUT glut; private boolean eyePosition = false; // public Alpha3D() { } public static void main(String[] args) { GLCapabilities caps = new GLCapabilities(); caps.setSampleBuffers(true);// enable sample buffers for aliasing caps.setNumSamples(caps.getNumSamples() * 2); GLJPanel canvas = new GLJPanel(caps); Alpha3D demo = new Alpha3D(); canvas.addGLEventListener(demo); if (demo instanceof KeyListener) canvas.addKeyListener(demo); if (demo instanceof MouseListener) canvas.addMouseListener(demo); // JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Alpha3D"); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(canvas); frame.setVisible(true); canvas.requestFocusInWindow(); } public void init(GLAutoDrawable drawable) { GL gl = drawable.getGL(); glu = new GLU(); glut = new GLUT(); // float mat_ambient[] = { 0.0f, 0.0f, 0.0f, 0.15f }; float mat_specular[] = { 1.0f, 1.0f, 1.0f, 0.15f }; float mat_shininess[] = { 15.0f }; gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient, 0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, mat_specular, 0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, mat_shininess, 0); gl.glEnable(GL.GL_LIGHTING); gl.glEnable(GL.GL_LIGHT0); gl.glDepthFunc(GL.GL_LESS); gl.glEnable(GL.GL_DEPTH_TEST); } public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); // float position[] = { 0.0f, 0.0f, 1.0f, 1.0f }; float mat_torus[] = { 0.75f, 0.75f, 0.0f, 1.0f }; float mat_cylinder[] = { 0.0f, 0.75f, 0.75f, 0.15f }; gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position, 0); gl.glPushMatrix(); if (eyePosition) glu.gluLookAt(0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); else glu.gluLookAt(0.0, 0.0, -9.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); gl.glPushMatrix(); gl.glTranslatef(0.0f, 0.0f, 1.0f); gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, mat_torus, 0); glut.glutSolidTorus(0.275, 0.85, 10, 10); gl.glPopMatrix(); gl.glEnable(GL.GL_BLEND); gl.glDepthMask(false); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE); gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, mat_cylinder, 0); gl.glTranslatef(0.0f, 0.0f, -1.0f); glut.glutSolidCube(2.0f);// (1.0, 2.0); gl.glDepthMask(true); gl.glDisable(GL.GL_BLEND); gl.glPopMatrix(); gl.glFlush(); } public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { GL gl = drawable.getGL(); // gl.glViewport(0, 0, w, h); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(30.0, (float) w / (float) h, 1.0, 20.0); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } 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 mouseClicked(MouseEvent mouse) { } public void mousePressed(MouseEvent mouse) { if (mouse.getButton() == MouseEvent.BUTTON1) // eyePosition = !eyePosition; ((GLCanvas)(this.getContentPane().getComponentAt(0,0))).display(); } public void mouseReleased(MouseEvent mouse) { } public void mouseEntered(MouseEvent mouse) { } public void mouseExited(MouseEvent mouse) { } } /* * For the software in this directory * (c) Copyright 1993, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */