Вращающийся шар

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

Модератор: Mikle

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

Re: Вращающийся шар

Сообщение lellel » 10.11.2008 (Пн) 20:56

Dim Mtrx as D3DMATRIX

a1ewka-gal4onok
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 31.10.2008 (Пт) 17:39

Re: Вращающийся шар

Сообщение a1ewka-gal4onok » 11.11.2008 (Вт) 9:13

:) действительно.. Глобальную переменную-то не задал..

Теперь немного отвлеченный вопрос, пока делаю полосы прокрутки и другие элементы формы.. А можно ли снизить нагрузку на процессор? Когда, например, шар не движется, и когда движется. Заранее спасибо! ::)

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Вращающийся шар

Сообщение Debugger » 11.11.2008 (Вт) 17:51

Это ловить можно, но не стоит - ибо столько гемора наловишь, а полученный результат сомнителен.
Загрузка на процессор должна быть 100% - ибо наша прогамма делает что-то в цикле.
Если ты запускаешь другие программы одновременно с этой и смотришь, как они тормозят - так и должно быть.
З.Ы. а если скролбара всего 2... Может быть, тебе вообще не стоит юзать 3D, а просто создать двухмерную коллекцию картинок с глобусом и выводить соответствующую для текущего положения скролбаров?..

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

Re: Вращающийся шар

Сообщение Ktulhu » 11.11.2008 (Вт) 18:26

a1ewka-gal4onok писал(а):А можно ли снизить нагрузку на процессор? Когда, например, шар не движется, и когда движется. Заранее спасибо! ::)

можно. цикл прорисовки вызывай из события Scroll скроллбаров. при этом в цикле сперва должен вызыватся d3ddevice.Clear(), а в конце цикла d3ddevice.Reset(), но не наоборот.

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

Re: Вращающийся шар

Сообщение Mikle » 11.11.2008 (Вт) 19:31

Может не Reset, а Present?
А про событие Scroll мысль верная, еще можно вызывать из Paint, чтобы картинка не пропадала при перекрытии формы другими формами.

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

Re: Вращающийся шар

Сообщение Ktulhu » 12.11.2008 (Ср) 0:39

Mikle писал(а):Может не Reset, а Present?
А про событие Scroll мысль верная, еще можно вызывать из Paint, чтобы картинка не пропадала при перекрытии формы другими формами.

точно-точно. напутал. Present().

a1ewka-gal4onok
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 31.10.2008 (Пт) 17:39

Re: Вращающийся шар

Сообщение a1ewka-gal4onok » 12.11.2008 (Ср) 2:15

Ну наконец-то на моей улице праздник! Начинаю потихоньку понимать всю логику :)
Спасибо! Сделал так:
Код: Выделить всё
Private Sub HScroll1_Change()
    d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFFFFFF, 1, 0
    D3DXMatrixRotationY Mtrx, QTime * 0.5
    d3dDevice.SetTransform D3DTS_WORLD, Mtrx
    d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Private Sub VScroll1_Change()
    d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFFFFFF, 1, 0
    D3DXMatrixRotationX Mtrx, QTime * 0.5
    d3dDevice.SetTransform D3DTS_WORLD, Mtrx
    d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Всё замечательно! Но есть ещё вопрос :roll:
А как сделать тогда так, чтобы при перемещении ScrollBar`ов шар вращался, причём так, чтобы не было видно мерцания, связанного с &HFFFFFFв d3dDevice.Clear?

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Вращающийся шар

Сообщение djalex777 » 12.11.2008 (Ср) 10:09

a1ewka-gal4onok писал(а):Ну наконец-то на моей улице праздник! Начинаю потихоньку понимать всю логику :)
Спасибо! Сделал так:
Код: Выделить всё
Private Sub HScroll1_Change()
    d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFFFFFF, 1, 0
    D3DXMatrixRotationY Mtrx, QTime * 0.5
    d3dDevice.SetTransform D3DTS_WORLD, Mtrx
    d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Private Sub VScroll1_Change()
    d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFFFFFF, 1, 0
    D3DXMatrixRotationX Mtrx, QTime * 0.5
    d3dDevice.SetTransform D3DTS_WORLD, Mtrx
    d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub



А книжку ты всё таки не читал... Какой смысл этого кода???

Всё замечательно! Но есть ещё вопрос :roll:
А как сделать тогда так, чтобы при перемещении ScrollBar`ов шар вращался, причём так, чтобы не было видно мерцания, связанного с &HFFFFFFв d3dDevice.Clear?


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

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

Re: Вращающийся шар

Сообщение Ktulhu » 12.11.2008 (Ср) 10:30

во-первых писалось HScroll1_Scroll(), а не HScroll1_Change().
после строчки
Код: Выделить всё
d3dDevice.SetTransform D3DTS_WORLD, Mtrx
рисуй свою сферу.
d3dDevice.Begin() и d3dDevice.End() не вижу.
хз что у тебя там мерцает. надеюсь, когда перенес прорисовку на скроллбары, убрал цикл из Форм_Лоада

a1ewka-gal4onok
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 31.10.2008 (Пт) 17:39

Re: Вращающийся шар

Сообщение a1ewka-gal4onok » 04.12.2008 (Чт) 23:45

Да, точно.. Спасибо, разобрался! :)

Всё вращается как надо.

Вот только вопросы не кончаются.. Господа, как сделать координатную сетку?
В общем, требуется наносить по координатам города, отмечать их красными точками.

Как поступить мне в решении этого вопроса? Где бы почитать? Или может снова дельный совет будет? :roll:

Координаты городов берутся из базы данных

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

Re: Вращающийся шар

Сообщение Ktulhu » 22.12.2008 (Пн) 14:19

Код: Выделить всё
Private Type LineVert
x As Single
y As Single
z As Single
color As Long
End Type
Private Const LineFVF = D3DFVF_XYZ Or D3DFVF_DIFFUSE

Public Sub Draw3DLine(Vec1 As D3DVECTOR, Vec2 As D3DVECTOR, Optional color1 As Long = -1, Optional color2 As Long = -1)
Dim Vert(1) As LineVert

Vert(0).color = color1
Vert(0).x = Vec1.x
Vert(0).y = Vec1.y
Vert(0).z = Vec1.z
Vert(1).color = color2
Vert(1).x = Vec2.x
Vert(1).y = Vec2.y
Vert(1).z = Vec2.z

D3DDevice.SetRenderState D3DRS_LIGHTING, 0
D3DDevice.SetVertexShader LineFVF
D3DDevice.DrawPrimitiveUP D3DPT_LINELIST, 1, Vert(0), Len(Vert(0))
End Sub

рисует линию в пространстве. можно в цикле ими сетку отрисовать. только это не самый оптимальный, с точки зрения производительности, код)

a1ewka-gal4onok
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 31.10.2008 (Пт) 17:39

Re: Вращающийся шар

Сообщение a1ewka-gal4onok » 12.05.2009 (Вт) 20:29

Всем спасибо!

Разобрался до конца, как и требовалось!
Спасибо! :roll:

Пред.

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

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

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

    TopList