2016-06-10 1 views
-2

J'essaie d'implémenter une caméra pour un projet de type fps et j'ai des problèmes lors de l'utilisation de ma classe Camera sur le main.cpp lorsque j'appelle le glMatrixMode(GL_MODELVIEW).glMatrixMode (GL_MODELVIEW) utilisation donnant la faute de segmentation

Voici les fonctions correspondantes:

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

Avez-vous un contexte OpenGL lorsque vous exécutez cela? S'il vous plaît créer un [mcve]. –

+0

@ColonelThirtyTwo: Même sans contexte GL cela ne devrait pas segfault. Il y a très probablement un hors-limites qui écrit ailleurs dans le programme en corrigeant les structures de gestion d'exécution et l'appel de glLoadIdentity déclenche le repli. C'est là que l'on obtient un débogueur de mémoire comme Valgrind. – datenwolf

Répondre

1

Dans le cas si vous incluez glew.h, vous devez initialiser au préalable, sinon les appels API GL sont remplacés par des pointeurs de fonction nulle et les causes segfaults.