12-09-2010, 17:51
|
|
|
חבר מתאריך: 22.08.08
הודעות: 310
|
|
עריכה: כרגיל פרש לא הצליח לסדר אנגלית ועברית ביחד...
מבחינת OpenGL הקוד הזה
קוד PHP:
glBegin(whatever); glVertex(...); ... glVertex(...); glEnd();
זהה לזה
קוד PHP:
glBegin(whatever); for (int i = 0; i < something; i++) glVertex(...); glEnd();
(כאשר glVertexהוא קריאה כלשהיא בין המגוון הרחב של האפשרויות).
זה לא ישנה שום מהירות אם תשחק איתם.
עכשיו לגבי הבעיה האמיתית שלך - glBegin ו glEnd הם ישנים, איטיים ובכלל deprecated מ OpenGL 3.
תשתמש בVertex Arrays, או בעדיפות בעיקר לאובייקטים בעלי מספר גדול של נקודות - Vertex Buffer Object (וזה מכיוון שבVBO המידע נשמר ישירות בזיכרון של הכרטיס מסך).
אם אתה סתם מצייר ריבועים, לדוגמא, אני מניח שVBO רק יאט, אבל לא עשיתי יותר מידי בדיקות אז אתה יכול לנסות.
דוגמא פשוטה לVertex Arrays שמציירת תקסטורה על ריבוע:
קוד PHP:
// note that this uses a screen coordinate system, so y goes downwards instead of upwards void renderQuad (float x, float y, float w, float h, GLuint texture) { float v[8]; float t[8] = {0.0f,1.0f, 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f};
// left top corner v[0] = x; v[1] = y; // left bottom corner v[2] = x; v[3] = y + h; // right bottom corner v[4] = x + w; v[5] = y + h; // right top corner v[6] = x + w; v[7] = y;
// enable GL client states glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D);
// bind texture glActiveTexture(GL_TEXTURE0+0); glBindTexture(GL_TEXTURE_2D, texture);
// set data pointers // each vertex/texcoord is a 2 dimentional vector of floats glVertexPointer(2, GL_FLOAT, 0, v); glTexCoordPointer(2, GL_FLOAT, 0, t);
// draw one quad using 4 vertices glDrawArrays(GL_QUADS, 0, 4);
// disable GL client states glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); }
נערך לאחרונה ע"י Dragonion בתאריך 12-09-2010 בשעה 17:59.
|