Снова Ландшафт

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

Модератор: Mikle

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 17.07.2006 (Пн) 1:06

vitalik_b
круто

DirectXManiac
я думаю надо писать собственный формат
ато 2 картинки таскать както не очень по мойму
не обязательно даже сжимать данные
сделать просто что то вроде этого

запись
Open TrimNull(OpenFileName.File) & ".map" For Binary As #f
Put #f, , MapInf
Put #f, , arr()
Put #f, , arr2()
Close #f

чтение
Open fName For Binary As #F
Get #F, , MapInf
ReDim arr(MapInf.SizeY - 1, MapInf.SizeX - 1) As Byte - карта высот
ReDim arr2(MapInf.SizeY - 1, MapInf.SizeX - 1) As Byte - текстур карта
Get #F, , arr()
Get #F, , arr2()
Close #F

я так делал для создания ландшафта
чтоб не разбираться с форматами ТГА/БМП

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

Сообщение Mikle » 17.07.2006 (Пн) 10:47

Bonesnapper
Я тоже думаю, что нужно писать в своем формате, но дело не в сложности форматов текстур - TGA очень прост, а в ограничении в 256 градаций, это очень мало, нужно делать хотя бы Integer, а лучше сразу Single, и не придется пользоваться FilterHeight.
Сейчас я делаю полностью новую версию ландшафта с LOD на QTree, думаю, скоро выложу.

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

Сообщение Mikle » 17.07.2006 (Пн) 10:49

Удалил дубль.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 17.07.2006 (Пн) 12:04

Mikle, Bonesnapper:
Я уже написал свой формат и не ношу с собой текстуры... всё в одном файле... Причём файл сцены весит 150-200 КБ
:wink:
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 17.07.2006 (Пн) 16:13

а как мен отключить вертекс шейдер
достаточно просто написать
d3dDevice.SetPixelShader 0
или нет

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

Сообщение Mikle » 17.07.2006 (Пн) 16:37

Код: Выделить всё
d3dDevice.SetPixelShader

Отключает не вертексный, а пиксельный шейдер. А вот
Код: Выделить всё
d3dDevice.SetVertexShader d3dfvf_.....

заменяет вертексный шейдер на комбинацию флагов.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 17.07.2006 (Пн) 20:42

ну я пиксельный имел ввиду :)
ошибся просто 8)
спасибо

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 18.07.2006 (Вт) 10:20

Bonesnapper
А зачем его выключать?
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 18.07.2006 (Вт) 11:31

ну кроме ландшафта наверно
есть что рисовать с другими текстурами

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 18.07.2006 (Вт) 12:17

Bonesnapper
Понятно...
ЗЫ Чего не заходишь на мой форум?
#define ROFL 0xDDDD

vitalik_b
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 16.02.2006 (Чт) 21:03

Сообщение vitalik_b » 29.07.2006 (Сб) 10:29

Вот сделал мултитекстурирование с 8 текстурами.
Работает в 2 раза медленнее, т.к. рисуется через 2 прохода.
У вас нет доступа для просмотра вложений в этом сообщении.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 29.07.2006 (Сб) 16:13

vitalik_b
Ты просто маньяк! Как и я... :lol:
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.08.2006 (Чт) 22:39

Теперь вопрос посложнее... По поводу динамики вертексов... Есть такая структура
1111
1221
1321
1111
4х4 полигона... У каждого есть высота(цифра)... Мне надо посчитать высоты для каждого полигона чтоба сгладить ланд т.е. чтобы было между рядом стоящими было меньше расстояние... подскажите как это сделать? Я думал брать среднее но может получиться ужнасно
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.08.2006 (Чт) 22:46

Вот примерно так как на картинке
У вас нет доступа для просмотра вложений в этом сообщении.
#define ROFL 0xDDDD

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

Сообщение Mikle » 05.08.2006 (Сб) 9:45

DirectXManiac
Не понял, ты хочешь сгладить, не добавляя вертексов, или добавляя?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 05.08.2006 (Сб) 11:27

Без разницы...
P.S. Посмотри личку :)
#define ROFL 0xDDDD

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

Сообщение Mikle » 06.08.2006 (Вс) 15:00

Ну, не добавляя можно сделать только с потерей детализации, это, например, делает FilterHeight в ландшафте.
А вот добавляя вертексы:
Код: Выделить всё
Option Explicit
Dim m(511) As Single

Private Sub Form_Load()
  Me.ScaleMode = vbPixels
  Me.Width = 500 * Screen.TwipsPerPixelX
  Me.Height = 300 * Screen.TwipsPerPixelY
End Sub

Private Sub Form_Click()
Dim x As Long
  Randomize Timer
  Me.Cls
  For x = 0 To 511 Step 64
    m(x) = Rnd * 256
    Me.Circle (x, m(x)), 3, RGB(255, 0, 0)
  Next x
  Filter
End Sub

Private Sub Filter()
Dim x As Long, dx As Long, Ind As Long
  dx = 64
  Do
    Ind = 0
    Do
      x = Ind * dx + dx \ 2
      m(x) = mVal(Ind - 1, dx) * -0.0625 + mVal(Ind, dx) * 0.5625 + mVal(Ind + 1, dx) * 0.5625 + mVal(Ind + 2, dx) * -0.0625
      Me.PSet (x, m(x)), RGB(0, 0, 0)
      Ind = Ind + 1
      If Ind * dx > 511 Then Exit Do
    Loop
    dx = dx \ 2
    If dx < 2 Then Exit Do
  Loop
End Sub

Private Function mVal(ByVal Ind As Long, ByVal dx As Long) As Single
  If Ind < 0 Then Ind = 0
  If Ind * dx > 511 Then Ind = 511 \ dx
  mVal = m(Ind * dx)
End Function

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

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 06.08.2006 (Вс) 19:59

О! Спасибо! Попробую...
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 15.08.2006 (Вт) 10:06

Вот! Я тут усовершенствовал свои знания в шейдерах и вместо 4ой тексутры сделал детализированную! Очень даже ничего вышло! Как вам? На скрине видно разницу между использованием без неё и с ней...
У вас нет доступа для просмотра вложений в этом сообщении.
#define ROFL 0xDDDD

vitalik_b
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 16.02.2006 (Чт) 21:03

Сообщение vitalik_b » 15.08.2006 (Вт) 12:22

Нормально, только снег на снег не похож, и трава на траву.
:)
Вот если для каждой текстуры свою детализированную...
А ещё лучше бамп сделать.
(гм тормозить будет, 4 прохода получится)

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 15.08.2006 (Вт) 13:03

vitalik_b
Зато можно использовать текстуры 32х32 и не бояться потери качества! Это утопия делать на ps.1.1 такое! Надо делать на ps.1.4 через 2,3 прохода(phase) так будет намного быстрее!
#define ROFL 0xDDDD

vitalik_b
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 16.02.2006 (Чт) 21:03

Сообщение vitalik_b » 15.08.2006 (Вт) 13:19

А лучше на ps.2.0, там можно сразу 8 текстур за проход рисовать.
Жаль только DX8 их не поддерживает.

А разве ps.1.4 можно использовать в DX8 :?:

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 16.08.2006 (Ср) 10:26

По сдк вроде как можно
но у меня почемуто
ps.1.4
не проходит :?

vitalik_b
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 16.02.2006 (Чт) 21:03

Сообщение vitalik_b » 16.08.2006 (Ср) 11:23

DX8 поддерживает только ps.1.0 - ps.1.3
ps.1.4 появились в DX8.1

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 16.08.2006 (Ср) 12:22

я конечно не знаю но сдк у меня по 8.1
а что там к вб подключается не ясно 8)

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

Сообщение Mikle » 16.08.2006 (Ср) 17:47

Bonesnapper

у меня почемуто
ps.1.4
не проходит

А у тебя, случайно, не Ti4200 ?

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 16.08.2006 (Ср) 23:21

Нет у меня 6800гт

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 17.08.2006 (Чт) 11:18

Mikle
Расскажи как юзать ps.1.4...
Там как-то регистрировать надо через texld r0,t0... и можно тогда использовать до 6 текстур!
#define ROFL 0xDDDD

vitalik_b
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 16.02.2006 (Чт) 21:03

Сообщение vitalik_b » 18.08.2006 (Пт) 13:57

Вот ландшафт на 16 текстур.
Видны швы между текстурами.
(наверное, я в шейдерах что-то не так сделал)
У вас нет доступа для просмотра вложений в этом сообщении.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 18.08.2006 (Пт) 17:38

Ничего себе :shock: 16 текстур.... Только вот зачем? 4 прохода это слишком уже тормозит скорость! А вообще круто! Я например переделал шейдер и сделал 6 текстур и 2 дет. карты... Т.е. снег и песок в одной - остальное в другой и получилось неплохо + скорость больше намного!
#define ROFL 0xDDDD

Пред.След.

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

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

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

    TopList