![](/local/templates/esate-adaptive/images/user.png)
Как пользоваться Glut.glutMainLoop()
Попробовал использовать Glut.glutMainLoop(). До этого задаю
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);
Программа виснет.
Никто не сталкивался?
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);
Программа виснет.
Никто не сталкивался?
Нужно создать делегат функции, это тоже самое что указатель на функцию.
Вот пример:
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:
Нужно создать делегат функции, это тоже самое что указатель на функцию.
Вот пример:
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.)
Кстати есть полезный ресурс в сети заменяющий локальный
Я ведь сейчас говорю про Tao Framework. Точнее говорю про SimpleOpenGlControl.
Glut.glutCreateWindow(«GlRect»); создает консольное окно. Попробовал без этого, тоже зависает.
Думаю не использовать glut вообще.
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);Эти функции нужны для работы с тем консольным окном про которое ты упомянул. Если ты используешь SimpleOpenGlControl, то они тебе не нужны.
Есть уроки на реагирования на клавиши?
Это для полного охвата 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;//вызов твоих функций
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
};
}
Выбераешь события, молния в Properties.
Клацаешь(двойный щелчек) по выделенной желтым области напротив KeyDown, тебе перекинет в исходный код с уже готовыи обработчиком, там все пропишешь и должно работать.
SimpleOpenGlControl дочерний элемент.