Как пользоваться Glut.glutMainLoop()

Попробовал использовать Glut.glutMainLoop(). До этого задаю
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);
Программа виснет.
Никто не сталкивался?
0       3372        17.01.2011        20

0  
17.01.2011 00:00:00
В C# все не так просто как кажеться))
Нужно создать делегат функции, это тоже самое что указатель на функцию.
Вот пример:
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_RGB);
Glut.glutCreateWindow("GlRect");
Glut.glutDisplayFunc(<b><u>new Glut.DisplayCallback(RenderScene)</u></b>);
Glut.glutReshapeFunc(<b><u>new Glut.ReshapeCallback(ChangeSize)</u></b>);
Glut.glutTimerFunc(33, new Glut.TimerCallback(TimerFunc), 1);
SetupRC();
Glut.glutMainLoop();
Я сам с этим долбался, много времени убил копаясь в MSDN.)
Кстати есть полезный ресурс в сети заменяющий локальный MSDN:
0  
17.01.2011 00:00:00
0  
17.01.2011 00:00:00
блин че то глючит.
0  
17.01.2011 00:00:00
В C# все не так просто как кажеться))
Нужно создать делегат функции, это тоже самое что указатель на функцию.
Вот пример:

Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_RGB);
Glut.glutCreateWindow("GlRect");
Glut.glutDisplayFunc(new Glut.DisplayCallback(RenderScene));
Glut.glutReshapeFunc(new Glut.ReshapeCallback(ChangeSize));
Glut.glutTimerFunc(33, new Glut.TimerCallback(TimerFunc), 1);
SetupRC();
Glut.glutMainLoop();


new Glut.DisplayCallback(RenderScene) — создание делегата

Я сам с этим долбался, много времени убил копаясь в MSDN.)
Кстати есть полезный ресурс в сети заменяющий локальный
0  
18.01.2011 00:00:00
Вы написали Glut.glutCreateWindow(«GlRect»);
Я ведь сейчас говорю про Tao Framework. Точнее говорю про SimpleOpenGlControl.
Glut.glutCreateWindow(«GlRect»); создает консольное окно. Попробовал без этого, тоже зависает.
Думаю не использовать glut вообще.
0  
18.01.2011 00:00:00
Попробовал использовать Glut.glutMainLoop(). До этого задаю
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);Эти функции нужны для работы с тем консольным окном про которое ты упомянул. Если ты используешь SimpleOpenGlControl, то они тебе не нужны.
0  
18.01.2011 00:00:00
Понятно. Т.е. надо самому писать перерисовку, и изменение размера экрана?
Есть уроки на реагирования на клавиши?
0  
18.01.2011 00:00:00
Как только освобожусь выложу пару пример в персональный блог. ок?
0  
18.01.2011 00:00:00



Это для полного охвата SimpleOpenGlControl окна, а если сделать вот так


То будет полный экран.

Перерисовки пиши в отдельной функции Draw(); и вызывай ее по счетчику или по событию.
Вот пример функции:
private void Draw()
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(1.0f, 0, 0);

Gl.glPushMatrix();
Glut.glutWireSphere(2, 32, 32);
Gl.glPopMatrix();
Gl.glFlush();
OpenGl.Invalidate();
}

Создай событие Form1_Resize или Form1_SimpleOpenGlControl для обработки изменение размера
Пример:
private void Form1_Resize(object sender, EventArgs e)
{
Gl.glViewport(0, 0, OpenGl.Width, OpenGl.Height);
// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(45, (float)OpenGl.Width / (float)OpenGl.Height, 0.1, 400);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
}

Обработка клавиш (событие Form1_KeyDown):
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();//твое событие(вызов твоих функций)
}
if (e.KeyCode == Keys.Z)
z.a -= 0.2;//вызов твоих функций
else if (e.KeyCode == Keys.X)
z.a += 0.2;//вызов твоих функций
}
0  
19.01.2011 00:00:00
по поводу последнего, как реализовать нажатие одновременно двух кнопок? =)
0  
19.01.2011 00:00:00
Вроде делал такое, ща пороюсь в разных исходниках поищу.)
0  
19.01.2011 00:00:00
У меня на клавиши не реагирует. Ничего не пойму в чем дело.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
};
}
0  
19.01.2011 00:00:00
Пожди выложу пример создания обработчика в картинках
0  
19.01.2011 00:00:00

Выбераешь события, молния в Properties.
Клацаешь(двойный щелчек) по выделенной желтым области напротив KeyDown, тебе перекинет в исходный код с уже готовыи обработчиком, там все пропишешь и должно работать.
0  
19.01.2011 00:00:00
Все делаю именно так. Эффекта нет.
0  
19.01.2011 00:00:00
Скинь почту в личку.
0  
19.01.2011 00:00:00
так надо обработчик не формы кидать, а SimpleOpenGlControl
0  
19.01.2011 00:00:00
Форма все равно получает сообщения о нажатиях, так как
SimpleOpenGlControl дочерний элемент.
0  
19.01.2011 00:00:00
Я ошибся ты прав, то у меня че то память подводит)
0  
19.01.2011 00:00:00
бывает) как понимаю этот контрол просто перехватывает все сообщения =)
^