программирование демок без dx/ogl

Тема в разделе "WASM.GRAPHICS", создана пользователем varnie, 1 фев 2005.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан


    Ну почему же :) Вот, первый разв жизни плазму написал :)





    Скажи спасибо ATi :) Можно добавить принудительно выставление синхры, но это когда из универа вернусь.





    В том-то и дело что это не надо. Мозг всеравно не отличит :)







    Оптимизируем главный цикл и все. Раз в 10 производительность вполне реально поднять.



    "CPU suxxx"

    Этого я не говорил! :)



    Ладно, я убегаю. Закрою сессию, напьюсь, протрезвею и продолжим! :))
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    _DEN_ >




    У меня в настройках выбрано: "включено по умолчанию"



    >




    Я прекрасно различаю квадраты.



    >




    Чрезмерный оптимизм у вас батенька:
    Код (Text):
    1.     TIMING_START
    2.     float t=float(timeGetTime()-start)/1000.0f;
    3.     for(int i=0,n=0;i<GRID_Y;i++)
    4.       for(int j=0;j<GRID_X;j++)
    5.       {
    6.         float x=float(j)/GRID_X;
    7.         float y=float(i)/GRID_Y;
    8.         float a1=8*sin(2*x+t);
    9.         float a2=7*cos(2*x+t);
    10.         float a3=6*sin(2*x+t);
    11.         Color[n++]=127*fabs(sin(a1*x+t-5*sin(t)/3)+cos(a1*y-t+8*sin(t)/6));
    12.         Color[n++]=127*fabs(cos(a2*x-t+4*sin(t)/4)+sin(a2*y+t-7*sin(t)/7));
    13.         Color[n++]=127*fabs(sin(a3*x+t-3*sin(t)/5)+cos(a3*y-t+6*sin(t)/8));
    14.       }
    15.     TIMING_END("calc ");
    16.     {
    17.     TIMING_START
    18.     glDrawElements(GL_QUADS,(GRID_X-1)*(GRID_Y-1)*4,GL_UNSIGNED_INT,Index) ;
    19.     TIMING_END("draw ");
    20.     }{
    21.     TIMING_START
    22.     SwapBuffers(hDC);
    23.     TIMING_END("swap ");
    24.     }


    Вот фрагмент лога (микросекунды)



    calc 2162

    draw 49798

    swap 1888

    calc 2165

    draw 47754

    swap 1888



    Видно, что всё время тратится в glDrawElements()



    Если же оптимизировать
    , то можно уложиться в сравнимое с calc время, но вычислять цветовые компоненты для каждой точки. При этом glDrawElements() не нужен совсем!!!
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    S_T_A_S_

    Я закрыл сессию, […]!!! :))))



    Первый пункт выполнен. Плавно перехожу ко второму :)))







    Два раза скажи спасибо ATi :))) У тебя какая видяха?







    Хорошо, увеличь #define GRID_XXX до 128.







    Нормальный оптимизм :) Во-первых, код СЛИШКОМ избыточен, во-вторых, его не обязательно оставлять именно таким. 10-ти кратное увеличение скорости вполне реально.







    Пойми главное приемущество плазмы: все контуры нечеткие, везде плавные переходы. Каждый пиксель считать не надо. Сетки + Фонга хватит вполне.



    Итак, что на очереди? 3D tunnel без 3D? Или сразу RTRT на OpenGL? Я ведь еще тот извращенец :))
     
  4. ozzman

    ozzman New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2004
    Сообщения:
    56
    _DEN_

    Любопытно было бы увидеть рейтрейсер в твоем исполнении :)

    Можно ограничиться простым диффузным освещением.
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    _DEN_ >




    R8500. Я не вижу проблем в других местах.



    >




    Ну и что? я только буду немного хуже их различать =)



    >




    похоже ты уже начал пить =)

    ещё раз:



    "цикл" - 2162 мкс

    glDrawElements() - 49798 мкс



    если уменьшить время расчётов в 10 раз, общая скорость практически не изменится.



    если же делать #define GRID_XXX 128 то время цикла увеличивается в 4 раза, а glDrawElements() - до ~72000 мкс :-/



    >




    надо - не надо -- это другой разговор.

    я говорю, что таким образом можно glDrawElements() убрать совсем и выиграть в скорости.



    >




    Да, делай RTRT. Потом ускорим это в NN раз отказавшись от OGL, и отправим в nVidia мыло с угрозой выложить это дело opensource =)))))
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    По заказу трудящихся :)



    Дамы и господа, сэр Элтон Джон!... Тоесть RTRT на OpenGL :)))



    8 шаров, 3 источника света, diffuse, specular. У меня идет гладенько. Если же поставить

    #define GRID_X 128

    #define GRID_Y 128

    Вместо 64 то начинает подтормаживать :)



    Раз уж страдать фигней, то и отражение можно впихнуть :)



    PS: За кривизну кода строго не судите, писалось на скорую руку, для развлекухи :))

    [​IMG] _935724206__OpenRT.rar
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    _DEN_



    Прицепи экзешник или лучше makefile
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
  9. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    2den:

    а у меня LCC32 си-компилер не врубается в эту твою строчку:
    Код (Text):
    1. Vertex=new float[GRID_X*GRID_Y*2];
    2.  


    блин, как бы это ему растолковать?
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    varnie





    float* Vertex=new float[8192];



    Тоесть посчитали GRID_X*GRID_Y*2 и вписали вручную. Да, и тип Vertex указать надо.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    varnie



    Дык в Си вроде нет new ;)



    решение есть здесь
    Код (Text):
    1. static float Vertex[GRID_X*GRID_Y*2];
    2. static float Color[1000*GRID_X*GRID_Y*3];
    3. static float Index[(GRID_X-1)*(GRID_Y-1)*4];


    хотя не факт, что этого хватит, есть ещё циклы.