Przekształacenia w OpenGL

Odpowiedz Nowy wątek
2013-07-02 12:52
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?


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-07-02 12:57
2

albo glFrustum, albo gluPerspective.

+1; gluPerspective to taka obudowana i uproszczona wersja glFrustum, przekazujesz do niej parametry, ona oblicza wszystkie płaszczyzny i przekazuje do glFrustum - misiakufal 2013-07-02 13:13

Pozostało 580 znaków

2013-07-02 14:37
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.

edytowany 3x, ostatnio: Azarien, 2013-07-02 14:50

Pozostało 580 znaków

2013-07-14 18:13
0

Użyłem gluPerspective i pomogło.


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-07-15 19:38

Na razie zostawię grafikę trójwymiarową.


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-07-22 00:11
Kierai
0

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

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

Co jest niby złego w fixed pipeline? Jest proste, (względnie) zrozumiałe, nie wymaga nie wiadomo jakiej wiedzy na początek i znacznie bardziej przenośne. - Azarien 2013-07-22 00:50

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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