Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Плмогите с рисованием в OpenGL


Автор: Ferrum 16.11.2006, 22:42
Я только начал кодить на OpenGl и сталкнулся с поблнмой, что рисуется довольно медленно

Вот мой код: (рисование модели)

glBegin(GL_TRIANGLES);
    for (int i = 0; i < CurrentModel->FacesNumber; i++){        
        for (int j = 0; j < 3; j++){            
            switch (j){
                case 0:{
                        if (CurrentModel->TVertsNumber != 0)
                        {                            
                            Temp2 = CurrentModel->MeshMapCoord1[i];
                        }
                        Temp = CurrentModel->MeshFaces1[i];    
                        break;
                       };
                case 1:{
                        if (CurrentModel->TVertsNumber != 0)
                        {                            
                            Temp2 = CurrentModel->MeshMapCoord2[i];
                        }
                        Temp = CurrentModel->MeshFaces2[i];    
                        break;
                       };
                case 2:{
                        if (CurrentModel->TVertsNumber != 0)
                        {                            
                            Temp2 = CurrentModel->MeshMapCoord3[i];
                        }
                        Temp = CurrentModel->MeshFaces3[i];    
                        break;
                       };
            }    
            if (CurrentModel->TVertsNumber != 0)
            {
                glTexCoord2f(CurrentModel->MeshTVertsPointX[Temp2], CurrentModel->MeshTVertsPointY[Temp2]);                        
            }            
        
            glNormal3f(CurrentModel->MeshNormalsPointX[Temp], CurrentModel->MeshNormalsPointY[Temp], CurrentModel->MeshNormalsPointZ[Temp]);    
            glVertex3f(CurrentModel->MeshVertsPointX[Temp] * ScaleX, CurrentModel->MeshVertsPointY[Temp] * ScaleY, CurrentModel->MeshVertsPointZ[Temp] * ScaleZ);                
        }
    }
    glEnd();

Класс модели:

class TModel{
    public:
        bool  MTLWith;
        bool  BitMapWith;        
        float Shininess;
        float MaterialAmbient[4];
        float MaterialDiffuse[4];
        float MaterialSpecular[4];        
        float *MeshVertsPointX;
        float *MeshVertsPointY;
        float *MeshVertsPointZ;
        float *MeshNormalsPointX;
        float *MeshNormalsPointY;
        float *MeshNormalsPointZ;
        float *MeshTVertsPointX;        
        float *MeshTVertsPointY;        
        int   *MeshFaces1;
        int   *MeshFaces2;
        int   *MeshFaces3;
        int   *MeshMapCoord1;
        int   *MeshMapCoord2;
        int   *MeshMapCoord3;
        int   FacesNumber;
        int   VertsNumber;
        int   TVertsNumber;        
    };


как его можно оптимизировать?(желательно с кодом)  Я прочитал про VBO, но реализовать не смог....
Какое расширение нужно подключать для работы с VBO?

Автор: Arks 6.12.2006, 22:36
Для начала используй дисплейные списки или массивы вершин (glVertexPointer, glTexcoordPointer, glNormalPointer).
С VBO сам маялся долго, не работает. Временно забил не него, но если интересуешься поищи уроки NeHe, погугли. Там есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)