Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 18:15   #1
Arigat0
Новичок
Джуниор
 
Регистрация: 27.02.2012
Сообщений: 2
По умолчанию Отрисовка динамической сцены

Пробую OpenGL, ради интереса. Решил попробовать порисовать фигуры их перемещение, с изменением формы. Единственное, не понимаю, почему не происходит перерисовка, т.к. рисует либо вооще только начальную фигуру, либо вообще отрисует один шаг, хотя их 15... Нужен совет/помощь
И еще вопрос: как сделать таймер, чтобы отрисовка шла через каждые, скажем, полтары секунды, т.к. через Sleep(1500) чувствуются "подвисания" приложения?

Код:
const int width=800, height=800; //Задаем ширину и высоту окна
//Отрисовка многоугольника
void DrawPolygon(float X[], float Y[], float dX[], float dY[])
{
    int k;
    glBegin(GL_LINE_LOOP);        
        glColor3f(0.0f, 1.0f, 0.0f);
        for(k=0;k<5;k++)
          glVertex2f(X[k]+dX[k], Y[k]+dY[k]);   
         //   glVertex2f(X[1]+dX[1], Y[1]+dY[1]);
         //   glVertex2f(X[2]+dX[2], Y[2]+dY[2]);
         //   glVertex2f(X[3]+dX[3], Y[3]+dY[3]);
     //   glVertex2f(X[4]+dX[4], Y[4]+dY[4]);
    glEnd();
}
void display() 
{
    static int i,j;
    static float deltaX[5],deltaY[5];
    static float StartX[5]={-4.5, -4.5, -3.0, -3.0, -3.0};
    static float StartY[5]={-0.5,  1.0,  1.0,  1.0, -0.5};
    static float EndX[5]={ 2.9,  2.5,  3.7,  4.9,  4.5};
    static float EndY[5]={-0.8,  0.6,  1.3,  0.6, -0.8};
    //до границы
    for(i=0;i<15;i++)
    {
        glFlush();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        DrawPolygon(StartX,StartY,deltaX,deltaY);
        for(j=0;j<5;j++)
        {
            deltaX[j]=(EndX[5-j]-StartX[j])/15;
            deltaX[j]=(EndY[5-j]-StartY[j])/15;
        }
	glutPostRedisplay();
    }
}
int main(int argc, char** argv) 
{
    glutInit(&argc, argv);                    
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(width,height);           
    glutInitWindowPosition(0,0);                 
    glutCreateWindow("OpenGL Test"); 
    glOrtho(-5.0, 5.0, -5.0, 5.0, -1, 1);          
    glutDisplayFunc(display);                    
    glutMainLoop();                            
    return 0;
}
Arigat0 вне форума Ответить с цитированием
Старый 27.02.2012, 20:42   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

читает про glut то сначало, а не тыркаемся вслепую.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Растягивание сцены в GLSceneViewer SalasAndriy Мультимедиа в Delphi 0 03.12.2010 20:29
Отрисовка сцены на форме Lawliet32 Общие вопросы C/C++ 0 12.10.2010 16:29
Музыканты демо-сцены VanHelsing Свободное общение 0 23.05.2010 00:23
OpenGL.Нормально отображение сцены (масштаб)? spamer Мультимедиа в Delphi 0 01.03.2010 01:25
Вызов рисующих методов сцены из подпрограммы. jojahti Общие вопросы C/C++ 6 20.08.2009 11:50