2012-01-22 4 views
2

Я использую GLUT для работы с OpenGL (буду работать с SDL, если бы мог). И мне нужно рисовать сферу. Я использую gluSphere, но он просто ничего не рисует.C++ + glut + OpenGL + 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(). У меня несколько треугольников, окружающих пространство, и они рисуют просто отлично.

+0

Вы не должны использовать 'new', бросая исключение; подумайте о том, что произойдет, если «новый» не удался. – datenwolf

+0

@ datenwolf Ха-ха! Благодарю. Я видел бросание исключений с 'new Exception', когда я изучал C++, ну, давным-давно, и хотя это требует синтаксиса с тех пор. – Vyktor

ответ

0

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

0

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

Как насчет настройки видового экрана и проекции?

+0

О, у меня есть функция «resize», которая позаботится об этом ... Нормальные треугольники прекрасно работают. – Vyktor

+0

Что мне делать, когда я сам отвечу на вопрос? :) – Vyktor

+0

@ Vyktor: Напишите ответ и примите его (вы не получите точку для само-ответа-принятия). – datenwolf

-1

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

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

+0

Возможно, полезно для ОП, но на самом деле это не отвечает на вопрос, не так ли? – Bart

+0

Достаточно честно, подумал, что он будет считать, что это пробегает всю тему под рукой (создавая 3D-сферу), но это то, что я помню. Извиняюсь. Приветствия. –

Смежные вопросы