| /******************************************************************************* |
| * Copyright (c) 2000, 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.swt.opengl.examples; |
| |
| |
| import org.eclipse.opengl.*; |
| import org.eclipse.swt.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| |
| class GradientTab extends OpenGLTab { |
| private float xPos = 0.0f, yPos = 0.0f, zPos = -7.0f; |
| private float xRot = 180.0f, yRot = 180.0f, zRot = 180.0f; |
| private int currentSelection = 1; |
| private final static float[] BEZIER_COLORS = { |
| 0.0f, 1.0f, 0.0f, 0.0f, 0.3f, 0.6f, 0.1f, 0.0f, |
| 0.8f, 0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, |
| 0.0f, 0.0f, 1.0f, 0.0f, 0.8f, 0.8f, 0.8f, 0.0f |
| }; |
| private final static float[] BEZIER_POINTS = { |
| -1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f, |
| -1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f, |
| -0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f, |
| -1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f, |
| 3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f, |
| 1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f, |
| }; |
| private final static String[] OBJECT_NAMES = { "Bezier", "Square" }; |
| |
| /** |
| * @see OpenGLTab#createControls(Composite) |
| */ |
| void createControls(Composite composite) { |
| Group movementGroup = new Group(composite, SWT.NONE); |
| movementGroup.setText("Translation"); |
| movementGroup.setLayout(new GridLayout(2, false)); |
| |
| new Label(movementGroup, SWT.NONE).setText("X:"); |
| final Slider xMove = new Slider(movementGroup, SWT.NONE); |
| xMove.setIncrement(1); |
| xMove.setMaximum(12); |
| xMove.setMinimum(0); |
| xMove.setThumb(2); |
| xMove.setPageIncrement(2); |
| xMove.setSelection(5); |
| xMove.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| xPos = xMove.getSelection() - 5; |
| } |
| }); |
| |
| new Label(movementGroup, SWT.NONE).setText("Y:"); |
| final Slider yMove = new Slider(movementGroup, SWT.NONE); |
| yMove.setIncrement(1); |
| yMove.setMaximum(12); |
| yMove.setMinimum(0); |
| yMove.setThumb(2); |
| yMove.setPageIncrement(2); |
| yMove.setSelection(5); |
| yMove.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| yPos = yMove.getSelection() - 5; |
| } |
| }); |
| |
| new Label(movementGroup, SWT.NONE).setText("Z:"); |
| final Slider zMove = new Slider(movementGroup, SWT.NONE); |
| zMove.setIncrement(1); |
| zMove.setMaximum(12); |
| zMove.setMinimum(0); |
| zMove.setThumb(2); |
| zMove.setPageIncrement(2); |
| zMove.setSelection(5); |
| zMove.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| zPos = zMove.getSelection() - 12; |
| } |
| }); |
| |
| Group rotationGroup = new Group(composite, SWT.NONE); |
| rotationGroup.setText("Rotation"); |
| rotationGroup.setLayout(new GridLayout(2, false)); |
| |
| new Label(rotationGroup, SWT.NONE).setText("X:"); |
| final Slider xRotation = new Slider(rotationGroup, SWT.NONE); |
| xRotation.setIncrement(10); |
| xRotation.setMaximum(362); |
| xRotation.setMinimum(0); |
| xRotation.setThumb(2); |
| xRotation.setPageIncrement(20); |
| xRotation.setSelection(180); |
| xRotation.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| xRot = xRotation.getSelection(); |
| } |
| }); |
| |
| new Label(rotationGroup, SWT.NONE).setText("Y:"); |
| final Slider yRotation = new Slider(rotationGroup, SWT.NONE); |
| yRotation.setIncrement(10); |
| yRotation.setMaximum(362); |
| yRotation.setMinimum(0); |
| yRotation.setThumb(2); |
| yRotation.setPageIncrement(20); |
| yRotation.setSelection(180); |
| yRotation.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| yRot = yRotation.getSelection(); |
| } |
| }); |
| |
| new Label(rotationGroup, SWT.NONE).setText("Z:"); |
| final Slider zRotation = new Slider(rotationGroup, SWT.NONE); |
| zRotation.setIncrement(10); |
| zRotation.setMaximum(362); |
| zRotation.setMinimum(0); |
| zRotation.setThumb(2); |
| zRotation.setPageIncrement(20); |
| zRotation.setSelection(180); |
| zRotation.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| zRot = zRotation.getSelection(); |
| } |
| }); |
| |
| Composite objectGroup = new Composite(composite,SWT.NONE); |
| GridLayout layout = new GridLayout(2,false); |
| layout.marginHeight = 0; |
| layout.marginWidth = 0; |
| objectGroup.setLayout(layout); |
| objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); |
| |
| new Label(objectGroup, SWT.NONE).setText("Object:"); |
| final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY); |
| GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| data.grabExcessHorizontalSpace = true; |
| objectCombo.setLayoutData(data); |
| objectCombo.setItems(OBJECT_NAMES); |
| objectCombo.select(0); |
| objectCombo.addListener(SWT.Selection, new Listener() { |
| public void handleEvent(Event e) { |
| currentSelection = objectCombo.getSelectionIndex() + 1; |
| } |
| }); |
| } |
| |
| /** |
| * @see OpenGLTab#dispose() |
| */ |
| void dispose() { |
| super.dispose(); |
| GL.glDeleteLists(1, 2); |
| } |
| |
| /** |
| * @see OpenGLTab#getTabText() |
| */ |
| String getTabText() { |
| return "Gradients"; |
| } |
| |
| /** |
| * @see OpenGLTab#init() |
| */ |
| void init() { |
| GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); |
| GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST); |
| GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); |
| GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); |
| GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS); |
| GL.glMap2f(GL.GL_MAP2_COLOR_4, 0, 1, 4, 1, 0, 1, 4, 6, BEZIER_COLORS); |
| GL.glMapGrid2f(20, 0.0f, 1.0f, 20, 0.0f, 1.0f); |
| GL.glShadeModel(GL.GL_SMOOTH); |
| GL.glEnable(GL.GL_LINE_SMOOTH); |
| GL.glEnable(GL.GL_LINE_STIPPLE); |
| GL.glEnable(GL.GL_BLEND); |
| GL.glEnable(GL.GL_MAP2_COLOR_4); |
| GL.glEnable(GL.GL_MAP2_VERTEX_3); |
| GL.glEnable(GL.GL_DEPTH_TEST); |
| |
| // create display lists |
| GL.glNewList(1, GL.GL_COMPILE); |
| GL.glEvalMesh2(GL.GL_FILL, 0, 20, 0, 20); |
| GL.glEndList(); |
| GL.glNewList(2, GL.GL_COMPILE); |
| GL.glBegin(GL.GL_TRIANGLE_FAN); |
| GL.glColor3f(0.0f, 1.0f, 0.0f); |
| GL.glVertex3f(0.0f, 0.0f, 0.0f); |
| GL.glColor3f(1.0f, 0.0f, 0.0f); |
| GL.glVertex3f(0.0f, 2.0f, 0.0f); |
| GL.glColor3f(0.0f, 1.0f, 0.0f); |
| GL.glVertex3f(-2.0f, 2.0f, 0.0f); |
| GL.glColor3f(0.0f, 0.0f, 1.0f); |
| GL.glVertex3f(-2.0f, 0.0f, 0.0f); |
| GL.glColor3f(0.0f, 1.0f, 0.0f); |
| GL.glVertex3f(-2.0f, -2.0f, 0.0f); |
| GL.glColor3f(1.0f, 0.0f, 0.0f); |
| GL.glVertex3f(0.0f, -2.0f, 0.0f); |
| GL.glColor3f(0.0f, 1.0f, 0.0f); |
| GL.glVertex3f(2.0f, -2.0f, 0.0f); |
| GL.glColor3f(0.0f, 0.0f, 1.0f); |
| GL.glVertex3f(2.0f, 0.0f, 0.0f); |
| GL.glColor3f(0.0f, 1.0f, 0.0f); |
| GL.glVertex3f(2.0f, 2.0f, 0.0f); |
| GL.glColor3f(1.0f, 0.0f, 0.0f); |
| GL.glVertex3f(0.0f, 2.0f, 0.0f); |
| GL.glEnd(); |
| GL.glEndList(); |
| } |
| |
| /** |
| * @see OpenGLTab#renderScene() |
| */ |
| void renderScene() { |
| GL.glClear(GL.GL_COLOR_BUFFER_BIT); |
| GL.glLoadIdentity(); |
| GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); |
| GL.glTranslatef(xPos, yPos, zPos); |
| GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); |
| GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f); |
| GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f); |
| GL.glColor3f(1.0f, 0.0f, 0.0f); |
| GL.glCallList(currentSelection); |
| } |
| } |