Работа с 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-, фух кажется понимаю. Это нормально, что я так застрял в начале?
Добавлено (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. Прости, если нагрузил 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 на знаниях лежит. Лан, пока спасибо
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 |
постоянный участник
Сейчас нет на сайте
| Только не нужно утверждать что игра без поддержки аппаратного ускорения видео, "порвет" игру с такой поддержкой! Если так хочется легкости разработки игр, то можете использовать, скажем PureBasic. У него есть 2D и 3D движки с поддержкой ускорения видео. Вот функции 2D движка. Спрайты Немного 3D в реализации 2D движка. Джойстик Клава Воспроизведение трекерной музыки Мышка Палитра Звук
Сообщение отредактировал PBPROG - Понедельник, 29 Октября 2012, 20:32 |
|
| |
First | Дата: Понедельник, 29 Октября 2012, 20:55 | Сообщение # 10 |
Уолтер Брайт
Сейчас нет на сайте
| Quote (PBPROG) Только не нужно утверждать что игра без поддержки аппаратного ускорения видео, "порвет" игру с такой поддержкой!
Я даже об этом не говорил. Есть разные методы разработки. Я всегда вспоминаю правило, что создать программу можно не меньше, чем двумя путями, но программа будет той же программой, которая и планировалась.
|
|
| |
|