Перехватить координаты до отрисовки

Тема в разделе "WASM.GRAPHICS", создана пользователем aaleksander, 17 сен 2004.

  1. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    Хочу написать небольшой эффект типа волн (больших, океанических). Проблемма в том, что вершин в решетке очень много и рассчитываются они очень долго. Так же долго считаются нормали и потом еще все это очень долго отрисовывается :). Есть идея отрисовывать полигоны от камеры к горизонту, чтобы отсекат лишнее по принципу воксельных ландшафтов. Как можно определить координаты полигона еще до того, как они будут выведены на экран? Спасибо за внимание.
     
  2. xzazet

    xzazet New Member

    Публикаций:
    0
    Регистрация:
    25 июл 2003
    Сообщения:
    41
    погугли hidden surface removal heightmap
     
  3. _DEN_

    _DEN_ DEN

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



    Я думаю достаточно разбить ландшафт на секторы и определять какие из секторов мы видим. Не забываем про VBO. А водичку можно на вершинном шейдере посчитать. Проблемм не вижу.
     
  4. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    Вершинными шейдерами неинтересно (они у меня не поддерживаются и я не знаю как с ними работать :) Кроме того, хочется сделать что-нибудь такое, что еще никто не видел B-)
     
  5. _DEN_

    _DEN_ DEN

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

    хочется сделать что-нибудь такое, что еще никто не видел



    Без шейдеров публику уже не удивить :)



    Определяешь видимые сегменты, и пересчитываешь их на CPU. Все просто. Скажем по формуле:



    z(x,y,t) = sin(x+t)+cos(y+t)



    Это примитив конечно, но добавить сюда еще пару синусов-косинусов и суперпозиций и будет тебе вполне приличная вода. Еще добавь отражение и преломление.
     
  6. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    "z(x,y,t) = sin(x+t)+cos(y+t)" У меня так и сделано, картина называется "Мужики вывозят сено с полей" :).

    А что такое суперпозиция?
     
  7. _DEN_

    _DEN_ DEN

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


    Хе-хе... Сильно! Я долго смеялся :)))

    Я бы еще назвал "бурундуки во ржи ползут на северо-запад" :)





    Функция внутри функции. Например f(g(x)).



    Например...



    z(x,y,t) = sin(x*cos(t+y)+y+t) + cos(x+y*sin(t+x)+t)



    Ну и если дать 3-4 вложенности синусов-косинусов то водичка будет очень даже ничего. Полезно поиграться с коэффициентами. Например:



    z(x,y,t) = sin(A*x*cos(B*t+C*y)+D*y+E*t) + cos(F*x+G*y*sin(H*t+I*x)+J*t)



    Проблемма тут будет только в скорости :)
     
  8. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    Это все циклично и потому скучно (и еще действительно медленно). Я делаю что-то похожее на seastorm3D, где-то тут ссылка пробегала. Пока делаю на основе графа с "резиновыми" ребрами. Преимущество в том, что можно делать смещения не только по Y, но и по X с Y-ком, плюс красиво волнуется текстура.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Так ведь никто не мешает по-разному двигать вертексы и текстуры.



    Я всегда был приверженцем аналитических формул а не численных методов. Аналитическая запись... она... не знаю как сказать... Для меня численный метод и аналитическая запись как буфетчица и стриптизерша :)



    Вобщем... Способов-то куча. Советую почитать статью с www.gamedev.ru раздел "Графика" статья "Физическое моделирование воды" + посмотри пример к ней.
     
  10. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Попробуй feedback буффер. Я не разбирался, но по идее это оно...