Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] Trasparenza di oggetti

    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.

  2. #2
    SetLayeredWindowAttributes
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    scusa, potresti spiegarti meglio?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da DYNAM!C+
    SetLayeredWindowAttributes
    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)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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)
    pensavo oggetto, nel senso di "oggetto" textbox ecc...
    quindi se ho ben capito la semitrasparenza di un poligono?
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...

  7. #7
    si, ha ragione andbin.
    devo dare trasparenza ad una figura che visualizzo leggendo i dati da file.

    provo il suggerimento di oregon.

  8. #8
    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

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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?
    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
    GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
    sono parametri standard o vanno modificati?
    Sono costanti di OpenGL. Non le devi modificare.

    Originariamente inviato da syddharta
    intanto lo sto provando, ma nn viene fuori nulla.
    grazie ancora
    Difficile dirti qualcosa in piu' ... come le stai provando?
    Con quale codice?

  10. #10
    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();
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.