Mikle
Чет я такой тупой....
Так?
1-----2(6) | /| | / | | / | | / | | / | | / | 3(5)----4
Если вертексы нумеровать так:
1 3 5 7 9
2 4 6 8
То треугольники можно рисовать так:
1-3-2, 2-3-4, 3-5-4, 4-5-6...
А можно так:
1-3-2, 2-4-3, 3-5-4, 4-6-5...
В первом случае все треугольники рисуются по чс, во втором случае идёт чередование по-против чс.
Все разобрался, обновил DX и все заработало...
Как там прогресс со звуком?
Начал пилить шейдеры, столкнулся с проблемой...
Написал тестовый шейдер для бампа:
ps_2_0 dcl t0 dcl_2d s0 texldp r0, t0, s0 dp3 r0, r0, c0 mov oC0, r0
Долго мучался с расчетом вектора, и для надежности взял 100% рабочий код от Mikle:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Dim v2 As D3DVECTOR2, v3 As D3DVECTOR If Not running Then Exit Sub v2.x = (0.5 - x / Me.ScaleWidth) * 2 v2.y = (0.5 - y / Me.ScaleHeight) * 2 If Vec2Length(v2) > 1 Then Vec2Normalize v2, v2 v3.x = v2.x: v3.y = v2.y v3.z = Sqr(1.0001 - v3.x * v3.x - v3.y * v3.y) v1.x = v3.x v1.y = v3.y v1.z = v3.z End Sub
PS: v1-вектор для передачи шейдеру
Свет расспростроняется как то не так...
Где я ошибся?
После texldp значение в выборке от 0 до 1, а нужно от -1 до 1.
Mikle
Есть какая-то хитрость? Или в лоб (r0*2)-1
>Добавлено
Заработало:
ps_2_0 dcl t0 dcl_2d s0 def c2,2,-1,0,0 texldp r0, t0, s0 mad r0,r0,c2.x,c2.y dp3 r0,r0,c0 mov oC0, r0
PS: никогда бы не додумался...
Всё правильно.
Запутался с GetDIBits... Как можно скопировать область(rect) исходника в массив?
Как я понял в структуру t_bit_info надо задавать данные исходника... А в t_max_size.y количество сканов по X... Значит только резать уже полученный массив?
With t_bit_info.bmiHeader .biBitCount = 32& .biPlanes = 1& .biSize = Len(t_bit_info.bmiHeader) .biWidth = t_max_size.x .biHeight = -t_max_size.y .biSizeImage = (t_max_size.x * t_max_size.y - 1) * 4& End With 'подготовим массив для загрузки ReDim t_data(t_max_size.x * t_max_size.y - 1) 'захватим GetDIBits t_DC, t_bitmap, 0&, t_max_size.y, t_data(0), t_bit_info, 0&
max255
> .biSizeImage = (t_max_size.x * t_max_size.y - 1) * 4&
Тут "-1" не нужно ставить, только в ReDim. (Так вот откуда у тебя появляется ошибка :) )
max255
> Значит только резать уже полученный массив?
Похоже, что так, либо построчно в цикле выполнять GetDIBits, но это, скорее всего, будет медленнее.
Mikle
> Тут "-1" не нужно ставить, только в ReDim.
Точно!!! Меня этот "косяк" уже полгода мучает...
Пошел исправлять...
Решил покрутить ScriptControl
Кто нибудь работал с этой штуковиной? Что можете сказать о ней?
Нормально работает, особенно удобен именно с VB6 - можно передавать в SC параметрами объекты вплоть до форм.
Mikle
Думаю юзать его для расчета игровой логики.
Столкнулся с траблой... При отрисовке 200000 примитивов(частиц) за один проход приложение зависло, после чего упал драйвер видеокарты...
В капсах число намного больше чем 200000... Тут есть какие-то хитрости?
max255
> При отрисовке 200000 примитивов(частиц) за один проход приложение зависло,
> после чего упал драйвер видеокарты...
А отрисовка с какой попытки? Может ты просто корректно не уничтожал вертексбуферы и переполнил видеопамять? Попробуй отрисовать на свежеперезагруженной винде.
Mikle
> не уничтожал вертексбуферы
Это же частицы... Буфер постоянно меняется... Я юзал UP...
> свежеперезагруженной винде.
Так же помер... На этот раз даже bsod показал...
Тема в архиве.