Ciao a tutti. Sto creando un'interfaccia grafica per il mio progetto e per rendere il tutto più carino ho deciso di creare una lampada che illumini la simulazione.
Questa é la classe:
codice:
#ifndef LAMPADA_H
#define LAMPADA_H
#include "wxincludes.h"
#include "Typedef.h"
#include "Vettore.h"
class Lampada
{
public:
// --- COSTRUTTORI ---
Lampada(const Vettore& = {0,-5,2}, const Vettore& = {0,5,-2}, double = 90);
Lampada(const vector&, const vector&, double = 90);
Lampada(const list&, const list&, double = 90);
// --- METODI ---
void illumina() const;
private:
// --- ATTRIBUTI ---
Vettore posizione;
Vettore direzione;
double ampiezza;
};
#endif
codice:
#include "Lampada.h"
// *** PRIVATE ***
// --- COSTRUTTORI ---
Lampada::Lampada(const Vettore& p, const Vettore& d, double a)
: posizione(p), direzione(d), ampiezza(a)
{}
Lampada::Lampada(const vector& p, const vector& d, double a)
: posizione(p), direzione(d), ampiezza(a)
{}
Lampada::Lampada(const list& p, const list& d, double a)
: posizione(p), direzione(d), ampiezza(a)
{}
// --- METODI ---
void Lampada::illumina() const
{
GLfloat light_ambient[]= {0.1, 0.1, 0.1, 0.1};
GLfloat light_diffuse[]= {1.0, 1.0, 1.0, 0.0};
GLfloat light_specular[]= {1.0, 1.0, 1.0, 0.0};
GLfloat light_position[]= {posizione[0], posizione[1], posizione[2], 1.0};
glLightfv (GL_LIGHT1, GL_AMBIENT, light_ambient);
glLightfv (GL_LIGHT1, GL_DIFFUSE, light_diffuse);
glLightfv (GL_LIGHT1, GL_SPECULAR, light_specular);
glLightfv (GL_LIGHT1, GL_POSITION, light_position);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, ampiezza);
GLfloat spot_direction[] = {direzione[0], direzione[1], direzione[2]};
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
glEnable (GL_LIGHT1);
glEnable (GL_LIGHTING);
}
Il problema é che, pur avendo colorato una palla di rosso, quest'ultima appari si correttamente illuminata, ma in scala di grigi...
In più anche gli assi cartesiani che avevo disegnato al centro dell'immagine appaiono grigi e non più colorati, risultando così praticamente invisibili sullo sfondo nero.
Qualcuno sa come migliorare la lampada e far si che gli oggetti si colorino correttamente? Grazie.
Ps: L'interfaccia grafica é costituita dalle seguenti classi: GUI, Finestra e Vista. GUI (wxApp) implementa semplicemente l'applicazione. Finestra si occupa della gestione della finestra (wxFrame), mentre la classe vista si occupa della simulazione vera e propria (timing e disegno). Questa classe contiene una classe Camera e appunto la classe Lampada.
Grazie,
R.