Уголок tool-программистов
GameDev.ru / Сообщества / Уголок tool-программ / Форум / [Конкурс] Создаем генератор процедурных текстур (комментарии)

[Конкурс] Создаем генератор процедурных текстур (комментарии)

Страницы: 1 2 Следующая »
MikleМодераторwww14 сен. 200715:14#0
[Конкурс] Создаем генератор процедурных текстур (комментарии)

Это сообщение сгенерировано автоматически.

MikleМодераторwww14 сен. 200715:14#1
Вот и моя статейка :)
Я не стал вставлять в статью картинки, все равно они из качалки скоро уйдут, а тут для каждого изображения приведен исходный текст, читатель легко сможет их воспроизвести. Но, если нужно, обещаю сделать :)
T.o.LНовичокwww16 сен. 200720:37#2
Посмтрел. Покрутил-повертел.
Мне очень понравилсь.
Концепция реализована очень хорошо. И примеры очень подходящие.
ArxonПостоялецwww18 сен. 200721:42#3
Чтото у меня не запустилось :( WinXP даже библиотечку скачал но не помогло :( просит ее и все
Хотя на другом компе все ок. %)
И странно что максимальный размер текстуры 1024, больше вообще никак ?
Ну а теперь о важном.
1)Не нравится конструкция TF.Init .... , CntF, CntGray, CntRGB, CntRGBA
даеш именование каждому изображению типа create MyImage F
2)не стоит работать с int цветом от него слишком много проблем, память жалеть это не наш путь в данном случае, пусть все будет во float !
&H7080FF, &HFFFFFF - вот такого точно ненадо !
3)СТАТВЬ ЦЕЛЬ ГЕНЕРИТЬ diffuse, specular,normal,height, emit, так как для сегодняшних технологий именно они нужны,
а получить итоговое изображение по этим картам очень просто.
И ПОМНИ ! Путь генерации освещенных текстур порочный путь !
ЗЫ Генератор понравился :)
Надеюсь на скорый переход генератора опен сорц, тем более что опенсорсные аналоги уже есть
ArxonПостоялецwww18 сен. 200721:57#4
Mikle,
И еше, бросай ты этот VB ради самого себя, геймдева, и других людей ;)
Ведь для
>физики, всевозможной эмуляции и генерации
лучше C++ ничего нету :)
а особенно для генераторов текстур
MikleМодераторwww19 сен. 200711:54#5
Arxon

>даеш именование каждому изображению типа create MyImage F
Были планы со временем перейти на такой вариант.

>не стоит работать с int цветом
Я и так почти всю работу веду с Float, но Int все-таки нужен для формирования результирующих изображений.

>&H7080FF, &HFFFFFF - вот такого точно ненадо !
Пока использую VBScript, будет так, но в планах есть сделать свой интерпретатор скриптов. Хотя уже сейчас несложно ввести ф-цию ARGB(a, r, g, b).

>СТАТВЬ ЦЕЛЬ ГЕНЕРИТЬ diffuse, specular,normal,height, emit,
Такая цель и стоит height есть уже сейчас - это Float, normal тоже есть, просто в статье это не описано.

>И ПОМНИ ! Путь генерации освещенных текстур порочный путь !
Я в курсе, но это, во-первых, применимо для Low Detail, во-вторых наглядно, поэтому большая часть примеров применяет освещение.

>деюсь на скорый переход генератора опен сорц
Я сорцы не скрываю, если надо - могу выложить.

>И еше, бросай ты этот VB ради самого себя, геймдева, и других людей
>Ведь для
>физики, всевозможной эмуляции и генерации
>лучше C++ ничего нету :)
>а особенно для генераторов текстур
Допускаю, но для удобства быстрого воплощения мысли я лучше VB ничего не вижу (может, разве что, шарп, но тут проблема совместимости встанет). А на VB6 проблем этих нет, библиотеку просит потому, что ее нужно регистрировать в системе с помощью regsvr32, и просить перестанет. А вообще я планирую отказаться от библиотек вообще, напишу свой диалог загрузки-сохранения файла, раз даже MSCommonDialog не является стандартом.
Единственное, что я на VB6 потерял - это процентов 30 скорости, как показывают измерения.

gammakerПостоялецwww28 сен. 201318:55#6
Я так и не понял, как работает дифференцирование.

>(Src(x + 1, y) – Src(x – 1, y)) / 2
Не вижу использования dX и dY. И почему делится на 2? И вообще на что надо делить? Ведь приращение можно измерять в разных единицах: в пикселях, в текстурных координатах от 0.0 до 1.0, или ещё с каким-то коэффициентом.
Кстати, а ведь это наверное можно и через фильтр свёртки сделать?

>Можно сделать еще один вариант фильтра для дифференцирования, вместо того, чтобы суммировать дифференциалы по осям с коэффициентами, можно вычислять корень из суммы их квадратов без всяких коэффициентов.
И это тоже можно показать в виде формулы?

MikleМодераторwww28 сен. 201321:15#7
gammaker
> Не вижу использования dX и dY
Мы берём разницу между левым (x – 1) и правым (x + 1). Расстояние между ними 2 пикселя, поэтому делим на 2 (это и есть dX), чтобы получить приращение на 1 пиксель.
Вообще-то, делить не обязательно, просто получим результат в 2 раза больше, у себя я и не делю, в статью написал для математической точности, чтобы не придирались.
Вот сама процедура:
Public Sub Diff(ByVal IndexDest As Long, ByVal IndexSrc As Long, ByVal dX As Single, ByVal dY As Single)
  Dim x As Long, y As Long

  dX = dX * ArSize
  dY = dY * ArSize
  For y = 0 To MaxXY
    For x = 0 To MaxXY
      ArDest(x, y) = (ArSrc(x, (y + 1) And MaxXY) - ArSrc(x, (y - 1) And MaxXY)) * dY + (ArSrc((x + 1) And MaxXY, y) - ArSrc((x - 1) And MaxXY, y)) * dX
    Next x
  Next y
End Sub

Вот процедура DiffFree:

Public Sub DiffFree(ByVal IndexDest As Long, ByVal IndexSrc As Long)
  Dim x As Long, y As Long, dX As Single, dY As Single

  For y = 0 To MaxXY
    For x = 0 To MaxXY
      dX = (ArSrc(x, (y + 1) And MaxXY) - ArSrc(x, (y - 1) And MaxXY)) * ArSize
      dY = (ArSrc((x + 1) And MaxXY, y) - ArSrc((x - 1) And MaxXY, y)) * ArSize
      ArDest(x, y) = Sqr(dX * dX + dY * dY)
    Next x
  Next y
End Sub
Тут ArSize - размер массива, например 512, MaxXY = ArSize - 1, то есть 511.

gammakerПостоялецwww28 сен. 201322:38#8
Mikle
> ArDest(x, y) = (ArSrc(x, (y + 1) And MaxXY) - ArSrc(x, (y - 1) And MaxXY)) * dY
> + (ArSrc((x + 1) And MaxXY, y) - ArSrc((x - 1) And MaxXY, y)) * dX
А, кажется понял. Это производная по направлению - скалярное произведение градиента на вектор направления? Только тут вектор направления не нормируется, как нас учили на матане. Ну и в данном случае его ещё надо поделить на 2. Кстати, зачем брать левую точку, почему нельзя взять точку в центре и справа? Тогда центральная точка будет учитываться 2 раза, и можно сэкономить на одном чтении из массива. И будет математически корректно без деления на 2.

Mikle
> ArDest(x, y) = Sqr(dX * dX + dY * dY)
Что-то не помню, чтобы на матане нас такому учили. Сам придумал, или всё-таки это где-то есть? Кстати dX и dY случаем местами не перепутал? На результат это конечно всё равно не повлияет... И почему приращения функции называются так же, как и приращение аргумента?

MikleМодераторwww29 сен. 20139:23#9
gammaker
> Кстати, зачем брать левую точку, почему нельзя взять точку в центре и справа?
Потому, что там получим производную для точки на полпикселя правее, чем нужно.
gammaker
> Кстати dX и dY случаем местами не перепутал? На результат это конечно всё равно
> не повлияет... И почему приращения функции называются так же, как и приращение
> аргумента?
dX и dY - это преращения аргументов. Двумерный массив можно считать функцией двух аргументов.
gammakerПостоялецwww29 сен. 201311:53#10
Mikle
> Потому, что там получим производную для точки на полпикселя правее, чем нужно.
А что в этом страшного? Результат сильно поменяется что ли? Чем меньше приращение, тем точнее же будет производная.

Mikle
> dX и dY - это преращения аргументов. Двумерный массив можно считать функцией
> двух аргументов.
В Diff я вижу, что это так. Но в DiffFree ты записываешь в dY приращение массива по X, а в dX приращение массива по Y. Не вижу никакой логики в названиях dX и dY здесь.

MikleМодераторwww29 сен. 201312:02#11
gammaker
> в DiffFree ты записываешь в dY приращение массива по X, а в dX приращение
> массива по Y
Ооо... это ошибка :) хотя она ничего не меняет в результате.
RadianTORПостоялецwww8 дек. 201423:14#12
Mikle
>[b]Arxon[/b]
> И странно что максимальный размер текстуры 1024, больше вообще никак ?
чета ответа не нашел. Больше 1024х1024 нельзя?
MikleМодераторwww9 дек. 20149:48#13
Перезалил:
http://mikle.ucoz.com/load/0-0-0-12-20
Теперь можно до 4096*4096, так же поправил ReadMe.
RadianTORПостоялецwww9 дек. 201410:00#14
Mikle
Оперативно :)
Отлично! Спасибо.
Страницы: 1 2 Следующая »

/ Форум / Уголок tool-программистов

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр