Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстродействие программ OpenGL 
:(
    Опции темы
dandy77
Дата 1.10.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



Кто мне объяснит? Рисую полигоны 6 на 6 в виде пола, домик 2 на 1 полигон. Пытаюсь перемещаться клавишами вперед- назад, влево- вправо- у меня на компьютере 2,2 Гг Пентиум 256 Мб видео- 1000 кадров в секунду (я поставил подсчет кадров), кроме того на клавши вперд- назад у меня есть sin, cos для выяснения позиции, куда перемещаться. На компьютере 2,5 Целерон 64 Мб видео- 100 кадров в секунду и тормозит при этом немного. Пробую вобще на слабеньком 233 Мг Пентиуме 3-10 кадров в секунду- тормозит до невозможности. И казалось бы простая программуля всего- то пару полигонов прорисовываеться в цикле (координаты полигонов взяты из текстового файла, он грузиться перед началом работы программы), а тормозит на других компьютерах. В чем дело? Вот код функции рисования:
Код

int DrawGLScene(GLvoid)                                
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
    glLoadIdentity();                        

    glTranslatef(0.0f,0.0f,-1.0f);                    
//======================================
    CalculateFrameRate();    
    glDisable(GL_TEXTURE_2D);
    glColor3ub(255,255,0);
    glRasterPos2f(-0.51f, 0.36f);
    glPrint("FPS %5.2f",FPS);
    glEnable(GL_TEXTURE_2D);
    //glColor3ub(255,255,255);

//==================================================
//Перемещаем вид
    glTranslatef(0.0f,0.0f,1.0f);                    
    GLfloat x_m, y_m, z_m, u_m, v_m;
    GLfloat xtrans = -xpos;
    GLfloat ztrans = -zpos;
    GLfloat ytrans = -walkbias-0.25f;
    GLfloat sceneroty = 360.0f - yrot;

    int numtriangles;

    glRotatef(lookupdown,1.0f,0,0);
    glRotatef(sceneroty,0,1.0f,0);

        
    glTranslatef(xtrans, -0.5, ztrans);
    //glTranslatef(xtrans, ytrans, ztrans);

//================================================    
//Рисуем пол    

    
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    

    numtriangles = sector1.numtriangles;
    
    // Process Each Triangle
    for (int loop_m = 0; loop_m < numtriangles; loop_m++)
    {
            glBegin(GL_QUADS);
        
            glNormal3f( 0.0f, 0.0f, 1.0f);
        
            //glColor4f(1.0f,0.0f,0.0f,1.0f);
            x_m = sector1.triangle[loop_m].vertex[0].x;
            y_m = sector1.triangle[loop_m].vertex[0].y;
            z_m = sector1.triangle[loop_m].vertex[0].z;
            u_m = sector1.triangle[loop_m].vertex[0].u;
            v_m = sector1.triangle[loop_m].vertex[0].v;
            glTexCoord2f(u_m,v_m); 
            glVertex3f(x_m,y_m,z_m);
            
            //glColor4f(0.0f,1.0f,0.0f,1.0f);
            x_m = sector1.triangle[loop_m].vertex[1].x;
            y_m = sector1.triangle[loop_m].vertex[1].y;
            z_m = sector1.triangle[loop_m].vertex[1].z;
            u_m = sector1.triangle[loop_m].vertex[1].u;
            v_m = sector1.triangle[loop_m].vertex[1].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);
            
            
            //glColor4f(0.0f,0.0f,1.0f,1.0f);
            x_m = sector1.triangle[loop_m].vertex[2].x;
            y_m = sector1.triangle[loop_m].vertex[2].y;
            z_m = sector1.triangle[loop_m].vertex[2].z;
            u_m = sector1.triangle[loop_m].vertex[2].u;
            v_m = sector1.triangle[loop_m].vertex[2].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);

            //glColor4f(1.0f,1.0f,1.0f,1.0f);
            x_m = sector1.triangle[loop_m].vertex[3].x;
            y_m = sector1.triangle[loop_m].vertex[3].y;
            z_m = sector1.triangle[loop_m].vertex[3].z;
            u_m = sector1.triangle[loop_m].vertex[3].u;
            v_m = sector1.triangle[loop_m].vertex[3].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);


        glEnd();

    }
//================================================
//Рисуем домик

    int numtexthouse;


    glBindTexture(GL_TEXTURE_2D, texture[1]);

    numtexthouse = sector2.numtriangles;
    
    // Process Each Triangle
    for (loop_m = 0; loop_m < numtexthouse; loop_m++)
    {
            glBegin(GL_QUADS);
        
            x_m = sector2.triangle[loop_m].vertex[0].x;
            y_m = sector2.triangle[loop_m].vertex[0].y;
            z_m = sector2.triangle[loop_m].vertex[0].z;
            u_m = sector2.triangle[loop_m].vertex[0].u;
            v_m = sector2.triangle[loop_m].vertex[0].v;
            glTexCoord2f(u_m,v_m); 
            glVertex3f(x_m,y_m,z_m);
            
            x_m = sector2.triangle[loop_m].vertex[1].x;
            y_m = sector2.triangle[loop_m].vertex[1].y;
            z_m = sector2.triangle[loop_m].vertex[1].z;
            u_m = sector2.triangle[loop_m].vertex[1].u;
            v_m = sector2.triangle[loop_m].vertex[1].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);
            
            
            x_m = sector2.triangle[loop_m].vertex[2].x;
            y_m = sector2.triangle[loop_m].vertex[2].y;
            z_m = sector2.triangle[loop_m].vertex[2].z;
            u_m = sector2.triangle[loop_m].vertex[2].u;
            v_m = sector2.triangle[loop_m].vertex[2].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);


            x_m = sector2.triangle[loop_m].vertex[3].x;
            y_m = sector2.triangle[loop_m].vertex[3].y;
            z_m = sector2.triangle[loop_m].vertex[3].z;
            u_m = sector2.triangle[loop_m].vertex[3].u;
            v_m = sector2.triangle[loop_m].vertex[3].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);


        glEnd();

    }
//===============================================
    //Рисуем дерево из двух одинаковых текстур перехрещеных под 90 градусов

    glBindTexture(GL_TEXTURE_2D,texName);
    
    glPushMatrix();
    
    glTranslatef(5.5, 0, 0.5);

    glRotatef(45,0.0,1.0,0.0);

    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    
    glCallList(listNum);

    
    //Позиционируем вторую половину дерева и рисуем ее
    glRotatef(-90,0.0,1.0,0.0);

    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    
    glCallList(listNum);

    
    glPopMatrix();

    return TRUE;                                        // Everything Went OK
}

PM MAIL   Вверх
Rickert
Дата 2.10.2008, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Во-первых вы выводите информацию через glBegin/glEnd - это самый затратный способ. Смотри описание glDrawArray.
Во-вторых: зачем вы перед каждым вызовом присваиваете переменным значения из класса? Разве нельзя просто их подставить? Это я про эти строки:
Код
            x_m = sector2.triangle[loop_m].vertex[2].x;
            y_m = sector2.triangle[loop_m].vertex[2].y;
            z_m = sector2.triangle[loop_m].vertex[2].z;
            u_m = sector2.triangle[loop_m].vertex[2].u;
            v_m = sector2.triangle[loop_m].vertex[2].v;
            glTexCoord2f(u_m,v_m);
            glVertex3f(x_m,y_m,z_m);

Не мудренно что тормозит.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
dandy77
Дата 8.10.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



Спасибо за совет, обязательно попробую.



Это сообщение отредактировал(а) dandy77 - 8.10.2008, 19:06
PM MAIL   Вверх
Buter-Brod
Дата 24.10.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Помогло? Интересуюсь, потому что сам inline-функций наделал и define-ов, только чтобы вывод "облегчить", избавив от вызовов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.