Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++/OpenGL] texture matrix + drawing rotatie

Pagina: 1
Acties:

  • Iska
  • Registratie: November 2005
  • Laatst online: 19-11 10:36

Iska

In case of fire, use stairs!

Topicstarter
Hey allemaal,

Ik ben een beetje aan het aanklooien met volume rendering dmv texture mapping mbv deze tutorial.
Ik begrijp het principe best aardig, maar C++ en OpenGL zijn nog niet mijn specialiteiten.

Momenteel probeer ik lijnen toe te voegen die assen weergeven in de texture matrix. De volgende code is voor het renderen:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
glDisable(GL_TEXTURE_3D);
// Lijnen tekenen
    glColor4f(1.0f,1.0f,1.0f,1.0f);
    glBegin(GL_LINES);
        glVertex3f(-dOrthoSize, 0.0f, 0.0f);
        glVertex3f( dOrthoSize, 0.0f,  0.0f);
    glEnd();
    glBegin(GL_LINES);
        glVertex3f(0.0f, -dOrthoSize, 0.0f);
        glVertex3f(0.0f,  dOrthoSize,  0.0f);
    glEnd();
    glBegin(GL_LINES);
        glVertex3f(0.0f, 0.0f, -dOrthoSize);
        glVertex3f(0.0f, 0.0f,  dOrthoSize);
    glEnd();

    glMatrixMode( GL_TEXTURE );
    glLoadIdentity();

    // Translate and make 0.5f as the center 
    // (texture co ordinate is from 0 to 1. so center of rotation has to be 0.5f)
    glTranslatef( 0.5f, 0.5f, 0.5f );

    // A scaling applied to normalize the axis 
    // (Usually the number of slices will be less so if this is not - 
    // normalized then the z axis will look bulky)
    // Flipping of the y axis is done by giving a negative value in y axis.
    // This can be achieved either by changing the y co ordinates in -
    // texture mapping or by negative scaling of y axis
    glScaled( 1.0f, 
        -1.0f*(float)m_pRawDataProc->GetWidth()/(float)(float)m_pRawDataProc->GetHeight(), 
        (float)m_pRawDataProc->GetWidth()/(float)m_pRawDataProc->GetDepth());

    // Apply the user provided transformations
    glMultMatrixd( m_pTransformMgr->GetMatrix());
    
    glTranslatef( -0.5f,-0.5f, -0.5f );

    glEnable(GL_TEXTURE_3D);
    glBindTexture( GL_TEXTURE_3D,  m_pRawDataProc->GetTexture3D() );
    for ( float fIndx = -1.0f; fIndx <= 1.0f; fIndx+=0.01f )
    {
        glBegin(GL_QUADS);
            MAP_3DTEXT( fIndx );
        glEnd();
    }


De functie glMultMatrixd wordt gebruikt om de texture matrix te scalen en te roteren adhv van de muisbewegingen van de user. Dit werkt echter alleen op de texture matrix, en dus niet op de lijnen die ik heb aangebracht.
Ik zit hier een beetje vast, want deze functie toepassen op andere matrices (projecten, modelview), zorgt ervoor dat de texture matrix niet goed wordt weergeven.

Zouden jullie mij kunnen helpen door in een duwtje in de goede richting te kunnen geven? Kan ik beter proberen de lijnen in de texture matrix te zetten of kan ik de lijnen individueel transformeren?

Bvd!

-- All science is either physics or stamp collecting


  • Infant
  • Registratie: Januari 2008
  • Laatst online: 21-11 21:52

Infant

It's a floating Dino!

Ik denk als je de Modelview matrix aan past, dat de texture coordinaten niet meer overeen gaan komen.
Zowiezo kan ik niet echt zien in wat voor een toestand je die lijnen nu aan het tekenen bent.

Wat je kunt doen is voordat je lijnen gaat tekenen, de modelview matrix inladen, pushen en vervolgens de correcte transformaties doen, en dan weer van de stack poppen:

C:
1
2
3
4
5
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
//Berg met transformaties...
//Lijnen tekenen
glPopMatrix();


Op die manier is de Modelview weer in dezelfde staat, en kun je GL_QUADS aanroepen.

  • Iska
  • Registratie: November 2005
  • Laatst online: 19-11 10:36

Iska

In case of fire, use stairs!

Topicstarter
Super, dat werkt. Dank!

-- All science is either physics or stamp collecting