Друзья, подскажите плиз в чем дело. Значит вот у меня в форме SimpleGLControl. При движении по нему мышью или нажатии клавиш клавиатуры начинается чередование предыдущего и текущего кадров. Можно ли как то побороть сий недуг?
Вот текущий кадр
Вот предыдущий
то есть что сделал — изменил цфет фона, был белый, стал серый, двигаю мышкой по контролу возвращается белый, еще двигаю возвращается серый, то есть чередуются предыдущий и текущий кадры
свернуть ветку
Ниже код отрисовки. Вроде как буфер очищаю. Тут не только цвет возвращается. Если я отрисовал сперва квадрат, а потом треугольник например, будет возвращаться треугольник, то есть возвращается полностью предыдущий кадр со всеми его цветами и нарисованными объектами.
private void Draw()
{
Как вариант меня устроит запрет событий мышки и клавы на конроле, то есть чтобы курсор нельзя было навести на контрол, покликать по нему и т.д. Если есть решение как это сделать подскажите, сам я новичок в C#.NET, долго буду ковырятся.
свернуть ветку
Плиз кинь ссылку на проект, можешь залить сюда или на другой файлообменик. Еще мож кинуть в скайп flashinhell. Полностью с проектом легче будет разобраться, что не так.
свернуть ветку
Да в принципе при анимации, то есть при частой отрисовке кадров такой проблемы нет, что самое главное, так что жить можно. Просто попробуйте у себя отрисовать один раз один кадр и потом какой нибудь другой, без постоянной отрисовки кадров, не запуская цикл glutMainLoop опроса событий OpenGL
свернуть ветку
мот ты рисуешь в 2 буфера и не меняешь их? (у тебя там glFlush попробуй SwapBuffers вот только не знаю что там в шарпе на С++ с глутом есть glutSwapBuffers(void))
свернуть ветку
выложи код рисования квадрата и еще чего небуть
и попробуй убрать glLoadIdentity();
вместо него напиши glPushMatrix и в конце 2 раза вынимай
свернуть ветку
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Комментарии (18)
rss свернуть / развернутьсвернуть ветку
Вот предыдущий
то есть что сделал — изменил цфет фона, был белый, стал серый, двигаю мышкой по контролу возвращается белый, еще двигаю возвращается серый, то есть чередуются предыдущий и текущий кадры
свернуть ветку
свернуть ветку
свернуть ветку
private void Draw()
{
Gl.glClearColor((float)backgrR/255, (float)backgrG/255, (float)backgrB/255, 1);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glTranslatef(0, 0, -3);
Gl.glPushMatrix();
Gl.glColor3f((float)fR/255, (float)fG/255, (float)fB/255);
switch (comboBox1.Text)
{
case «Треугольник»:
{
DrawTriangle();
break;
}
case «Квадрат»:
{
DrawQuad();
break;
}
case «Круг»:
{
DrawСircle();
break;
}
case «Ромб»:
{
DrawDiamond();
break;
}
case «Шестигранник»:
{
DrawHexagon();
break;
}
default:
{
return;
}
}
Gl.glPopMatrix();
Gl.glFlush();
AnT.Invalidate();
}
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
и попробуй убрать glLoadIdentity();
вместо него напиши glPushMatrix и в конце 2 раза вынимай
свернуть ветку