2016-06-10 14 views
-2

Ich versuche, eine Kamera für ein fps ähnliches Projekt zu implementieren, und ich habe Probleme, wenn ich meine Camera-Klasse auf der main.cpp beim Aufruf der glMatrixMode(GL_MODELVIEW).glMatrixMode (GL_MODELVIEW) benutze Segmentierungsfehler

Hier sind die entsprechenden Funktionen:

void Camera::init() { 

    m_yaw = 0.0; 
    m_pitch = 0.0; 
    set_pos(0,0,0); 
} 

void Camera::set_pos(float x, float y, float z) { 
    m_x = x; 
    m_y = y; 
    m_z = z; 

    refresh(); 
} 

void Camera::refresh() { 
    m_lx = cos(m_yaw) * cos(m_pitch); 
    m_ly = sin(m_pitch); 
    m_lz = sin(m_yaw) * cos(m_pitch); 

    m_strafe_lx = cos(m_yaw - M_PI_2); 
    m_strafe_lz = sin(m_yaw - M_PI_2); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    printf("the segmentation fault is above!\n"); 
    gluLookAt(m_x, m_y, m_z, m_x + m_lx, m_y + m_ly, m_z + m_lz, 0.0, 1.0, 0.0); 

    //printf("Camera: %f %f %f Direction vector: %f %f %f\n", m_x, m_y, m_z, m_lx, m_ly, m_lz); 
} 
+2

Haben Sie einen OpenGL-Kontext, wenn Sie dies ausführen? Bitte erstellen Sie ein [mcve]. –

+0

@ColonThirtyTwo: Auch ohne GL Kontext sollte dies nicht segfault sein. Höchstwahrscheinlich gibt es ein Out-of-Bounds Schreiben irgendwo anders in dem Programm korrumpierenden Runtime Housekeeping Strukturen und der Aufruf von GlLoadIdentity löst den Kollaps aus. Hier bekommt man einen Speicher-Debugger wie Valgrind. – datenwolf

Antwort

1

Im Fall, wenn Sie glew.h sind, müssen Sie vorher, sonst GL-API-Aufrufe initialisiert werden ersetzt mit null Funktionszeiger und verursacht segfaults.