Как нарисовать 3D карту????

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

Модератор: Mikle

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Как нарисовать 3D карту????

Сообщение Vovik » 08.09.2003 (Пн) 17:18

Люди, может кто подскажет, как нарисовать 3D карту, например как в
Allods2 или так...
Если кто знает, то как сделать тень от объекат?
Заранее благодарен!

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Как нарисовать 3D карту????

Сообщение Vovik » 09.09.2003 (Вт) 16:50

Я не верю, что нет того кто это знает!!!!
Ну помогите мне пож-ста!!!!! Кто-нибудь!!!!
Или хотяб ссылки дайте на что-то похожее...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 23.09.2003 (Вт) 20:13

А как на счет сделать редактор карт? Большинство 3д и не только игр используют свои редакторы карт.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.09.2003 (Ср) 11:22

d3drm писал(а):А как на счет сделать редактор карт? Большинство 3д и не только игр используют свои редакторы карт.

Ты меня немножко не понял....
Я имею ввиду, как в моей проге отресовать 3D ландшафт!!! Каким образом это делается???
Я видел примеры на C++, там бралось из битового файла по-пиксельно каждая точка и от значения (RGB), то есть яркости,
рисовался трёхмерный ландшафт, а яркость битов из этой картинки
соответствовала высоте постраения того самого ландшафта!
Так вот каким образом это делается на VB?

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

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

Ты сам все описал... Какая разница, на С++, на ВБ?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 24.09.2003 (Ср) 21:41

Вот выдрал кусок из кода своего движка:


'\\ Процедура создания ландшафта:
Public Sub GenerateHugeTerrain(HieghtMap As String, Precision As CONST_R3DLANDQUALITY)
'\\ Задесь: HeightMap - карта высот, т.е. рисунок BMP, думаю объяснять не надо...
'\\ Precision - точность ландшафта. Для загрузки больших ландшафтов (ну к примеру 1024х1024 пикселей) лучше это число сделать побольше...

'\\ Загружаем рисунок в пикчурбокс. Пикчурбокс должен быть:
'\\ а) autosize = true
'\\ б) borderstyle = 0 - none
'\\ и если уж два предыдущих пункта несовсем обязательные, то в) scalemode = 3 - pixel, должно быть обязательно


frmUtil.picUtil1.Picture = LoadPicture(HieghtMap)


'\\ загрузили! теперь назначаем некоторые переменные:
Dim X As Integer, Y As Integer '\\ для двух циклов
Dim h(3) As Single, Blank As Long '\\ h(3) - высоты, о них позже, blank - цветовая составляющая типа D3DLVERTEX2

'\\ Кусок выдран нагло из класса ландшафта моего движка, поэтому тут есть переменные, объявленные в general\declarations класса

'\\ Вот например точность ландшафта:
LandPrecision = Precision

'\\ Ну белый цвет...
Blank = RGB(255, 255, 255)

'\\ Запоминаем ширину и высоту карты высот, пригодится...
pWidth = frmUtil.picUtil1.ScaleWidth
pHeight = frmUtil.picUtil1.ScaleHeight


'\\ Циклы, самое главное!
For X = 1 To pWidth Step Precision
For Y = 1 To pHeight Step Precision

'\\ вытаскиваем четыре высоты из карты высот: (типа квадратик из четырех вершин):

h(0) = GetPixel(frmUtil.picUtil1.hdc, X, Y) / 100000
h(1) = GetPixel(frmUtil.picUtil1.hdc, X + 1 * Precision, Y) / 100000
h(2) = GetPixel(frmUtil.picUtil1.hdc, X + 1 * Precision, Y + 1 * Precision) / 100000
h(3) = GetPixel(frmUtil.picUtil1.hdc, X, Y + 1 * Precision) / 100000

'\\ Вершины-то четыре, но каждый четырехугольник состоит из двух треугольников, значит +6 точек в массив
VertexCount = VertexCount + 6

'\\ Увеличиваем массив, не стирая данные
ReDim Preserve LandVertex(VertexCount)

'\\ создаем те самые новые 6 вертексов:
LandVertex(VertexCount - 6) = CreateLVertex2(CSng(X), h(0), CSng(Y), Blank, Blank, 2, 2, 0, 0)
LandVertex(VertexCount - 4) = CreateLVertex2(X + Precision, h(1), CSng(Y), Blank, Blank, 2, 0, 0, 0)
LandVertex(VertexCount - 5) = CreateLVertex2(X + Precision, h(2), Y + Precision, Blank, Blank, 0, 0, 0, 0)
LandVertex(VertexCount - 3) = CreateLVertex2(X + Precision, h(2), Y + Precision, Blank, Blank, 0, 0, 0, 0)
LandVertex(VertexCount - 1) = CreateLVertex2(CSng(X), h(3), Y + Precision, Blank, Blank, 0, 2, 0, 0)
LandVertex(VertexCount - 2) = CreateLVertex2(CSng(X), h(0), CSng(Y), Blank, Blank, 2, 2, 0, 0)

Next Y
Next X



End Sub


Вот и все, а ты боялся! Если заработает, то с тебя пиво! ;)

Кстати, я тебе скинул довольно таки старую версию ландшафта. Запустив проект, ты увидишь при рендеринге лишь убогие горки, которые не реагируют на направленный источник света. Для избежания таких глюков следует рассчитать нормали для этого ландшафта. Как это делается - расскажу после того как у тебя все заработает и ты купишь мне пиво (шучу :-) ) Потом еще на ландшафт надо натянуть карту цветов или как там она называется. Это нужно для того, чтобы твой ландшафт не был покрыт в любой точке одной и той же текстурой. То есть так и будет, но вид будет другой. В общем круто будет :-) Далее то, с чем ты наверняка будешь мучаться. Ты сделал ландшафт и чво дальше? Хочеться ведь по нему побегать, пожевать трав... Тфу! В общем травка тут ни при чем, а вот узнать высоту точки на ландшафте - дело нужное и предельно простое, но я все равно до этого доходил неделю. Так что твори, сообщай об успехах, если че - поможу. Копи деньги на пиво.

VOD
Постоялец
Постоялец
 
Сообщения: 882
Зарегистрирован: 27.01.2002 (Вс) 20:54
Откуда: Украина Одесса

Re: Как нарисовать 3D карту????

Сообщение VOD » 25.09.2003 (Чт) 21:11

Vovik писал(а):Люди, может кто подскажет, как нарисовать 3D карту, например как в
Allods2 или так...


Дык тока во вторых Аллодах не 3D..Ж)

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 26.09.2003 (Пт) 18:19

Вот именно!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 27.09.2003 (Сб) 20:16

А где мое пиво? Вовик? Ты где?

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 27.09.2003 (Сб) 22:34

d3drm писал(а):А где мое пиво? Вовик? Ты где?

Эх....чё то не пахает....Может я чё не так делаю??? :cry: :cry:
Хм... а про Аллоды, во всяком случае иллюзия 3D...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 28.09.2003 (Вс) 9:34

В чем именно ошибка?

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 28.09.2003 (Вс) 12:36

d3drm писал(а):В чем именно ошибка?
Чувствую, что я - сплошная ошибка... :cry:
:!: Слушай, а у тя нет случайна полного примера с этим ландшафтом??? Если есть, то пришли...
Заранее благодарен!!!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 28.09.2003 (Вс) 14:34

Э... Давай лучше ты мне пришлешь то, что у тя пока есть, а я скажу что не так? Ты будешь долго разбираться в моих творениях...

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 28.09.2003 (Вс) 19:27

d3drm писал(а):Э... Давай лучше ты мне пришлешь то, что у тя пока есть, а я скажу что не так? Ты будешь долго разбираться в моих творениях...

А давай, ты первый....Я уж как-нибудь разберусь

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 28.09.2003 (Вс) 20:36

Ну раз ты упрямый такой сам и разбирайся. Я тебе только класс с ландшафтом кину.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 29.09.2003 (Пн) 11:55

d3drm писал(а):Ну раз ты упрямый такой сам и разбирайся. Я тебе только класс с ландшафтом кину.

Лёха, ты конечно извини, но просто один нехороший мальчик протестировал у меня свою прогу(Как выяснилось потом, это был вирус) и отформатировал мой веник :arrow: все мои проги ушли в .....
Я теперь решил начать всё сначала и уже буду юзать DirectX 8 занаво :roll:

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 22.11.2003 (Сб) 10:02

Приколись, на днях тут нашел одну вещь, может я ее тебе уже присылал, хотя вряд ли. В общем движок под dx 7. Там и ландшафты и карты из QIII и Counter-Strike... В общем ща отправляю, а ты там разберешься...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 22.11.2003 (Сб) 10:02

Приколись, на днях тут нашел одну вещь, может я ее тебе уже присылал, хотя вряд ли. В общем движок под dx 7. Там и ландшафты и карты из QIII и Counter-Strike... В общем ща отправляю, а ты там разберешься... Ессно, моя работа :))))

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.11.2003 (Пн) 12:05

d3drm писал(а):Приколись, на днях тут нашел одну вещь, может я ее тебе уже присылал, хотя вряд ли. В общем движок под dx 7. Там и ландшафты и карты из QIII и Counter-Strike... В общем ща отправляю, а ты там разберешься... Ессно, моя работа :))))
Спасиб.....ща буду разбераться!!!!!! Очень благодарен за помощь!!!!!!!!!!!! :lol: :wink:

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 24.11.2003 (Пн) 18:44

Может ссылочку кто-нибудь кинет? :wink:

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 26.11.2003 (Ср) 13:29

Какую тебе ссылочку? У меня их много 8)

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 26.11.2003 (Ср) 17:44

Движка с картами QIII или CS. Может есть и для DX8?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 27.11.2003 (Чт) 12:11

Maxwell писал(а):Движка с картами QIII или CS. Может есть и для DX8?


Ишь вы какие! Вам палец в рот не клади! ЕСТЬ, блин у меня все! :) На сайт выложу!

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 27.11.2003 (Чт) 18:02

Буду ждать...
Просто хочеться поучиться, как другие программируют.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 28.11.2003 (Пт) 11:21

Все, выложил, можешь учиться, как я программирую! Киньте мне на мыло бутылочку пыва.... :cry:

AnTi44
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 02.08.2004 (Пн) 19:02

Сообщение AnTi44 » 09.02.2005 (Ср) 23:05

d3drm писал(а):Вот выдрал кусок из кода своего движка:

Для избежания таких глюков следует рассчитать нормали для этого ландшафта. .


Обясните plz про нормали. Как их рассчиттать преимущественно для данного способа генерации ландшафта ?

AnTi44
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 02.08.2004 (Пн) 19:02

Сообщение AnTi44 » 11.02.2005 (Пт) 18:11

Что, никто не знает? . . .

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 13.02.2005 (Вс) 18:18

Код: Выделить всё
Public Function CreateNormal(a As D3DVECTOR, b As D3DVECTOR, c As D3DVECTOR) As D3DVECTOR
    '------------------------------------------------------
    Dim P As D3DVECTOR, Q As D3DVECTOR, N As D3DVECTOR
   
    D3DXVec3Subtract P, b, a
    D3DXVec3Subtract Q, c, a
   
    D3DXVec3Cross N, P, Q
    D3DXVec3Normalize N, N
   
    CreateNormal = N
    '------------------------------------------------------
End Function
ХЎ

AnTi44
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 02.08.2004 (Пн) 19:02

Сообщение AnTi44 » 17.02.2005 (Чт) 8:53

a,b,c - это что за вектора?
Бауманец.
РК9-22.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 17.02.2005 (Чт) 11:46

AnTi44 писал(а):a,b,c - это что за вектора?
Это вршины треугольника, для которого вычисляется нормаль.

След.

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

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

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

    TopList