Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » 3D mit Anaglyphen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.11.2009, 16:26 Uhr
mmc20
puss in boots


hallo,
ich bastel gerade an einer 3D demo mit (rot-blau-)anaglyphen,
dazu zeichne ich meine szene jeweils einmal in rot und einmal in blau, und schalte zwischen den beiden immer hin und her
wer's mal ausprobieren möchte der brauch den code vom NeHe-tut lesson5, meine "erweiterung" und natürlich noch ne rot-blau brille (wobei rot vor das linke auge muss)

C++:
// globale vars
bool    eye = FALSE;

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
    ...
    // Calculate The Aspect Ratio Of The Window
    gluPerspective( 30.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f ); // fov=30°
    ...
}

GLvoid DrawCube( GLfloat size = 1.0f )
{
    glBegin(GL_QUADS);
        glVertex3f( size, size,-size);
        glVertex3f(-size, size,-size);
        glVertex3f(-size, size, size);
        glVertex3f( size, size, size);

        glVertex3f( size,-size, size);
        glVertex3f(-size,-size, size);
        glVertex3f(-size,-size,-size);
        glVertex3f( size,-size,-size);

        glVertex3f( size, size, size);
        glVertex3f(-size, size, size);
        glVertex3f(-size,-size, size);
        glVertex3f( size,-size, size);

        glVertex3f( size,-size,-size);
        glVertex3f(-size,-size,-size);
        glVertex3f(-size, size,-size);
        glVertex3f( size, size,-size);

        glVertex3f(-size, size, size);
        glVertex3f(-size, size,-size);
        glVertex3f(-size,-size,-size);
        glVertex3f(-size,-size, size);

        glVertex3f( size, size,-size);
        glVertex3f( size, size, size);
        glVertex3f( size,-size, size);
        glVertex3f( size,-size,-size);
    glEnd();
}

GLvoid DrawWireCube( GLfloat size = 1.0f )
{
    glBegin(GL_LINE_STRIP);
        glVertex3f( size, size, size);
        glVertex3f(-size, size, size);
        glVertex3f(-size,-size, size);
        glVertex3f( size,-size, size);
        glVertex3f( size, size, size);
    glEnd();
    glBegin(GL_LINE_STRIP);
        glVertex3f( size, size,-size);
        glVertex3f(-size, size,-size);
        glVertex3f(-size,-size,-size);
        glVertex3f( size,-size,-size);
        glVertex3f( size, size,-size);
    glEnd();
    glBegin(GL_LINE_STRIP);
        glVertex3f( size, size, size);
        glVertex3f(-size, size, size);
        glVertex3f(-size, size,-size);
        glVertex3f( size, size,-size);
        glVertex3f( size, size, size);
    glEnd();
    glBegin(GL_LINE_STRIP);
        glVertex3f( size,-size, size);
        glVertex3f(-size,-size, size);
        glVertex3f(-size,-size,-size);
        glVertex3f( size,-size,-size);
        glVertex3f( size,-size, size);
    glEnd();
}

void SetEyeColor(GLfloat factor=1.0f, GLfloat alpha=1.0f)
{
    glColor4d( (eye?0:1)*factor, 0, (eye?1:0)*factor, alpha );
}

void SetViewPerEye()
{
    glLoadIdentity();
    glTranslated( 0, 0, -60.0 ); // rauszoomen
    glRotated( (eye?-0.3:+0.3), 0, 1, 0 ); // drehen
    glTranslated( 0, 0, +60.0 ); // reinzoomem
    glTranslated( 0, 0, -10.0 );
}

int DrawGLScene(GLvoid)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable( GL_LINE_SMOOTH );
/////////////////////////////////////////////////////////////
    SetViewPerEye();
/////////////////////////////////////////////////////////////
    glLineWidth( 3 );
    glRotated( rtri, 1, 0, 0 );
    glRotated( rquad, 0, 1, 0 );

    SetEyeColor();
    DrawWireCube( .50f );

    glRotated( rtri*4, 0, 1, 0 );
    glTranslated( 0, 0, -2.0 );
    glRotated( rtri*2, 1, 1, 1 );
    SetEyeColor();
    DrawWireCube(0.31f);

    SetViewPerEye();
    glRotated( 30, 0, 0, 1 );
    glRotated( rtri*7, 0, 1, 0 );
    glTranslated( 0, 0, -3.0 );
    glRotated( rtri*3, 1, 1, 1 );
    SetEyeColor();
    DrawWireCube(0.21f);
/////////////////////////////////////////////////////////////
    eye =! eye;
    if ( eye )
    {
        rtri += 0.44f;
        rquad += 0.26f;
    }
    return TRUE;
}


das problem ist das er ja immer zwischen den beiden "halb-bildern" switcht, dadurch sind die farben natürlich nur halb so hell.
jetzt such ich nach ner einstellung das ich beides übereinander zeichnen kann, und an den stellen wo sich rote und blaue linien überlagern dort eben die farbe addiert wird.
ich hab das ganze schon mit alpha-blending probiert aber da muss ich ja die linien halb durchsichtig machen damit dieser effekt eintritt, wodurch sie dann auch nur noch so hell wie in der "switch"-version sind
oder gibts da einen draw-modus den ich übersehen habe ?

Dieser Post wurde am 30.11.2009 um 16:31 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: