2016-04-03 2 views
0

Ну, Довольно уверен, что проблема довольно проста, но я не вижу проблем, и отладчик не помогает мне. Во всяком случае, я пытаюсь нарисовать самолет, и все, что я получаю, черное. Я честно не уверен, рисует ли он, но слишком мал, чтобы его можно было увидеть.opengl glDrawElements Issues

int index[][3] = {{0,1,4}, {0,3,4}, {1,2,5}, {1,4,5}}; 
double VertexA[][3] = {{0.0 , 0.0 , -.0415}, {0.5, 0.0, .6543}, {1.0,0,-.0415}, 
         {0.0, 0.5, .093}, {0.5, 0.5, -.070}, {1.0, 0.5 , .093}, 
         {0.0,1.0, -.0415}, {0.5, 1.0, .6543}, {1.0,1.0,-.0415}} 

void display() { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(3, GL_DOUBLE, 24, VertexA); 
    glDrawElements(GL_TRIANGLES, 4, GL_UNSIGNED_INT, index); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glutSwapBuffers(); 
} 
void reshape(int w, int h) { 
    if (w <= h) { 
     glViewport(0,(h-w)/2, w,w); 
    } 
    else { 
     glViewport((w-h)/2,0,h,h); 
    } 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(30.0, w/h, 10.0, 100.0); 
    glMatrixMode(GL_MODELVIEW); 

} 

Это фрагмент моего кода, измененный с помощью определенного массива VertexA/Index. Я уверен, что index/vertexArray был получен правильно, это часть рисования, где я получаю проблемы. Я предполагаю, что я злоупотребляю glDrawElement или gluPerspective. Честно говоря, я не уверен. Нужно ли иметь ColorArray? Он должен быть белым, если я не определяю цвет в первую очередь правильно? Любые вопросы или вы хотите, чтобы более фрагмент запроса просил, но у меня есть ощущение, что проблемы находятся внутри фрагмента.

+0

Кроме того, мой компилятор дает синтаксическую ошибку при попытке инициализировать 'double' с' .0.5' (ваша строка 3). –

+0

Исправить это, это была опечатка, я не хотел публиковать весь код, где я получаю данные VertexA/Index – Leruce

ответ

2

Функция gluPerspective нуждается в аргументе с плавающей запятой для aspect. Ваша линия

gluPerspective(30.0, w/h, 10.0, 100.0); 

но расчет w/h является целочисленным делением. Я предлагаю вам использовать (double)w/h или, возможно, (GLdouble)w/h.

+0

Не будет ли зацикливаться на int в любом случае? Ну, я проверил и протестировал. Кажется, не помогло. Отличается ли znear/zfar? Я не думаю, что это проблемы, но никогда не знаю, как определить идеальный вариант. – Leruce

+1

Жаль, что это не помогло. Разделение выполняется без учета целевого типа: выражения оцениваются в соответствии с типами, которые они содержат, а затем при необходимости преобразуются в целевой тип. –

3

Ваш объект полностью находится вне ракурса просмотра. Вы используете идентификационную матрицу как ModelView и gluPrespective с near=10 и far=100 в качестве проекции. В результате объем представления будет от z = -10 до z = -100, а ваши объекты лежат в z = -0,1 до z = 0,1, поэтому они обрезаются ближней плоскостью.