2010-10-20 12 views
5

próbuję uczynić dwuwymiarowy półpłaszczyźnie w OpenGL z następującego kodu:OpenGL: Trójkąty z punktów w nieskończoności

void renderHalfplane(double *x, double *n) 
{ 
    glPushMatrix(); 
    double theta = -360.0 * atan2(n[0], n[1])/(2.0*PI); 

    glTranslated(x[0], x[1], 0); 
    glRotated(theta, 0, 0, 1.0); 

    glBegin(GL_TRIANGLES); 
    glVertex4d(0.0, 0.0, 0.0, 1.0); 
    glVertex4d(1.0, 0.0, 0.0, 0.0); 
    glVertex4d(0.0,-1.0, 0.0, 0.0); 
    glVertex4d(0.0, 0.0, 0.0, 1,0); 
    glVertex4d(-1.0,0.0, 0.0, 0.0); 
    glVertex4d(0.0,-1.0, 0.0, 0.0); 
    glEnd(); 

    glPopMatrix(); 
} 

Tutaj używam współrzędne jednorodne rysować trójkąty z dwoma wierzchołkami w "nieskończoność."

Ten kod działa jak czar na moim komputerze, ale użytkownik zgłasza, że ​​nie renderuje się poprawnie na swoim: zamiast nieskończonej połówki widzą dwa (skończone) trójkąty.

Czy korzystanie z współrzędnych W jest niezdefiniowane? Czy jest to coś, co działa tylko w niektórych wersjach OpenGL? Próbowałem przeglądać specyfikacje OpenGL w Khronos, ale nie mogłem znaleźć sekcji, w której uwzględniono renderowanie prymitywów o współrzędnej W 0.

+0

jakie jest urządzenie Twojego użytkownika? – Bahbar

+0

Według użytkownika używa laptopa z systemem Ubuntu ze sterownikami Mesa OpenGL. Mam pulpit z Ubuntu, ale renderuje się dobrze, gdy testuję tam kod. – user168715

+0

To bardzo dziwne, aby użyć w = 0 ... powinieneś przetestować go na różnych sterownikach kart graficznych. – Luca

Odpowiedz

1

Przetestowałem to na moim komputerze (nVidia Quadro) i renderuje się poprawnie. Znalazłem próbki kodu (dla woluminów w tle), które skalują współrzędną W do nieskończoności, która również działa dobrze.

Zgaduję, że to jest problem sterownika lub coś zewnętrznego poza tym kodem?

+0

Jakieś słowo na temat problemu? Czy udało ci się go rozwiązać? –

+0

Ciekawy również ... Używam tej techniki i chcę wiedzieć, czy to niewiarygodne. –

+0

Nie, nigdy nie udało mi się go uruchomić, więc zmieniłem sposób renderowania. Z tego co przeczytałem, fragment kodu * powinien * być poprawny, i przypuszczam, że sterowniki Mesa, o których mowa, były stare/niezgodne/błędne. – user168715

Powiązane problemy