Реализовываю прямоугольный полигон на 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);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, интересует вопрос, как создать custom seekbar, перерыл много информации, но не нашел то, что нужно
Есть задача, в которой сказано, что нужно написать программу, которая находит в заданном телефонном номере подстроку максимальной длины,...
Есть текстовые поля для номера, сотрудника, субъекта, улицы, дома, некоторые из них могут быть пустые, тогда надо искать по тем которые заполненыЕсть...