Ciao a tutti,
qualcuno di voi sa come si fa a gestire la trasparenza di un'oggetto in C, con la libreria Opengl?
Visualizzo un'oggetto nella finestra e vorrei variarne la trasparenza attraverso uno spinner.
grazie mille.
Ciao a tutti,
qualcuno di voi sa come si fa a gestire la trasparenza di un'oggetto in C, con la libreria Opengl?
Visualizzo un'oggetto nella finestra e vorrei variarne la trasparenza attraverso uno spinner.
grazie mille.
SetLayeredWindowAttributes
DYNAMIC+ [ E-mail ]
Secondo me non si può fare!
scusa, potresti spiegarti meglio?
Questa funzione fa parte delle API Win32 ed è disponibile solo su sistemi Windows 2000 o superiore. Serve per impostare la trasparenza/opacità di una finestra e non centra niente con le OpenGL!!!Originariamente inviato da DYNAM!C+
SetLayeredWindowAttributes
Penso che syddharta intendesse chiedere come rendere trasparente un oggetto OpenGL, cioè un triangolo o una forma creata con OpenGL ... insomma (non conosco OpenGL)
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
pensavo oggetto, nel senso di "oggetto" textbox ecc...Originariamente inviato da andbin
Questa funzione fa parte delle API Win32 ed è disponibile solo su sistemi Windows 2000 o superiore. Serve per impostare la trasparenza/opacità di una finestra e non centra niente con le OpenGL!!!
Penso che syddharta intendesse chiedere come rendere trasparente un oggetto OpenGL, cioè un triangolo o una forma creata con OpenGL ... insomma (non conosco OpenGL)
quindi se ho ben capito la semitrasparenza di un poligono?
DYNAMIC+ [ E-mail ]
Secondo me non si può fare!
Abiliti il blending con
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
Gestisci la trasparenza (t da 0.0 a 1.0)
glColor4f(0.0, 0.0, 1.0, t);
Non ho provato ma dovrebbe andare ...
si, ha ragione andbin.
devo dare trasparenza ad una figura che visualizzo leggendo i dati da file.
provo il suggerimento di oregon.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
vanno messi nel main o nella funzione di visualizzazione?
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
sono parametri standard o vanno modificati?
intanto lo sto provando, ma nn viene fuori nulla.
grazie ancora
Non so come hai organizzato il tuo programma ma quelle sono chiamate che abilitano una funzionalita' e vanno eseguite una sola volta (dopo che crei il contesto ...)Originariamente inviato da syddharta
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
vanno messi nel main o nella funzione di visualizzazione?
Sono costanti di OpenGL. Non le devi modificare.Originariamente inviato da syddharta
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
sono parametri standard o vanno modificati?
Difficile dirti qualcosa in piu' ... come le stai provando?Originariamente inviato da syddharta
intanto lo sto provando, ma nn viene fuori nulla.
grazie ancora
Con quale codice?
sto provando a mettere
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
un pò ovunque, nel main, nella funziona di disegno, ...
l'unica cosa è che quando disegno un triangolo (ad esempio), andando poi a impostare la trasparenza mi scompare il triangolo.
Al momento l'attivazione del Blend non è nel codice, perchè ho provato a metterlo dappertutto ma non succede niente.
qui ho messo il codice, se vuoi darci un'occhiata;
#include <windows.h>
#include <gl/glut.h>
#include <gl/gl.h>
#include <gl/glui.h>
#include <gl/glu.h>
#include <stdio.h>
const int screenHeight=480;
typedef struct {GLint x,y;} Punto;
Punto Vertice[6];
int NumVertic=0;
int main_window, button;
char flag='N';
float rosso,verde,blu,rosso1,verde1,blu1,sl;
float traspa;
GLUI_Spinner *spinner4,*spinner5,*spinner6,*transpa;
GLUI_Panel *pannello2;
GLUI_RadioGroup *radio;
void disegno (int value)
{
switch (button)
{
case 0:
flag='N';
glClearColor (1.0,1.0,1.0,0.0);
break;
case 1:
flag='T';
glClearColor (1.0,1.0,1.0,0.0);
break;
}
}
void display()
{
if (flag=='N')
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
//disegna il triangolo
if (flag=='T')
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
}
void control_cb(int value)
{
switch (value)
{
case 1: //sfondo
glClearColor(0.0,0.0,0.0,traspa);
break;
case 2: //disegno
glColor4f(rosso1,verde1,blu1,traspa);
break;
}
}
void myMouse(int button,int state,int x,int y)
{
const int screenHeight=480;
typedef struct{GLint x,y;} GLintPoint;
static GLintPoint corner[3];
static int numCorners=0;
if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN)
{
corner[numCorners].x=x;
corner[numCorners].y=screenHeight-y;
numCorners++;
if(numCorners==3)
{
glBegin(GL_TRIANGLES);
glColor4f(rosso1,verde1,blu1, traspa);
glVertex2i(corner[0].x,corner[0].y);
glVertex2i(corner[1].x,corner[1].y);
glVertex2i(corner[2].x,corner[2].y);
glEnd();
glFlush();
numCorners=0;
}
}
}
void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE| GLUT_RGBA);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
main_window=glutCreateWindow("Esercizi 1,2,3");
glPointSize(1.0);
glLineWidth(1.0);
glutDisplayFunc(display);
glutMouseFunc(myMouse);
glClearColor (1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,640.0,0.0,480.0);
GLUI *glui=GLUI_Master.create_glui("Opzioni");
radio=glui->add_radiogroup(&button,0,disegno);
glui->add_radiobutton_to_group(radio,"Nessun disegno");
glui->add_radiobutton_to_group(radio,"Triangolo");
transpa=glui->add_spinner("trasparenza:",GLUI_SPINNER_FLOAT,&tr aspa);
transpa->set_float_limits(0,1);
pannello2=glui->add_panel("Colore disegno",GLUI_PANEL_EMBOSSED);
spinner4=glui->add_spinner_to_panel(pannello2,"Rosso:",GLUI_SPIN NER_FLOAT,&rosso1,2,control_cb);
spinner5=glui->add_spinner_to_panel(pannello2,"Verde.",GLUI_SPIN NER_FLOAT,&verde1,2,control_cb);
spinner6=glui->add_spinner_to_panel(pannello2,"Blu:",GLUI_SPINNE R_FLOAT,&blu1,2,control_cb);
spinner4->set_float_limits(0,1);
spinner5->set_float_limits(0,1);
spinner6->set_float_limits(0,1);
glui->add_button("Esci",0,exit);
glui->set_main_gfx_window(main_window);
glutMainLoop();
}