Понедельник, 18 Ноября 2024, 00:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Работа с DirectX 8. Поможете?
FSOДата: Суббота, 23 Июня 2012, 17:12 | Сообщение # 1
почетный гость
Сейчас нет на сайте
-Mikle- ,Помоги со своим кодом. Боюсь не правильно понять код, что бы потом глупостей не наделать. Вот как я код понимаю. Источник вот
Код:

Dim dx8 As New DirectX8 - Переменная как новый дирекс 8
Dim d3d As Direct3D8 - переменная для инициализации дирекса и работы с 3D
Dim d3dDevice As Direct3DDevice8 - Основной параметр с графикой

Private Sub D3DInit()
Dim DispMode As D3DDISPLAYMODE - информация о дисплее
Dim d3dpp As D3DPRESENT_PARAMETERS - переменная для параметров

Set d3d = dx8.Direct3DCreate - инициализация дирекса
d3d.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode - переменная принимает инфу о видеорежиме

d3dpp.Windowed = True - указываем компу, что это работа в окне
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD - как перенос картинки из BackBuffer'а
d3dpp.BackBufferFormat = DispMode.Format - картинка должна быть и соответствовать переметрам экрана

Set d3dDevice = d3d.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Me.hWnd _
, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp) - А тут я не понял
End Sub

Я в этом начале пока застрял. Я хоть правильно начал мыслить?


GCup.ru ? Не, не слышал!
-Mikle-Дата: Суббота, 23 Июня 2012, 17:29 | Сообщение # 2
Изобретатель велосипедов
Сейчас нет на сайте
Последняя строка - это создание устройства для рендера d3dDevice (это не "Основной параметр с графикой"), параметры функции по очереди:
D3DADAPTER_DEFAULT - первичная, принятая по умолчанию, видеокарта (их бывает много).
D3DDEVTYPE_HAL - аппаратное ускорение текстурирования.
Me.hWnd - на какое окно выводить изображение.
D3DCREATE_SOFTWARE_VERTEXPROCESSING - вертексы рассчитывать на процессоре (это для совместимости, не все видюхи тогда могли считать вертексы, актуально и сейчас на встроенных Intel)
d3dpp - с такими параметрами создаём девайс.
FSOДата: Суббота, 23 Июня 2012, 22:35 | Сообщение # 3
почетный гость
Сейчас нет на сайте
-Mikle-, фух up кажется понимаю. Это нормально, что я так застрял в начале?

Добавлено (23.06.2012, 21:26)
---------------------------------------------
Quote (-Mikle-)
Последняя строка - это создание устройства для рендера d3dDevice


Ну так рендер работает с обработкой и просчетом изображения вроде. Значит вроде с графой тоже? Или я ошибаюсь?

Добавлено (23.06.2012, 22:35)
---------------------------------------------
-Mikle-, объясни следующую часть кода по строчке:

Private Sub ClearAll() - Это я понял, что переменные удаляются (очищаются), но для чего?
Set d3dDevice = Nothing
Set d3d = Nothing
Set dx8 = Nothing
End Sub

Private Sub Form_Load()
Me.Show - как я понял, вывод на экран содержимое SwapEffects. Прости, если нагрузил facepalm
D3DInit
Running = True - Что это? Откуда оно взялось?
Do While Running - Для чего Do While?
DoEvents
Render
Loop
Unload Me - Зачем закрывать программу, если она работает стабильно + если написано Unload Me, то почему окно не закрывается. То есть Unload Me не надо?
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) - Это что за функция?
If Running Then
Cancel = 1: Running = False - Эмм... не понял
Else
ClearAll
End If
End Sub

Private Sub Render() - Как я понял, вывод линий на экран.

d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, Rnd * &HFFFFFF, 1, 0 - Сначала очищает и задает сучайный цвет линии.
d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0 - Не понял.
End Sub

Помоги разобраться с этим кодом. Я стараюсь понять, но для всего надо время. Я начинаю понимать, но нужно разобраться с каждым винтиком, что бы понять, для чего он служит. Спасибо


GCup.ru ? Не, не слышал!

Сообщение отредактировал FSO - Суббота, 23 Июня 2012, 22:38
-Mikle-Дата: Воскресенье, 24 Июня 2012, 11:19 | Сообщение # 4
Изобретатель велосипедов
Сейчас нет на сайте
Quote
Это я понял, что переменные удаляются (очищаются), но для чего?

Перед завершением программы нужно удалять все объекты, созданные не средствами VB6, например DirectX, GDI и т. п. Иначе они останутся висеть мусором в памяти.
Рендер в DirectX делается в бесконечном цикле, а VB6 - событийно-ориентирован, приходится этот цикл создавать искусственно - от Do до Loop. Переменная Running сделана для того, чтобы этот цикл можно было прервать. Когда цикл прерван - программа завершена, поэтому сразу Unload, чтобы не оставалась висеть пустая форма.
Процедура Form_Load выполняется ещё до того, как форма отобразилась на экран, пока Form_Load не завершится, форма не отобразится, поэтому её перед началом цикла искусственно отображаем с помощью Me.Show
Quote
Сначала очищает и задает сучайный цвет линии

Это очистка не линии, а всей формы, если ты видишь линии, значит цвета меняются слишком быстро, монитор не успевает это отобразить, это нормально.
d3dDevice.Present - это вывод нарисованного изображения на форму. DirectX всё рисует сначала в память, а когда изображение готово - его отображают с помощью Present.
Большая часть твоих вопросов касаются не DirectX, а общего программирования на VB6. Погугли и почитай про объектно-ориентированное программирование, событийно-ориентированное программирование.
FSOДата: Воскресенье, 24 Июня 2012, 13:40 | Сообщение # 5
почетный гость
Сейчас нет на сайте
-Mikle-, я почитаю. Но у меня вроде не плохо VB на знаниях лежит. Лан, пока спасибо biggrin

GCup.ru ? Не, не слышал!

Сообщение отредактировал FSO - Воскресенье, 24 Июня 2012, 13:41
FirstДата: Понедельник, 29 Октября 2012, 18:45 | Сообщение # 6
Уолтер Брайт
Сейчас нет на сайте
FSO, получается? На VB легче создать полноценную 2D игру высокого качества. Используй API функции. Используй BitBlt, которая прекрасно работает с графикой, прекрасно сглаживает объект при перемещении (особенно полезно, если объект немного крив), создает объемность для объекта и т.д. С 3D на VB нужно попотеть, что бы выучить основы его. В любом случае решать тебе.

P.S. - только сейчас обратил внимание, что FSO забанен. Зато кто-то другой прочитает и задумается.
PBPROGДата: Понедельник, 29 Октября 2012, 19:33 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Quote (First)
Зато кто-то другой прочитает и задумается.
Ага и вы этому другому окажите "медвежью услугу".
Включите логику - BitBlt работает без аппаратного ускорения видеокарты и при большом числе объектов начнет сильно тормозить несмотря на крутое видео!
FirstДата: Понедельник, 29 Октября 2012, 19:40 | Сообщение # 8
Уолтер Брайт
Сейчас нет на сайте
Quote (PBPROG)
BitBlt работает без аппаратного ускорения видеокарты и при большом числе объектов начнет сильно тормозить несмотря на крутое видео!


Если правильно ею пользоваться, все идет прекрасно (проверял). Так же присутствует методы замены.

2D игры есть разные. Это не обязательно навороченная игра. Главное иметь умный подход к этому


Сообщение отредактировал First - Понедельник, 29 Октября 2012, 19:40
PBPROGДата: Понедельник, 29 Октября 2012, 20:29 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Только не нужно утверждать что игра без поддержки аппаратного ускорения видео, "порвет" игру с такой поддержкой! biggrin
Если так хочется легкости разработки игр, то можете использовать, скажем PureBasic.
У него есть 2D и 3D движки с поддержкой ускорения видео. smile
Вот функции 2D движка.
Спрайты
Немного 3D в реализации 2D движка.
Джойстик
Клава
Воспроизведение трекерной музыки
Мышка
Палитра
Звук


Сообщение отредактировал PBPROG - Понедельник, 29 Октября 2012, 20:32
FirstДата: Понедельник, 29 Октября 2012, 20:55 | Сообщение # 10
Уолтер Брайт
Сейчас нет на сайте
Quote (PBPROG)
Только не нужно утверждать что игра без поддержки аппаратного ускорения видео, "порвет" игру с такой поддержкой!


Я даже об этом не говорил. Есть разные методы разработки. Я всегда вспоминаю правило, что создать программу можно не меньше, чем двумя путями, но программа будет той же программой, которая и планировалась.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг