Ну почему же Вот, первый разв жизни плазму написал Скажи спасибо ATi Можно добавить принудительно выставление синхры, но это когда из универа вернусь. В том-то и дело что это не надо. Мозг всеравно не отличит Оптимизируем главный цикл и все. Раз в 10 производительность вполне реально поднять. "CPU suxxx" Этого я не говорил! Ладно, я убегаю. Закрою сессию, напьюсь, протрезвею и продолжим! )
_DEN_ > У меня в настройках выбрано: "включено по умолчанию" > Я прекрасно различаю квадраты. > Чрезмерный оптимизм у вас батенька: Код (Text): TIMING_START float t=float(timeGetTime()-start)/1000.0f; for(int i=0,n=0;i<GRID_Y;i++) for(int j=0;j<GRID_X;j++) { float x=float(j)/GRID_X; float y=float(i)/GRID_Y; float a1=8*sin(2*x+t); float a2=7*cos(2*x+t); float a3=6*sin(2*x+t); Color[n++]=127*fabs(sin(a1*x+t-5*sin(t)/3)+cos(a1*y-t+8*sin(t)/6)); Color[n++]=127*fabs(cos(a2*x-t+4*sin(t)/4)+sin(a2*y+t-7*sin(t)/7)); Color[n++]=127*fabs(sin(a3*x+t-3*sin(t)/5)+cos(a3*y-t+6*sin(t)/8)); } TIMING_END("calc "); { TIMING_START glDrawElements(GL_QUADS,(GRID_X-1)*(GRID_Y-1)*4,GL_UNSIGNED_INT,Index) ; TIMING_END("draw "); }{ TIMING_START SwapBuffers(hDC); TIMING_END("swap "); } Вот фрагмент лога (микросекунды) calc 2162 draw 49798 swap 1888 calc 2165 draw 47754 swap 1888 Видно, что всё время тратится в glDrawElements() Если же оптимизировать , то можно уложиться в сравнимое с calc время, но вычислять цветовые компоненты для каждой точки. При этом glDrawElements() не нужен совсем!!!
S_T_A_S_ Я закрыл сессию, […]!!! ))) Первый пункт выполнен. Плавно перехожу ко второму )) Два раза скажи спасибо ATi )) У тебя какая видяха? Хорошо, увеличь #define GRID_XXX до 128. Нормальный оптимизм Во-первых, код СЛИШКОМ избыточен, во-вторых, его не обязательно оставлять именно таким. 10-ти кратное увеличение скорости вполне реально. Пойми главное приемущество плазмы: все контуры нечеткие, везде плавные переходы. Каждый пиксель считать не надо. Сетки + Фонга хватит вполне. Итак, что на очереди? 3D tunnel без 3D? Или сразу RTRT на OpenGL? Я ведь еще тот извращенец )
_DEN_ Любопытно было бы увидеть рейтрейсер в твоем исполнении Можно ограничиться простым диффузным освещением.
_DEN_ > R8500. Я не вижу проблем в других местах. > Ну и что? я только буду немного хуже их различать =) > похоже ты уже начал пить =) ещё раз: "цикл" - 2162 мкс glDrawElements() - 49798 мкс если уменьшить время расчётов в 10 раз, общая скорость практически не изменится. если же делать #define GRID_XXX 128 то время цикла увеличивается в 4 раза, а glDrawElements() - до ~72000 мкс :-/ > надо - не надо -- это другой разговор. я говорю, что таким образом можно glDrawElements() убрать совсем и выиграть в скорости. > Да, делай RTRT. Потом ускорим это в NN раз отказавшись от OGL, и отправим в nVidia мыло с угрозой выложить это дело opensource =)))))
По заказу трудящихся Дамы и господа, сэр Элтон Джон!... Тоесть RTRT на OpenGL )) 8 шаров, 3 источника света, diffuse, specular. У меня идет гладенько. Если же поставить #define GRID_X 128 #define GRID_Y 128 Вместо 64 то начинает подтормаживать Раз уж страдать фигней, то и отражение можно впихнуть PS: За кривизну кода строго не судите, писалось на скорую руку, для развлекухи ) _935724206__OpenRT.rar
2den: а у меня LCC32 си-компилер не врубается в эту твою строчку: Код (Text): Vertex=new float[GRID_X*GRID_Y*2]; блин, как бы это ему растолковать?
varnie float* Vertex=new float[8192]; Тоесть посчитали GRID_X*GRID_Y*2 и вписали вручную. Да, и тип Vertex указать надо.
varnie Дык в Си вроде нет new решение есть здесь Код (Text): static float Vertex[GRID_X*GRID_Y*2]; static float Color[1000*GRID_X*GRID_Y*3]; static float Index[(GRID_X-1)*(GRID_Y-1)*4]; хотя не факт, что этого хватит, есть ещё циклы.