Java OpenGL MouseListener для смены цвета полигона

293
02 апреля 2017, 02:43

Реализовываю прямоугольный полигон на OpenGL. Никак не могу сделать смену цвета этого полигона по клику мыши. Сам Mouselistener сделал, а как задать смену цвета не врубаюсь. Помогите пожалуйста!

 import com.jogamp.newt.event.MouseEvent;
import com.jogamp.newt.event.MouseListener;
import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.awt.GLJPanel;
import com.jogamp.opengl.glu.GLU;
import com.jogamp.opengl.util.FPSAnimator;
import com.jogamp.opengl.util.gl2.GLUT;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import static javax.swing.text.html.HTML.Tag.SELECT;
public class Cube implements GLEventListener {
    public static DisplayMode dm, dm_old;
    private GLU glu = new GLU();
    private float rquad = 0.0f;
    @Override
    public void display( GLAutoDrawable drawable ) {
        final GL2 gl = drawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
        gl.glLoadIdentity();
        gl.glTranslatef( 0f, 0f, -5.0f );
        gl.glEnable(GL2.GL_LIGHTING);
        gl.glEnable(GL2.GL_LIGHT5);
        gl.glEnable(GL2.GL_COLOR_MATERIAL);
// Rotate The Cube On X, Y & Z 
//gl.glRotatef(rquad, 1.0f, 1.0f, 1.0f); 
//giving different colors to different sides 
        gl.glBegin(GL2.GL_QUADS); // Start Drawing
        gl.glColor3f(0.5f, 0.5f, 1.0f);
        gl.glTexCoord2f(3f, 0f); gl.glVertex2f(-2.0f, 1.0f); // Top Left
        gl.glColor3f(1.0f, 1.0f, 1.0f);
        gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex2f(2.0f, 1.0f); // Top Right
        gl.glColor3f(0.5f, 0.5f, 1.0f);
        gl.glTexCoord2f(0.0f, 2.0f); gl.glVertex2f(2.0f, -1.0f); // Bottom Right
        gl.glColor3f(1.0f, 1.0f, 1.0f);
        gl.glTexCoord2f(3f, 2.0f); gl.glVertex2f(-2.0f, -1.0f); // Bottom Left
        gl.glEnd(); // Done Drawing The Quad
        gl.glFlush();
        rquad -= 0.15f;

    }
    @Override
    public void dispose( GLAutoDrawable drawable ) {
// TODO Auto-generated method stub 
    }
    @Override
    public void init( GLAutoDrawable drawable ) {
        final GL2 gl = drawable.getGL().getGL2();
        gl.glShadeModel( GL2.GL_SMOOTH );
        gl.glClearColor( 0f, 0f, 0f, 0f );
        gl.glClearDepth( 1.0f );
        gl.glEnable( GL2.GL_DEPTH_TEST );
        gl.glDepthFunc( GL2.GL_LEQUAL );
        gl.glHint( GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST );
    }
    @Override
    public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) {
// TODO Auto-generated method stub 
        final GL2 gl = drawable.getGL().getGL2();
//if( height lt;=0 ) 
//height = 1; 
        final float h = ( float ) width / ( float ) height;
        gl.glViewport( 0, 0, width, height );
        gl.glMatrixMode( GL2.GL_PROJECTION );
        gl.glLoadIdentity();
        glu.gluPerspective( 45.0f, h, 1.0, 20.0 );
        gl.glMatrixMode( GL2.GL_MODELVIEW );
        gl.glLoadIdentity();

        }

    public static void main( String[] args ) {
        final GLProfile profile = GLProfile.get( GLProfile.GL2 );
        GLCapabilities capabilities = new GLCapabilities( profile );
// The canvas 
        final GLCanvas glcanvas = new GLCanvas( capabilities );
        Cube cube = new Cube();
        glcanvas.addGLEventListener( cube );
        glcanvas.setSize( 400, 400 );

        final JFrame frame = new JFrame ( " Multicolored cube" );
        frame.getContentPane().add( glcanvas );
        frame.setSize( frame.getContentPane().getPreferredSize() );
        frame.setVisible( true );
        final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true);
        animator.start();
        frame.addMouseListener(new java.awt.event.MouseListener() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent e) {
                glcanvas.addGLEventListener( cube );
                frame.getContentPane().add(glcanvas);
            }
            @Override
            public void mousePressed(java.awt.event.MouseEvent e) {
            }
            @Override
            public void mouseReleased(java.awt.event.MouseEvent e) {
            }
            @Override
            public void mouseEntered(java.awt.event.MouseEvent e) {
            }
            @Override
            public void mouseExited(java.awt.event.MouseEvent e) {
            }

        });
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
READ ALSO
Создание backend

Создание backend

Здравствуйте

249
Как создать custom seekbar?

Как создать custom seekbar?

Здравствуйте, интересует вопрос, как создать custom seekbar, перерыл много информации, но не нашел то, что нужно

277
Помогите с задачей! Точнее подскажите с чего начать!

Помогите с задачей! Точнее подскажите с чего начать!

Есть задача, в которой сказано, что нужно написать программу, которая находит в заданном телефонном номере подстроку максимальной длины,...

243
Поиск с учетом нескольких условий

Поиск с учетом нескольких условий

Есть текстовые поля для номера, сотрудника, субъекта, улицы, дома, некоторые из них могут быть пустые, тогда надо искать по тем которые заполненыЕсть...

243