2010-10-20 20 views
5

Aşağıdaki kod ile OpenGL'de iki boyutlu yarım uçağı işlemek çalışıyorum at puanla: BuradaOpenGL: Üçgenler sonsuza

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(); 
} 

Ben iki köşeler ile üçgenleri çizmek için homojen koordinatlar kullanıyorum "sonsuzluk."

Bu kod bilgisayarımda bir çekicilik gibi çalışır, ancak bir kullanıcı, kendileri üzerinde doğru bir şekilde oluşturmadığını bildirir: sonsuz bir yarım düzlem yerine iki (sonlu) üçgen görürler.

W-coordinate 0 tanımlanmamış davranışımı kullanmam mı gerekiyor? OpenGL'nin bazı sürümlerinde çalışan bir şey mi? Khronos OpenGL özelliklerini incelemeyi denedim, ancak w koordinat 0 ile ilkellerin oluşturulmasının ele alındığı bir bölüm bulamadım.

+0

Kullanıcınızın cihazı nedir? – Bahbar

+0

Kullanıcıya göre Mesa OpenGL sürücüleri ile Ubuntu çalışan bir dizüstü bilgisayar kullanıyor. Ubuntu ile bir masaüstüm var ama kodu orada test ettiğimde sorun yok. – user168715

+0

w = 0 kullanmanız çok garip. Farklı grafik kartı sürücülerinde test etmelisiniz. – Luca

cevap

1

Bunu makinemde (nVidia Quadro) test ettim ve doğru şekilde oluşturuyor. W koordinatını da iyi çalıştıran sonsuzluğa ölçekleyen kod örnekleri (gölge birimleri için) buldum.

Bu bir sürücü sorunu veya bu kodun dışında bir şey olduğunu tahmin edeceğim?

+0

Sorunun ne olduğu hakkında bir kelime var mı? Çözmeyi başardın mı? –

+0

Merak ediyorum da ... Bu tekniği kullanıyorum ve güvenilmez olup olmadığını bilmek istiyorum. –

+0

Hayır, işe hiç başlamadım, bu yüzden render yapma şeklimi değiştirdim. Snippet'i okuduğumdan * doğru * olmalı ve benim tahminim Mesa sürücülerinin eski/uyumsuz/buggy olmasıydı. – user168715