Goedendag,
ik kom een snelheidsprobleem tegen bij het schrijven van een openGL app. Ik probeer een soort engine te maken die VMRL files in kan lezen en deze kan weergeven. Dat is mij al gelukt, maar ik zit nu nog met het probleem dat ik niet de volledige snelheid krijg die ik verwachtte.
Ik gebruik een method genaamd draw om mijn object op het scherm te toveren en zo ziet deze eruit:
Hiermee schrijf ik dus de polygonen naar het scherm. De polygoon data bevind zich dus in de volgende vectoren:
vector<float> cord
vector<float> texCord
vector<float> norm
vector<int> cord
vector<int> texCord
vector<int> norm
Het probleem is dat elke draw aanroep ~400ms duurt op een AMD64 2800+, Radeon 9600 256Mb.
Dat is veel te lang en mijn vraag is dan ook, waar ligt dit aan?
(het gaat hier overigens wel om een testobject met 160.000 faces, maar een willekeurige VRML viewer gooit dit met 25+ fps op het scherm!)
De totale polygoondata zal ongeveer 10Mb in beslag nemen, dus datatransfer lijkt mij niet de bottleneck?
Ik ben erg benieuwd waar het aan ligt, alvast bedankt!
ik kom een snelheidsprobleem tegen bij het schrijven van een openGL app. Ik probeer een soort engine te maken die VMRL files in kan lezen en deze kan weergeven. Dat is mij al gelukt, maar ik zit nu nog met het probleem dat ik niet de volledige snelheid krijg die ik verwachtte.
Ik gebruik een method genaamd draw om mijn object op het scherm te toveren en zo ziet deze eruit:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| glLoadIdentity(); glRotatef(rotate,1,1,1); glBegin(GL_TRIANGLES); glColor4f(color[0], color[1], color[2], 1-color[3]); for(int i=0; i<cordInd.size(); i++) { if(!norm.empty() || !normInd.empty()) { glNormal3f(norm[normInd[i]*3], norm[normInd[i]*3+2], norm[normInd[i]*3+1]); } if(!texCord.empty() || !texCordInd.empty()) { glTexCoord2f(texCord[texCordInd[i]*2], texCord[texCordInd[i]*2+1]); } glVertex3f(cord[cordInd[i]*3], cord[cordInd[i]*3+2], cord[cordInd[i]*3+1]); } glEnd(); |
Hiermee schrijf ik dus de polygonen naar het scherm. De polygoon data bevind zich dus in de volgende vectoren:
vector<float> cord
vector<float> texCord
vector<float> norm
vector<int> cord
vector<int> texCord
vector<int> norm
Het probleem is dat elke draw aanroep ~400ms duurt op een AMD64 2800+, Radeon 9600 256Mb.
Dat is veel te lang en mijn vraag is dan ook, waar ligt dit aan?
(het gaat hier overigens wel om een testobject met 160.000 faces, maar een willekeurige VRML viewer gooit dit met 25+ fps op het scherm!)
De totale polygoondata zal ongeveer 10Mb in beslag nemen, dus datatransfer lijkt mij niet de bottleneck?
Ik ben erg benieuwd waar het aan ligt, alvast bedankt!
oprecht vertrouwen wordt nooit geschaad