Шейдеры с нуля

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 09.09.2014 (Вт) 16:40

Кривоус Анатолий писал(а):Я вызвал перед CopyMemory

Так тоже работает, я проверил.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Шейдеры с нуля

Сообщение The trick » 09.09.2014 (Вт) 16:43

Mikle писал(а):Так тоже работает, я проверил.

У меня нет. Сейчас посмотрю в отладчике в чем причина. По идее должен работать.
  1. Каталог из которого загружалось приложение.
  2. Системный каталог. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу.
  3. 16-разрядный системный каталог. Функции, которая получает путь к этому каталогу нет, но он ищется.
    Windows Me/98/95: Этот каталог не существует.
  4. Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.
  5. Текущий каталог.
  6. Каталоги, которые внесены в список в переменной окружения PATH.


Проблему выявил, нужно кроме смены каталога сменять диск ChDrive, или просто вызывать SetCurrentDirectory.
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 09.09.2014 (Вт) 19:27

Кривоус Анатолий писал(а):Проблему выявил, нужно кроме смены каталога сменять диск ChDrive

Вот, ИМХО, неправильно себя ведёт этот контрол от мелкософта.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Шейдеры с нуля

Сообщение The trick » 09.09.2014 (Вт) 20:26

Mikle писал(а):Вот, ИМХО, неправильно себя ведёт этот контрол от мелкософта.

Там есть флаг OFN_NOCHANGEDIR, который предотвращает изменение текущей директории.
UA6527P

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 10.09.2014 (Ср) 12:30

Я так понял, что разобрались, в чем же была причина с OpenFileDialog?
Mikle, ты не смотрел еще тот исходник с тенями? Очень хочется его прикрутить в проект на 9 :oops: .
И хотелось бы продолжить с шейдерами(ландшафт на 8-12 текстур, в том же формате по 2(4) текстуры) :oops:
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 10.09.2014 (Ср) 14:06

Mikle, конвертер, на сколько я понял нужно доработать, так как в рендере он работает лиш с одной текстурой, а если в модель используется более 1 текстуры, то проблема. Попробую в твой конвертер впихнуть, сохранение с сабами.
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 10.09.2014 (Ср) 14:46

PilatP писал(а):на сколько я понял нужно доработать, так как в рендере он работает лиш с одной текстурой, а если в модель используется более 1 текстуры, то проблема.

Да, если мне нужно что-то поменять - я прямо в коде меняю. Но не путай количество текстур с количеством текстурных координат. Количество текстур может быть любым, а текстурных координат в моделях крайне редко бывает больше одного набора. Ведь Normal, Color, Specular и так далее карты - все семплируются по одним и тем же текстурным координатам.
PilatP писал(а):Я так понял, что разобрались, в чем же была причина с OpenFileDialog?

Да, просто контрол менял текущую папку ещё до того, как dll будет найдена.
PilatP писал(а):ты не смотрел еще тот исходник с тенями?

Пока нет. Мне всегда проще написать что-то своё, чем вникать в чужую логику.
PilatP писал(а):хотелось бы продолжить с шейдерами(ландшафт на 8-12 текстур, в том же формате по 2(4) текстуры

Я уже писал, что подходов много, но у всех свои недостатки и преимущества. Универсального рецепта нет. Давай так - ты определишься с ПОЛНЫМ набором текстур и размером ландшафта, дальше будем выбирать способ.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 10.09.2014 (Ср) 17:16

Mikle писал(а): Но не путай количество текстур с количеством текстурных координат.

:D это я знаю, но например взять дерево, в нем как минимум 2 текстуры, и как быть? На сколько я понял, нужно сохранять по сабам, и к каждому, текстуру.
Mikle писал(а):Да, просто контрол менял текущую папку ещё до того, как dll будет найдена.

и как же решить эту проблему?
Mikle писал(а):Мне всегда проще написать что-то своё, чем вникать в чужую логику.

надеюсь напишеш :oops: для врапера
Mikle писал(а):Давай так - ты определишься с ПОЛНЫМ набором текстур и размером ландшафта, дальше будем выбирать способ.

Набор текстур:
1 основная ландшафта
osnov.png

2 грунт, типа поле
grunt.png

3 Песок
pesok.png

4 Трава
trava.png

5 Трава с камнем
trava+rock.png

остальные выложу в следующем сообщении

Размер ланда мин 512*512 мах 2048*2048(хотелось бы :D )
текстур будет мин 9 мах 12
и само собой каждая из текстур, будет из 2 текстур(Col_Disp и Norm_Spec)
вот собственно, что хотелось бы. Задача конечно глобальная, надеюсь решаемая
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 10.09.2014 (Ср) 17:22

6 скала
Rock.png

7 Асфальт
asfalt.png

8 Асфальт2
dop asfalt.png

9 Дорога
road.png

10-12
тут будут другие текстуры, типа, доп трава, снег
кстати по поводу текстуры дорога, интересно если дорога не по прямой, а на диагональ, то как будет?
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 10.09.2014 (Ср) 17:35

Хотелось бы сделать как тут,
например
shot_017 (1).png

shot_336.png
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 11.09.2014 (Чт) 9:13

PilatP писал(а):например взять дерево, в нем как минимум 2 текстуры, и как быть? На сколько я понял, нужно сохранять по сабам, и к каждому, текстуру.

Конечно, и по быстродействию это будет лучше, если только не будет несколько тысяч деревьев. А если будет - тут уже лучше группировать стволы целой рощи в один меш, кроны в другой, делать LODы.
PilatP писал(а):и как же решить эту проблему?

Мы же в обсуждении это выяснили.
Можно после Dim B As Boolean добавить:
Код: Выделить всё
    ChDrive App.Path
    ChDir App.Path

Можно настроить сам контрол, чтобы не менял пути, поменять там какой-то параметр, как Анатолий писал.
PilatP писал(а):надеюсь напишеш для врапера

Не факт, что именно такие тени тебе нужны. Вот на твоих картинках с танками тени от деревьев явно статичные, заранее просчитанные, а от танков вообще теней нет. Но это, видимо, в игре стоит не максимальная детализация. Но, ИМХО, для статического света достаточно добавить фейковые тени для наземного транспорта.
PilatP писал(а):по поводу текстуры дорога, интересно если дорога не по прямой, а на диагональ, то как будет?

Вопрос очень правильный. Он показывает, что не годится подход, ни тот, что в моём примере на 5 текстур, ни в примере на 16 текстур с Volume Texture.
Как минимум - нужно рисовать дорогу отдельной геометрией. Для игры AoS2 я делал специальный редактор только для того, чтобы наложить контур дороги на ландшафт. Этот редактор автоматически сглаживал ландшафт в районе дороги.
Теперь по размеру, показывать сетку больше, чем 256*256 - уже довольно затратно. Можно искуственно ограничить видимость туманом и показывать фрагмент не более, чем 256*256, тогда размер, в принципе, может быть любым, лишь бы памяти хватило на буферы. Если нужна бОльшая видимость - нужно делать LODы для ландшафта, либо искать ещё какие-то варианты. Например, в той же AoS2 размер ландшафта - всего 128*128, но на него вместо расчёта света по нормалям наложена карта освещённости текстурой, которая присчитана из меша с размером 1024*1024, эту текстуру тоже рассчитывает редактор. Создаётся эффект более детализированного ландшафта.
А как ты собираешься решать проблему краёв ландшафта? В AoS2 было просто - везде есть заборы, которые мешают подъехать к краю, а на карте нет мест, которые были бы выше краёв, с которых мы бы увидели, что за краем ниже горизонта ничего нет. Сомневаюсь, что для танков такой подход подойдёт.
Это ещё не все вопросы. И их нужно решить заранее, чтобы потом при каждой новой проблеме не переделывать код, тем более, что по мере роста кода это будет всё труднее, будут копиться костыли.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 11.09.2014 (Чт) 11:37

По
Mikle писал(а):А как ты собираешься решать проблему краёв ландшафта?

Так же как и в танках.
shot_160.png

shot_004.png

shot_166.png

Они отступили от края, где нужно вставили лоды, а остальное спрятали туманом

Mikle писал(а): Вот на твоих картинках с танками тени от деревьев явно статичные

да верно, игра на минималке, для того что бы фпс, был нормальным. при такой графе фпс 20-25, при максималке, фпс 6-12, а при таком фпс в динамическую игру не поиграеш, зато красота конечно сильная.
вот на минимуме
shot_162.jpg

а это максимум
shot_171.jpg

тут уже и тени динамичные, и грунт по тому принципу, что мы делаем, и модели детальные
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 11.09.2014 (Чт) 11:49

Mikle писал(а):Конечно, и по быстродействию это будет лучше, если только не будет несколько тысяч деревьев. А если будет - тут уже лучше группировать стволы целой рощи в один меш, кроны в другой, делать LODы.

да, если нужно будет делать лес, то тогда конечно, но например пару деревьев, даже сотню, я недумаю что это будет критично
Mikle писал(а): Можно искуственно ограничить видимость туманом и показывать фрагмент не более, чем 256*256, тогда размер, в принципе, может быть любым,

Да я так и думал делать, собственно у тебя в ланде тот же принцип заложен SizeOfFrame, осталось добавить туман. Кстати туман, в обычном режиме, идет по радиусу, а в танках, сделано по контуру карты, я думаю что там использовали текстуру.

Mikle писал(а):Он показывает, что не годится подход, ни тот, что в моём примере на 5 текстур, ни в примере на 16 текстур с Volume Texture.

и все же я думаю что лучше использовать 16 текстур с Volume Texture. Дорогу можно, и так рисовать, а асфальтную, можно рисовать отдельно полигонами, это решит много других проблем, да в реализации проще.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 11.09.2014 (Чт) 12:42

Вообще я писал год назад танки, застрял на том что не смог, что бы танки нормально перемешались по ландшафту. Проблема была в том что танк состоял из 5 частей, и при повороте в наклоненом варианте, ломалось все.
Захват-1.png

вот исходники, может еще кому пригодится, https://yadi.sk/d/e1eSd4TebREaC
архив большой больше 500мб, из за музыки и звуков
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 12.09.2014 (Пт) 14:09

Mikle я так понял ты занят, раз не отвечаеш
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 13.09.2014 (Сб) 8:19

Освобожусь только в понедельник.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 13.09.2014 (Сб) 10:50

жду
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 14.09.2014 (Вс) 11:45

Привет Mikle, пытался переделать конвертер, столкнулся с рядом проблем.
1 сделал из твоего проекта с шейдерами, где меши, просмотрщик моделей, но он почему то не отображает модель, не могу понять почему :cry: ,
ведь поправил только загрузку, и немного рендер модели :roll:

2 добавил класс Sprite, 2д выводит, 3д нет, можеш глянуть в чем проблема, 3 дня бьюсь и на месте :oops: .

это конвертер
Converter Mesh.zip

это просмотрщик
Mesh View.zip


внутри, конвертера есть Х, я его для редактора ландшафта делал, и в просмотрщике, тоже есть уже конвертированный.
У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 15.09.2014 (Пн) 10:52

PilatP писал(а):Кстати туман, в обычном режиме, идет по радиусу, а в танках, сделано по контуру карты, я думаю что там использовали текстуру.

Сделать два тумана - привязать к SizeOfFrame, плюс по краю, это не проблема, и текстура не нужна для этого.
PilatP писал(а):и все же я думаю что лучше использовать 16 текстур с Volume Texture.

То есть тебя устраивает, что между текстурами №1 и №3 неполучится сделать перехода? Обязательно появится полоса текстуры №2.
PilatP писал(а):Дорогу можно, и так рисовать, а асфальтную, можно рисовать отдельно полигонами, это решит много других проблем, да в реализации проще.

Для асфальтовой дороги уже нужна реализация, готовая модель, на что я буду писать шейдер?

Конвертеры скачал, посмотрю.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 15.09.2014 (Пн) 16:35

Mikle писал(а):Сделать два тумана - привязать к SizeOfFrame, плюс по краю, это не проблема, и текстура не нужна для этого.

:shock: а разве так можно, привязать к SizeOfFrame, и что будет квадратом?
PilatP писал(а):То есть тебя устраивает, что между текстурами №1 и №3 неполучится сделать перехода? Обязательно появится полоса текстуры №2.

нет, я думал что №2 не будет в Volume Texture. Так как текстура может быть №1 и №8.
PilatP писал(а):Для асфальтовой дороги уже нужна реализация, готовая модель, на что я буду писать шейдер?

с асфальтом пока повременим, я думал его сделать отдельным рендером, именно дороги.

что бы было проще, я все делаю по этапам,
в 1 очередь нужны меши.
в 2 ландшафт и шейдеры к нему,
в 3 дорога
в 4 тени и пр

спасибо огромное, что не отказываешся, без тебя мне точно не справится
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 16.09.2014 (Вт) 9:15

PilatP писал(а):в 1 очередь нужны меши.

Обрати внимание - в конвертере меш сохраняется в формате vvFormat, без текстурных координат. Я же дал пример, которым я делал меш для машины, там нет текстур.
А vFormat в просмотрщике уже содержит текстурные координаты.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 16.09.2014 (Вт) 10:41

Mikle писал(а):Обрати внимание - в конвертере меш сохраняется в формате vvFormat, без текстурных координат. Я же дал пример, которым я делал меш для машины, там нет текстур.
А vFormat в просмотрщике уже содержит текстурные координаты.

Да действительно, они отсутствуют, я добавил их в сохранение
Код: Выделить всё
Public Type vvFormat
  Pos As D3DVECTOR
  Norm As D3DVECTOR
  tu As Single
  tv As Single
End Type


и в само сохранение
Код: Выделить всё
  For n = 0 To SSCnt - 1
      For i = 0 To AT(n).FaceCount * 3 - 1
        cI = Ind(AT(n).FaceStart * 3 + i)
        If Used(cI) < 0 Then
          VV(cV).Pos = Vert(cI).Pos
          VV(cV).Norm = Vert(cI).Norm
          VV(cV).tu = Vert(cI).tu
          VV(cV).tv = Vert(cI).tv
           Used(cI) = cV
          II(cInd) = cV
          cV = cV + 1
        Else
          II(cInd) = Used(cI)
        End If
        cInd = cInd + 1
      Next i
  Next n



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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 17.09.2014 (Ср) 9:16

Я в классе cMesh заменил твою строку своей:
Код: Выделить всё
  'Open fPath & fName & ".mesh" For Binary As #nf
  Open "D:\Work\3D\Camera\Data\w2.mesh" For Binary As #nf

И увидел модель автомата, значит работает загрузка и просмотр.
Вместо w2.mesh подставил Kursor Land.mesh - не вижу. Может модель маленькая, или большая, или расположена где-то выше-ниже?

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 17.09.2014 (Ср) 9:53

Mikle писал(а): Может модель маленькая, или большая, или расположена где-то выше-ниже?

Делал в максе, модель размером 2м*0,5м, центрировал ее по центру.
Очень странно, ведь данные то грузятся. А модель автомат какого размера?
Последний раз редактировалось PilatP 17.09.2014 (Ср) 10:29, всего редактировалось 2 раз(а).
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 17.09.2014 (Ср) 10:12

PilatP писал(а):модель автомат какого размера?

Не помню, посмотри, это ведь не трудно, как это в конвертере проверяется:
Код: Выделить всё
  MinX = 1000000: MaxX = -1000000
  MinY = 1000000: MaxY = -1000000
  MinZ = 1000000: MaxZ = -1000000
  For n = 0 To MeshVertCount - 1
    If MinX > Vert(n).Pos.X Then MinX = Vert(n).Pos.X
    If MaxX < Vert(n).Pos.X Then MaxX = Vert(n).Pos.X
    If MinY > Vert(n).Pos.Y Then MinY = Vert(n).Pos.Y
    If MaxY < Vert(n).Pos.Y Then MaxY = Vert(n).Pos.Y
    If MinZ > Vert(n).Pos.Z Then MinZ = Vert(n).Pos.Z
    If MaxZ < Vert(n).Pos.Z Then MaxZ = Vert(n).Pos.Z
  Next n

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 17.09.2014 (Ср) 10:17

Mikle писал(а):Не помню, посмотри, это ведь не трудно, как это в конвертере проверяется:

Спасибо, я допишу, остальное, с этим вроде проблем не намечается. Потом скину рабочий вариант
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 17.09.2014 (Ср) 10:26

У тебя камера расположена в центре, и модель тоже, поставь, к примеру, в CtrlInit так:
Код: Выделить всё
CamPos = Vec3(0, 0, -5)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 17.09.2014 (Ср) 10:28

PilatP писал(а):У тебя камера расположена в центре, и модель тоже, поставь, к примеру, в CtrlInit так:

Камеру я отодвину назад, с просмотрщиком, уже разберусь, кстати можно ли не делать доп файл, я пробовал сохранять текстуры, через
Код: Выделить всё
Put #nf
, но почему то, не сохраняет, или не грузит.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 17.09.2014 (Ср) 10:30

Все, разобрался, :D модель, отображается, но на верху, хотя я позиционировал ее по 0 :roll: , она на Y=19, и размер большой, странно что не увидел ее сразу, хотя осматривался :shock:
Спасибо Mikle, а то я уже начал было в себе сомневатся :oops: .
Еще один момент, там в просмотрщике есть класс, Sprite, если нет то вот он

Код: Выделить всё
Option Explicit
Private Type ConVFormat
  Pos As D3DVECTOR
  RHW As Single
  tu As Single
  tv As Single
End Type

Dim Vert(3) As ConVFormat
Dim vSize As Long

Private Const ConFVF = D3DFVF_XYZRHW Or D3DFVF_TEX1




Public Sub Draw(TeksturID As Integer, PosX As Single, PosY As Single, RazmX As Single, RazmY As Single, Optional PosZ As Single = 0.5, Optional tuTex As Single = 1, Optional tvTex As Single = 1, Optional Alfa As Single = 1)
  'Dev.SetVertexShader Nothing
  'Dev.SetPixelShader Nothing
  'Dev.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
  'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_FALSE
  'Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE
  'Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR
  'Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR
  Dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE
  Dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  Dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
  Dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DISABLE
  Dev.SetFVF ConFVF
 
        Vert(0).Pos = Vec3(PosX, PosY, PosZ)
        Vert(0).tu = 0: Vert(0).tv = 0 ': Vert(0).RHW = Alfa ': Vert(0).RHW = Color.
       
        Vert(1).Pos = Vec3(PosX + RazmX, PosY, PosZ)
        Vert(1).tu = tuTex: Vert(1).tv = 0 ': Vert(1).RHW = Alfa
       
        Vert(2).Pos = Vec3(PosX, PosY + RazmY, PosZ)
        Vert(2).tu = 0: Vert(2).tv = tvTex ': Vert(2).RHW = Alfa
       
        Vert(3).Pos = Vec3(PosX + RazmX, PosY + RazmY, PosZ)
        Vert(3).tu = tuTex: Vert(3).tv = tvTex ': Vert(3).RHW = Alfa
 
  Dev.SetTexture 0, Tekstura(TeksturID).Textures
  Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(Vert(0)), Len(Vert(0))

   
    Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
    Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_FALSE
End Sub

Public Sub Draw3D(TeksturID As Integer, PosX As Single, PosY As Single, PosZ As Single, RazmX As Single, RazmY As Single, Optional tuTex As Single = 1, Optional tvTex As Single = 1, Optional Alfa As Single = 1)
  Dim Mtrx As D3DMATRIX

  MatrixMultiply Mtrx, mView, mProj
  MatrixTranspose Mtrx, Mtrx

  Dev.SetVertexShader Nothing
  Dev.SetPixelShader Nothing
  Dev.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
  Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
  'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_FALSE
  'Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE
  'Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR
  'Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR
  Dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE
  Dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  Dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
  Dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DISABLE
  Dev.SetFVF ConFVF
 
        Vert(0).Pos = Vec3(PosX, PosY, PosZ)
        Vert(0).tu = 0: Vert(0).tv = 0 ': Vert(0).RHW = Alfa ': Vert(0).RHW = Color.
       
        Vert(1).Pos = Vec3(PosX + RazmX, PosY, PosZ)
        Vert(1).tu = tuTex: Vert(1).tv = 0 ': Vert(1).RHW = Alfa
       
        Vert(2).Pos = Vec3(PosX, PosY, PosZ + RazmY)
        Vert(2).tu = 0: Vert(2).tv = tvTex ': Vert(2).RHW = Alfa
       
        Vert(3).Pos = Vec3(PosX + RazmX, PosY, PosZ + RazmY)
        Vert(3).tu = tuTex: Vert(3).tv = tvTex ': Vert(3).RHW = Alfa
 
  Dev.SetTexture 0, Tekstura(TeksturID).Textures
  Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(Vert(0)), Len(Vert(0))

   
    'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
    Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_FALSE
End Sub




я его делал, для 2 видов отображения, 1 вариант, обычный спрайт, он отображается, к нему потом,
а 2 для отображения 3D, он не отображает, можно ли как нить модифицировать его, что бы можно было вращать, по разным XYZ, и позиционирование по координатам,(там есть простое позиционирование).
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 17.09.2014 (Ср) 13:10

Если в FVF присутствует поле RHW - спрайт не удастся отобразить в 3D с помощью FFP.
Нужно либо для 3D писать отдельный класс, либо, к примеру, для 3D варианта задавать D3DFVF_XYZW вместо D3DFVF_XYZRHW, это позволит не менять структуру ConVFormat массива вертексов.
Только у тебя там что-то непонятное, почему Vert().RHW = Alfa? Для того, чтобы нормально работало и в 2D, и в 3D, ставь RHW = 1.

Пред.След.

Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

    TopList