Compito per 4ª E – Rappresentare il cristallo NaCl

CristalloNaCl

Gli ioni Na+ e Cl- devono trovarsi in corrispondenza delle coordinate intere che vanno da -4 a +4 per tutti e tre gli assi cartesiani ed essere alternati fra loro sia sul piano che tra uno strato e l’altro. Calcolare correttamente i raggi rNa ed rCl in modo che gli ioni Na+ e Cl- siano tangenti fra loro. Sfruttare il modello di programma della molecola d’acqua.

CristalloNaCl

Inserire un’animazione mediante una rotazione intorno ad un asse obliquo.

Compito OpenGL per la 4E

Scacchiera

    GLWindow window;
    FPSAnimator animator;
    GLRenderer renderer;

    public Main() {
        initComponents();

        window = GLWindow.create(new GLCapabilities(GLProfile.getDefault()));
        window.setTitle("OpenGL prova - GLWindow");
        window.setSize(800, 600);
        renderer = new GLRenderer();
        window.addGLEventListener(renderer);
        animator = new FPSAnimator(window, 60, true);
    }

    private void btnHideActionPerformed(java.awt.event.ActionEvent evt) {                                        
        window.setVisible(false);
    }                                       

    private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {                                        
        window.setVisible(true);
    }                                       

    private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {                                         
        animator.start();
    }                                        

    private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {                                        
        animator.stop();
    }                                       

    private void btnFullscreenActionPerformed(java.awt.event.ActionEvent evt) {                                              
        window.setFullscreen(btnFullscreen.isSelected());
    }

    double a = 0.0;

    @Override
    public void display(GLAutoDrawable drawable) {
        GL2 gl = drawable.getGL().getGL2();

        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);

        gl.glBegin(GL2.GL_QUADS);
        gl.glColor3f(1, 1, 1);
        for (int i = -4; i < 4; i++) {
            for (int j = -4; j < 4; j++) {
                if ((i + j) % 2 != 0) {
                    gl.glVertex2d(i / 4.0, j / 4.0);
                    gl.glVertex2d(i / 4.0 + 0.25, j / 4.0);
                    gl.glVertex2d(i / 4.0 + 0.25, j / 4.0 + 0.25);
                    gl.glVertex2d(i / 4.0, j / 4.0 + 0.25);
                }
            }
        }
        gl.glEnd();

        // inserire un rombo rosso che si sposta da sinistra a destra

        a += 0.01;
    }

Grafica 3D: implementazione dell’interfaccia per il rendering

OpenGLProva

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

public class GLRenderer implements GLEventListener {

    @Override
    public void init(GLAutoDrawable drawable) { }

    @Override
    public void dispose(GLAutoDrawable drawable) { }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL2 gl = drawable.getGL().getGL2();

        gl.glClear(GL.GL_COLOR_BUFFER_BIT);   // cancella la finestra

        gl.glBegin(GL.GL_TRIANGLES);
        gl.glColor3f(1, 0, 0);   // il 1° vertice è rosso
        gl.glVertex2d(-1, 0);
        gl.glColor3f(0, 1, 0);   // il 2° vertice è verde
        gl.glVertex2d(1, 0);
        gl.glColor3f(0, 0, 1);   // il 3° vertice è blu
        gl.glVertex2d(0, 1);
        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }

}