Przekształacenia w OpenGL

0

Mam ten sam problem co w tym temacie:
http://cpp0x.pl/forum/temat/?id=9248
Jednak ja nie zmieniam (na razie) zmiennej centerz - góra/dół - a centerx - lewo/prawo - i wtedy powstają te dziwne przekształcenia:
http://www.sendspace.pl/file/pic/ca061eb78d8a07c0ac33c76/1
Używam funkcji:

gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, 0, 1, 0 );

Natomiast glFrustum() tak (cała funkcja 'Reshape'):

void Reshape( int width, int height )
{   
    // obszar renderingu - całe okno
    glViewport( 0, 0, width, height );
   
    // wybór macierzy rzutowania
    glMatrixMode( GL_PROJECTION );
   
    // macierz rzutowania = macierz jednostkowa
    glLoadIdentity();
    // 
    gluPerspective( angle, 1.333, 1,15.0 );
    
    // parametry bryły obcinania
    if( Aspect == ASPECT_1_1 )
    {
        // wysokość okna większa od wysokości okna
        if( width < height && width > 0 )
             glFrustum( - 2.0, 2.0, - 2.0 * height / width, 2.0 * height / width, 1.0, 15.0 );
        else
        // szerokość okna większa lub równa wysokości okna
        if( width >= height && height > 0 )
             glFrustum( - 2.0 * width / height, 2.0 * width / height, - 2.0, 2.0, 1.0, 15.0 );
    }
    else
         glFrustum( - 2.0, 2.0, - 2.0, 2.0, 1.0, 15.0 );
   
	// generowanie sceny 3D
    Display();
}

Tak używam gluPerspective:

gluPerspective( angle, 1.333, 1,15.0 );

Zmienna 'angle' wynosi 0 bo inaczej nie widać w ogóle sześcianu.

Nawet jak użyje gluPerspective to nic się nie zmienia więc jak zapobiec tym przekształceniom?

2

albo glFrustum, albo gluPerspective.

1
misiakufal napisał(a)

gluPerspective to taka obudowana i uproszczona wersja glFrustum, przekazujesz do niej parametry, ona oblicza wszystkie płaszczyzny i przekazuje do glFrustum

Jeśli dobrze przekształciłem,

void gluPerspective(GLdouble fovy,  GLdouble aspect, GLdouble zNear, GLdouble zFar)
{
    GLdouble top = zNear / cos(fovy/2) * sin(fovy/2);
    glFrustum(-top*aspect, top*aspect, -top, top, zNear, zFar);
}

i przekazuje do glFrustum
Nie widziałem źródeł oczywiście, ale specyfikacja sugeruje, że obie funkcje wywołują glMultMatrix tylko inaczej wyliczają macierz.

0

Użyłem gluPerspective i pomogło.

0

Na razie zostawię grafikę trójwymiarową.

0

Ugh. 2013 rok mamy, nie używaj fixed pipeline.

http://tomdalling.com/blog/category/modern-opengl/ - czytnij sobie na dobry początek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1