Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » 3D Texture rendern

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
12.09.2008, 10:05 Uhr
cmos



HAllo,
könnte mir bitte jemand abei helfen eine 3D Textur zu rendern?
Ich habe da noch nicht genau verstanden wie das mit diesen clip planes
funktioniert, die durch das volumen schneiden und dann das schnittbild als
textur darauf abbilden.

Ich lade ein Volumen Model von der größe 256*256*256
als 3D Textur. Da die Daten nur als 1Byte vorleigen konvertiere ich
vorher noch in RGB und erzeuge damit dann die 3D Textur.

Aber irgendwie sehe ich rein gar nichts


Code:
void display()
{
      int nSlices = 1.3*(sqrt(float(256*256 + 256*256 + 256*256)))/4.0;
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    float xPlane[4];
    float yPlane[4];
    float zPlane[4];
    
    glTexGenf(GL_S,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
    glTexGenf(GL_T,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
    glTexGenf(GL_R,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
    glTexGenfv(GL_S,GL_EYE_PLANE,xPlane);
    glTexGenfv(GL_T,GL_EYE_PLANE,yPlane);
    glTexGenfv(GL_R,GL_EYE_PLANE,zPlane);
    glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    glEnable(GL_TEXTURE_GEN_R);

    double clip0[]  = {-1.0,  0.0,  0.0, 1.0};
    double clip1[]  = { 1.0,  0.0,  0.0, 1.0};
    double clip2[]  = { 0.0, -1.0,  0.0, 1.0};
    double clip3[]  = { 0.0,  1.0,  0.0, 1.0};
    double clip4[]  = { 0.0,  0.0, -1.0, 1.0};
    double clip5[]  = { 0.0,  0.0,  1.0, 1.0};

    glClipPlane(GL_CLIP_PLANE0,clip0);
    glClipPlane(GL_CLIP_PLANE1,clip1);
    glClipPlane(GL_CLIP_PLANE2,clip2);
    glClipPlane(GL_CLIP_PLANE3,clip3);
    glClipPlane(GL_CLIP_PLANE4,clip4);
    glClipPlane(GL_CLIP_PLANE5,clip5);  

    glEnable(GL_CLIP_PLANE0);
    glEnable(GL_CLIP_PLANE1);
    glEnable(GL_CLIP_PLANE2);
    glEnable(GL_CLIP_PLANE3);
    glEnable(GL_CLIP_PLANE4);
    glEnable(GL_CLIP_PLANE5);

    float fstep = 1.0 / nSlices;

        for(int i = 0; i < nSlices; i++)
        {
        glBegin(GL_QUADS);                    
            glVertex3f(-0.5f, -0.5f, fStep);                
            glVertex3f( 0.5f, -0.5f, fStep);                
            glVertex3f( 0.5f,  0.5f, fStep);    
            glVertex3f(-0.5f,  0.5f, fStep);    
        glEnd();
        f += fStep;
        }

    glDisable(GL_TEXTURE_3D);

    glDisable(GL_CLIP_PLANE0);
    glDisable(GL_CLIP_PLANE1);
    glDisable(GL_CLIP_PLANE2);
    glDisable(GL_CLIP_PLANE3);
    glDisable(GL_CLIP_PLANE4);
    glDisable(GL_CLIP_PLANE5);

    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    glDisable(GL_TEXTURE_GEN_R);


    glutSwapBuffers();
}



grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2009, 14:19 Uhr
rapso



ich glaube clipplanes haben mit volumerendering nichts zu tun. du zeichnest einfach nur die slices und solltest das objekt sehen. clippingplanes nutzt man um in bestimmte bereiche nicht zu zeichnen, aber wie gesagt, das hat ja nichts mit volumerendering an sich zu tun.
 
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: