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