Тормозит при малом количестве объектов???
И снова добрый вечер) в этот раз проблема является производительности, неизвестно по каким причинам, при более 1 объекта (простейшего, к прим. куб) в сцене, увеличивается нагрузка на цп. Вот рисую 10 текстурированных кубиков и тормозит очень сильно =(
[spoiler]
Собственно весь код :
если надо, могу выложить исходник =)
[spoiler]
Собственно весь код :
|
если надо, могу выложить исходник =)
Вам нужно создать дисплейный список (единожды), а потом вызывать его (будите вызывать отрисовку вашего бокса прямо из кеша видеоадаптера).
— в главе 13 как раз используется дисплейный список для визуализации 3d модели.
Еще можете глянуться в 7 главу красной книги ()
А вот интересно, а как реализовать fps?
Вот ссылка
public void BuildLists(int x)
{
this.top = this.box + 1;
Gl.glNewList(this.top, Gl.GL_COMPILE);
float quad_size = 1;
//Сетка как в 3дМаксе
Gl.glBegin(Gl.GL_LINES);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE, MatrixOXOYColor);
for (int ax = -(x / 2); ax < (x / 2) + 1; ax++)
{
Gl.glVertex3d(quad_size * ax, 0, 0 - (x / 2));
Gl.glVertex3d(quad_size * ax, 0, quad_size * (x / 2));
}
for (int bx = -(x / 2); bx < (x / 2) + 1; bx++)
{
Gl.glVertex3d(0 - (x / 2), 0, quad_size * bx);
Gl.glVertex3d(quad_size * (x / 2), 0, quad_size * bx);
}
Gl.glEnd();
Gl.glEndList();
// включаем режим текстурирования
Gl.glEnable(Gl.GL_TEXTURE_2D);
this.box = Gl.glGenLists(2); // Generate 2 Different Lists
Gl.glNewList(this.box, Gl.GL_COMPILE); // Start With The Box List
// включаем режим текстурирования , указывая индификатор mGlTextureObject
Gl.glBindTexture(Gl.GL_TEXTURE_2D, loadTexture("C:/Users/Kiira/Desktop/export/Crate.jpg"));
Gl.glBegin(Gl.GL_QUADS);
// Bottom Face
Gl.glNormal3f(0.0f, -1.0f, 0.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
// Front Face
Gl.glNormal3f(0.0f, 0.0f, 1.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
Gl.glNormal3f(0.0f, 0.0f, -1.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f);
// Right face
Gl.glNormal3f(1.0f, 0.0f, 0.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(1.0f, -1.0f, -1.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(1.0f, -1.0f, 1.0f);
// Left Face
Gl.glNormal3f(-1.0f, 0.0f, 0.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(-1.0f, -1.0f, -1.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(-1.0f, -1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f);
// Top Face
Gl.glNormal3f(0.0f, 1.0f, 0.0f);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(-1.0f, 1.0f, -1.0f);
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(-1.0f, 1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(1.0f, 1.0f, 1.0f);
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(1.0f, 1.0f, -1.0f);
Gl.glEnd();
Gl.glEndList();
//Gl.glDisable(Gl.GL_TEXTURE_2D);
}
Загляните вот в этот урок
Ваша ошибка основная ошибка состоит в том, что вы создаёте динамически каждый раз новые объекты Box, да ещё и в цикле.
Нужно вынести создание объекта из цикла.
а… гляжу уже был совет такой 8)