Регистрация
ФорумРеклама на сайтеRss 2.0
Visual Basic
Blitz Basic
Dark Basic
Популярные материалы
Статистика
Rambler's Top100
Основные приёмы работы с Direct3d Visual Basic » Статьи » Графика

Основные приёмы работы с Direct3d

Здесь описаны некоторые приёмы, которые могут понадобиться Вам при работе с Direct3d.

Полноэкранный режим

Большая часть игр работает в полноэкранном режиме, мы же в предыдущих статьях рассматривали лишь окнный режим Direct3d. Для работы в полноэкранном режиме недостаточно лишь изменить свойство Windowed объекта d3dpp, необходимого при создании устройства Direct3d, на False. Нужно также изменить свойства этого объекта BackBufferHeight и BackBufferWidth на нужную высоту и ширину экрана в пикселах соответственно. Чтобы всё было окончательно понятно, смотрите пример:

'В этом примере DX - объявленный объект 
DirectX8'D3D - объект Direct3D8 'D3DDevice - объект Direct3DDevice8
Public Function InitD3d(hWnd As Long) As Boolean
On Local Error Resume Next
Set D3D = DX.Direct3DCreate()
Dim Mode As D3DDISPLAYMODE
D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Mode
Dim d3dpp As D3DPRESENT_PARAMETERS
d3dpp.Windowed = False
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
d3dpp.BackBufferFormat = Mode.Format
d3dpp.BackBufferCount = 1
d3dpp.BackBufferHeight = Mode.Height
d3dpp.BackBufferWidth = Mode.Width
d3dpp.EnableAutoDepthStencil = 1
d3dpp.AutoDepthStencilFormat = D3DFMT_D16
Set D3DDevice = D3D.CreateDevice
(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
hWnd, _
                                     
D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)
If D3DDevice Is Nothing Then Exit Function
D3DDevice.SetRenderState D3DRS_ZENABLE, 1
InitD3d = True
End Function
Как видите, в этом примере разрешение экрана установливается
такое же, как и у рабочего стола, что гарантирует то, что данный
режим поддерживается видеокартой пользователя.

Доступные видеорежимы

Комментариев: 48
Разместил: admin
Дата размещения: 7 февраля 2008
Счётчик просмотров: 65535
Оценка:
Подробнее...
Создание прозрачных объектов и зеркал Visual Basic » Статьи » Графика

Создание прозрачных объектов и зеркал

Alpha blending

Помимо красной, зелёной и синей составляющих каждый пиксель имеет "прозрачную" составляющую - альфа канал (alpha channel). Альфа канал, как правило, имеет столько же бит, сколько и каждый из трёх цветов. Если альфа канал восьмибитный, то 0 означает, что пиксель полностью прозрачен, а 255 - что пиксель полностью не прозрачен, если же альфа канал принимает любое другое значение, то пиксель прозрачен лишь в некоторой степени. Alpha blending используется для отображения прозрачных и полупрозрачных пикселей. Включается alpha blending следующим образом:

' g_D3DDevice - ссылка на проинициализированный объект Direct3DDevice8     
g_D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True

Прозрачность может содержаться в вершинах, материалах или текстурах. Рассмотрим подробнее прозрачность в материалах. За основу программы возьмём проект, созданный нами в четвёртой части учебника DirectX Graphics (с вращающимся в пространстве жёлтым цилиндром). В конец функции InitD3d помимо показанной выше строки необходимо добавить этот код:

g_D3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA
g_D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA

Параметры альфа блендинга задаются методом SetRenderState, у которого первый параметр - D3DRS_SRCBLEND или D3DRS_DESTBLEND, а второй параметр - константа из набора CONST_D3DBLEND. Дело в том, что при альфа блендинге мы смешиваем цвета двух пикселей: исходного и существуюшего. Исходный пиксель берётся из нашего прозрачного объекта, а существующий - из буфера кадра (frame buffer), он получается в результате рендеринга объектов сцены, расположенных за прозрачным объектом. Вклад исходного пикселя в цвет итогового определяется с помощью D3DRS_SRCBLEND, а вклад существующего - с помощью D3DRS_DESTBLEND. Вызывая метод SetRenderState, у котрого первый параметр - одна из этих двух констант и комбинируя значения второго параметра этого метода можно получить различные интересные эффекты.

Последнее, что остаётся сделать - это создать материал, обладающий прозрачностью. Сделать это можно, на пример, так:

Dim col As D3DCOLORVALUE
Dim mtrl As D3DMATERIAL8
With col: .r = 1: .g = 1: .b = 1: .a = 0.2: End With
mtrl.diffuse = col
mtrl.Ambient = col
g_D3DDevice.SetMaterial mtrl

Выполнив описанные действия и запустив Вашу программу на выполнение Вы увидите нечто подобное этому:

Комментариев: 2
Разместил: admin
Дата размещения: 7 февраля 2008
Счётчик просмотров: 25894
Оценка:
Подробнее...
Основы DirectSound Visual Basic » Статьи » Графика

Проигрывание wave-файлов с помощью DirectSound

Так же, как от DirectInput чаще всего требуется работа с клавиатурой, DirectSound часто используется просто для воспроизведения *.wav файлов. Но в отличие от элемента управления MMControl DirectSound имеет возможность воспроизводить несколько файлов одновременно. В этой статье показано, как инициализировать объект DirectSound, загрузить данные из звукового файла в буффер DirectSound и воспроизвести звук  из этого буффера.

Для начала создайте новый проект и подключите к нему библиотеку DirectX 8 for Visual Basic Type Library. Объявите следующие переменные уровня модуля формы:

Dim dx As New DirectX8 'Объект DirectX
Dim ds As DirectSound8 'Объект DirectSound
'2 Буффера для воспроизведения звука
Dim dsBuffer1 As DirectSoundSecondaryBuffer8
Dim dsBuffer2 As DirectSoundSecondaryBuffer8

Как видите, кроме объектов DirectX и DirectSound мы объявили 2 буффера для воспроизведения звука. Максимальное количество одновременно воспроизводимых файлов равно количеству буфферов DirectSound.

Комментариев: 184
Разместил: admin
Дата размещения: 7 февраля 2008
Счётчик просмотров: 65535
Оценка:
Подробнее...
Учебник DirectInput: часть 2 Visual Basic » Статьи » Графика

Часто помимо работы с клавиатурой приложение должно уметь работать и с мышью. В этом учебнике мы рассмотрим два способа работы с мышью. Первый из них мало отличается от рассмотренного в предыдущей части учебника, а второй использует буферизированные данные.

Работа с мышью - 1

Начнём с нескольких объявлений:

Dim DX As New DirectX8 'объект DirectX
Dim DI As DirectInput8 'объект DirectInput
Dim diDev As DirectInputDevice8 ' устройство DirectInput
Dim diState As DIMOUSESTATE 'структура для хранения состояния мыши

Функция, инициализирующая DirectInput будет такой:

Public Function InitDI() As Boolean
Set DI = DX.DirectInputCreate
If DI Is Nothing Then Exit Function
Set diDev = DI.CreateDevice("guid_SysMouse")
If diDev Is Nothing Then Exit Function
diDev.SetCommonDataFormat DIFORMAT_MOUSE
diDev.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_BACKGROUND
diDev.Acquire
InitDI = True
End Function
Комментариев: 26
Разместил: admin
Дата размещения: 7 февраля 2008
Счётчик просмотров: 65535
Оценка:
Подробнее...
Учебник DirectInput: часть 1 Visual Basic » Статьи » Графика

Работа с клавиатурой

Самой сложной частью DirectX является, несомненно, Direct3d. DirectInput, конечно, тоже имеет свои тонкости, но, как правило, при написании программы от него требуется только работа с клавиатурой. Помимо этого, с помощью DirectInput Вы можете работать с мышью, джойстиком и другими устройствам. В отличии от известных вам событий элементов управления KeyPress, KeyDown и т. д., DirectInput работает непосредственно с драйверами устройств ввода. За счёт этого достигается, например, возможность контроля над нажатием нескольких клавиш одновременно, что неосуществимо обычными средствами. Так что, если Вы решили писать игру на Visual Basic, без DirectInput не обойтись.

В этой части учебника показано, как работать с клавиатурой посреством DirectInput. Для этого необходимо создать объект DirectInput, устройство DirectInput, настроить это устройство соответствующим образом, получить текущее состояние клавиатуры и, в конце, уничтожить созданные объекты.

Итак, начнём. Подключите к проекту библиотеку DirectX 8 for Visual Basic Type Library. Создайте ListBox с именем List1 и Timer с именем Timer1, свойство Interval которого установите в 100, а Enabled - False. В коде модуля формы сделайте следующие объявления:

Dim dx As New DirectX8 'объект DirectX
Dim di As DirectInput8 'объект DirectInput
Dim diDev As DirectInputDevice8 'устройство DirectInput
Dim diState As DIKEYBOARDSTATE 'структура, содержащая состояние клавиатуры

В поцедуру Form_Load добавьте следующий код:

Private Sub Form_Load()
Me.Show
If Not InitDI() Then
   MsgBox "Невозможно инициализировать DirectInput."
   End
End If
Комментариев: 26
Разместил: admin
Дата размещения: 7 февраля 2008
Счётчик просмотров: 65535
Оценка:
Подробнее...
Опрос
Пожалуйста, оцените сайт.
Отлично
Хорошо
Нормально
Плохо
Ужасно

Друзья сайта
  
Календарь
«    Октябрь 2014    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Реклама

сopyright © 2008 ASANsoft, Inc.