Visual Basic 2008 и DirectX

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

Модератор: Mikle

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 19.11.2008 (Ср) 13:23

Привет. С камерой и углами я разобрался. Возникли новые вопросы. Вернее 2 вопроса.

1. Этож все-таки игра. И как следствие текстуры на кубах будут анимированными. Как корректней это реализовать? Локально - наложить поверх еще 2 полигона с анимацией, и подменять их, либо брать и менять текстуру грани целиком.
2. И еще вопрос, хочу сделать доп эффекты, например дождь, или там затемнение.... как идея между камерой и гранями куба разместить еще один куб (либо просто прямоугольник, закрывающий весь обзор) и на него уже накладывать текстуры дождя, тумана и прочего.
Вопрос, вот полигон, на нем рисунок дождя, как быть с прозрачными участками, чтобы они просвечивались... и как сделать уровень прозрачности в целом для полигона, ну а затемнение- как тот же полигон только с черной текстурой.
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 21.11.2008 (Пт) 11:24

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

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

Re: Visual Basic 2008 и DirectX

Сообщение Mikle » 21.11.2008 (Пт) 11:28

Натяни на него текстуру с черным цветом и соответствующей альфой.

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 21.11.2008 (Пт) 11:59

Спасибо. Но тогда вопрос- я могу альфу программно менять? Чтобы эффекта затемнения, допустим, достичь?
...или как-то так...

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

Re: Visual Basic 2008 и DirectX

Сообщение Mikle » 21.11.2008 (Пт) 12:12

Например можно умножать альфу текстуры на альфу TFactor-а.
А если нужно просто равномерно затемнять, то просто используй TFactor без текстуры. Я сначала думал, что "неравномерно" - это местами сильнее, местами слабее. Если нужно менять яркость объекта, лучше вообще никаких прямоугольников не выводить, это сильно филрейт нагрузит. Просто в рендере объекта добавь стадию, умножающую Current на TFactor, и все.

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 21.11.2008 (Пт) 20:29

Спасибо огроменное!!!
хм)... у меня получилось...
обязательно покажу, когда будет что показывать.

Мне теперь нужно как-то реализовать "спрайты" жизней и т.п.... вопрос следующий-
Как я могу создать билбоарт?
Просто я пока нашел- просто плоскость и постоянно ее перед камерой вертеть... но это не очень удобно...

А в SDK к 9му я не особо нашел ни спрайтов не билбоардов...
Есть какой-нибудь простой способ?
...или как-то так...

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Re: Visual Basic 2008 и DirectX

Сообщение Ktulhu » 21.11.2008 (Пт) 22:06

биллборды вроде так и делаются, вертятся перед камерой постоянно. или у тебя есть другие идеи?)

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

Re: Visual Basic 2008 и DirectX

Сообщение Mikle » 22.11.2008 (Сб) 16:14

Можно выводить спрайты в режиме XYZRHW, тогда они всегда будут перед камерой. Но координаты будут зависеть от разрешения экрана.
Можно выводить обычный спрайт в одной фиксированной позиции и перемещать не спрайт, а камеру, это проще. В любом случае вырубаем z-буфер.

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 26.11.2008 (Ср) 11:45

Спс. Пока не разобрался, не до того - погряз в 1С.
У меня тут вопросы новые-

Я хочу сделать что-то типа CrimsonLand'а, тока с корованами и чтоб пол экрана красным, если в глаз попадут.
Рисуются тайлы поверхности
Выше рисуются монстры, герой, снаряды
Еще выше - курсор-прицел.


Вопрос- реально ли все эти спрайты рисовать полигонами? В смысле рационально ли?
И еще?, Как двигать и крутить полигоны со спрайтами персонажей? Нет у кого-нибудь аналога функции, хотя-бы на VB6. Просто я так с матрицами и не разобрался.

И как заставить нормально двигать мышиный курсор (он либо медленно, либо рывками)... думаю использовать разгон, ускорение и т.д. но это не первоочередно.
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Очередной глупый вопрос

Сообщение Master_Zolan » 27.11.2008 (Чт) 11:03

Ок, ладно...((((
Камера смотрит на маленький прямоугольник.
Я нажимаю клавишу- и прямоугольник смещается влево.
Прямоугольник- это не Sprite- Это два полигона.

Как это реализовать? Ну что на что умножать-то? :|
...или как-то так...

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

Re: Visual Basic 2008 и DirectX

Сообщение Mikle » 27.11.2008 (Чт) 11:08

Умножай мировую трансформацию (World) на матрицу перемещения (MatrixTranslation).

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 27.11.2008 (Чт) 11:30

а MatrixTranslation как вообще выглядеть должна?
а если на экране два таких спрайта, а перемещать нужно один?

То есть что сделать- я примерно понял, вопрос "как".
...или как-то так...

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Re: Visual Basic 2008 и DirectX

Сообщение Ktulhu » 27.11.2008 (Чт) 12:50

а MatrixTranslation как вообще выглядеть должна?

D3DXMatrixTranslation(MOut As D3DMATRIX, x As Single, y As Single, z As Single) - x,y,z - координаты, куда нужна сдвинуть обьект.

D3DDevice.SetTransform D3DTS_WORLD, MatrixTranslation - вызиваешь перед рендером обьекта, к которому нужно применить матрицу. Т.е. если первый двигать, а второй нет, то типо такого:

Код: Выделить всё
dim matWorld as D3DMATRIX

D3DXMatrixTranslation matWorld, куда_двигать.x, куда_двигать.y, куда_двигать.z
D3DDevice.SetTransform D3DTS_WORLD, matWorld
РендерПервогоСпрайта()
D3DXMatrixTranslation matWorld, 0, 0, 0 ' нули - типо не двигаем
D3DDevice.SetTransform D3DTS_WORLD, matWorld
РендерВторогоСпрайта()

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 27.11.2008 (Чт) 13:17

Спасибо, вечером попробую.

Хм. Забавно, что я вообще этим занялся- до этого на VB6 7 лет кодил, а теперь и видеть его не хочу. Случайно наткнулся на Экспресс 2005, потом потянул 2008... потом как-то внезапно нашел DX SDK... и теперь пошло поехало- вроде бы пользы от моих занятий никакой- а все равно приятно. Видимо из-за 1С этого...
...или как-то так...

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Visual Basic 2008 и DirectX

Сообщение lellel » 27.11.2008 (Чт) 14:18

по моему вместо:
D3DXMatrixTranslation matWorld, 0, 0, 0 ' нули - типо не двигаем


можно написать(нулевое преобразование):
Код: Выделить всё
D3DXMatrixIdentity matWorld

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 27.11.2008 (Чт) 20:00

Спасибо!!! работает!!!
А теперь, как вращать их можно?
...или как-то так...

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Visual Basic 2008 и DirectX

Сообщение lellel » 27.11.2008 (Чт) 20:16

Код: Выделить всё
D3DXMatrixRotationX <итоговая_матрица>, <угол_в_радианах>      'для поворота по оси абсцисс

  D3DXMatrixRotationY <итоговая_матрица>, <угол_в_радианах>      'для поворота по оис ординат

  D3DXMatrixRotationZ <итоговая_матрица>, <угол_в_радианах>      'для поворота по оси аппликат

D3DXMatrixMultiply <итоговая_матрица>, <матрица_1>, <матрица_2>        'сложение матриц

d3dDevice.MultiplyTransform D3DTS_WORLD, <матрица>      'добавить к мировой марице текущую

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 28.11.2008 (Пт) 11:41

И снова Спасибо!!!
Теперь осталась геометрия, дабы вращать его вокруг оси а не за угол. Сегодня дома посижу сделаю.
(если у кого уже есть алгоритм- прошу не жадничать)
И вот у меня уже еще 2 вопроса новых.
Я сейчас подгружаю текстуры- каждая- отдельный файл. Для спрайтов удобнее было бы в одном файле все анимации хранить.
У меня рисунок 100X100 пикселей. Разбит на квадратные тайлы по 10x10. В одном рисунке получается 100 тайлов .
Допустим мне нужно выдернуть тайл 3x7?
xi=3
yi=7
r=10
координаты я найду от (xi*r,yi*r) по (xi*r+r,yi*r+r)
А вырезать и использовать как?

Кстати вопрос - как правильнее (быстродействие-память?)
Загрузить перед выводом очередного спрайта каждый раз дергать, или все таки программно разбить в массив текстур?
**********************************************************************************************
И второй вопрос про мышь и гладкость хода- понятно, что просто отклонения плюсовать к координатам- это некрасиво и неудобно, получаются рывки.
Нужно что-то вроде ускорения, зависящего от степени отклонения? Или как?
Кто нибудь сталкивался?
___________________________________________________________________
P.S.: Когда со всем этим разберусь, и смогу вам выложить на обозрение очередную мою кривую вариацию на тему CrimsonLand'a (коих тонны), я стану спрашивать про частицы и звук.
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 28.11.2008 (Пт) 22:15

лол)))


matWorld2.RotateAxis(New Vector3(0, 0, 1), (ang))
Direct3D_Device.SetTransform(TransformType.World, matWorld2)
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 29.11.2008 (Сб) 17:43

Люди подскажите плиз, у меня вся анимация монстра в одной картике, как мне ее разбить по отдельным текстуркам?
...или как-то так...

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

Re: Visual Basic 2008 и DirectX

Сообщение Mikle » 29.11.2008 (Сб) 18:08

Хоть фотошопом, только зачем? Лучше так и оставь, меняй текстурные координаты.

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 29.11.2008 (Сб) 18:32

Как?
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Re: Visual Basic 2008 и DirectX

Сообщение Master_Zolan » 01.12.2008 (Пн) 10:21

А как менять текстурные координаты?
И еще как отслеживать нажатия кнопок мыши, через Direct_Input?

Код: Выделить всё
Try
   ' Получение состояние мыши
DirectInput_MouseState = DirectInput_Device.CurrentMouseState
Catch
End Try
   'Движение мыши
AngleX = AngleX + DirectInput_MouseState.X
AngleY = AngleY + DirectInput_MouseState.Y


А вот кнопки как?
...или как-то так...

Master_Zolan
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 63
Зарегистрирован: 07.10.2008 (Вт) 12:11
Откуда: г. Ростов-на-Дону

Нарыл вот

Сообщение Master_Zolan » 01.12.2008 (Пн) 10:23

интересный ресурсик...
http://www.myproga.net/
...или как-то так...

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

Re: Visual Basic 2008 и DirectX

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

На форуме полно демок, где меняются текстурные координаты, полно демок с опросом мыши через DirectInput и без него.

Пред.

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

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

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

    TopList