C ++ + перенасыщение + OpenGL + gluSphere ничего не рисует - PullRequest
2 голосов
/ 22 января 2012

Я использую GLUT для работы с OpenGL (работал бы с SDL, если бы мог). И мне нужно нарисовать сферу. Я использую gluSphere, но он просто ничего не рисует.

Вот моя инициализация GLUT:

// Initializes display
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 600);

// Window settings
glutCreateWindow("Collision detect");
glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_TEXTURE_2D);

Квадратичная инициализация:

quadratic = gluNewQuadric();
if( !quadratic){
    throw new PROGRAM_EXCEPTION( "Cannot initialize quadartic", NULL);
}
gluQuadricNormals(quadratic, GLU_SMOOTH);
//gluQuadricDrawStyle( quadratic, GLU_FILL);
gluQuadricTexture(quadratic, GL_TRUE); // Tried both GL_TRUE and GL_FALSE

И моя функция рисования:

glPushMatrix();
glTranslatef( position.getX(), position.getY(), position.getZ());
// This commented piece of code draws dot where I want it to,
// so coordinates and camera position are just fine
//  glBegin(GL_POINTS);
//  glVertex3f( 0,0,0);
//  glEnd();
gluSphere( quadratic, 20.0f, 32, 32); // Tried r = 0.02f, 0.2f, 2.0f, 20.0f, none works
glPopMatrix();

Вопрос: что мне не хватает? Есть ли какая-то хитрость в изобилии, позволяющая рисовать квадратики? Это несовместимо с некоторыми моими настройками?

Я потратил несколько часов, пытаясь разобраться в этом, пробовал разные вещи ... Если вам нужен какой-то другой фрагмент кода, просто скажите ... Я не хочу вставлять здесь 2000 строк. И еще одна вещь, у меня есть тройная проверка, я не использую ее внутри glBegin() и glEnd(). У меня есть несколько треугольников, окружающих пространство, и они прекрасно рисуют.

Ответы [ 3 ]

0 голосов
/ 22 января 2012

Проблема заключалась в том, что у меня был класс, который позаботился о рисовании шара (он назывался Sprit), он создал квадратик в конструкторе (также конструктор копирования создал свой квадратик) и удалил квадратик в деструкторе. Хотя я тщательно написал конструктор копирования, я забыл написать оператор присваивания и использовал удаленный квадратик. Я использовал glGetError (), чтобы проверить, что все в порядке, об ошибках не сообщалось, поэтому я предположил, что это проблема GLUT.

0 голосов
/ 23 января 2012

Используйте это руководство http://www.mediafire.com/?x6h3hz6hn1wqq73

Глава 2 в основном охватывает все, что вы ищете. Он также касается языковых и технологических стеков, которые вы используете.

0 голосов
/ 22 января 2012

Вопрос: что мне не хватает?

Как насчет настройки области просмотра и проекции?

...