Войти
Вело-изобретателиФорумSR2D - софтовый 2D движок

2D движок SR2D, Софтверный движок для работы с 2D графикой на VB6, vb.net, C# (43 стр)

Страницы: 139 40 41 42 43 44 Следующая »
#630
9:16, 21 мая 2019

Mikle
Ну будет потом когда х64, вернемся к этому вопросу с линиями.
Я сейчас все равно в депрессии, что-бы что-то кодить.

#631
12:04, 21 мая 2019

у меня есть С-код для толстых линий, 2 штуки. Работают на байтовых массивах, 32 бита на точку, 8 бит на цвет, ABGR.

нннада? о_о

#632
20:14, 21 мая 2019

StepEver
> нннада? о_о
Надо, если оно не задействует никаких зависимостей, от слова совсем никаких, даже стандартную библиотеку.

#633
11:14, 24 мая 2019

Mikle
> даже стандартную библиотеку
сабо сомой :)

+ но тут есть небольшой косяк

немного статического кода для примитивов:

+ Показать

и сам код:

+ Показать

и вот так оно друг в друга вложено:

bmpOut.DrawWideLineAA<TransPixelDraw<BNorm<DB2BA>>>(55, 67, pt.x, pt.y + 12, 5, 0xFFFF0000);

можно оптимизировать, если выкинуть функции и не менять указатель на байтовый массив перед их вызовом. Но у меня тогда была цель сделать удобно в коде.

#634
9:34, 30 мая 2019

А есть возможность что-бы drawrotate учитывал альфу?
По-моему я делал давно, очень давно по этому точно уже не помню.

#635
9:50, 30 мая 2019

SilentPrayerCG
> А есть возможность что-бы drawrotate учитывал альфу?
Я предполагал использовать вращение в два прохода - сначала во временный спрайт вращаем, потом отображаем на приёмник уже с нужным эффектом, там ведь может быть не только альфа, а любой эффект.

#636
(Правка: 14:08) 14:01, 30 мая 2019

Mikle
Да точно, так сработало, спасибо.
Т.е при drawrotate альфа не херится, просто нет опции эффекта, так получается?

а как высчитать размер спрайта, если квадрат повернут на 45 градусов?
ну т.е габариты картинки как-бы изменятся, как посчитать на сколько, что-бы спрайт куда рисуется поворот сразу был того размер какого надо?

#637
(Правка: 14:37) 14:35, 30 мая 2019

SilentPrayerCG
> Т.е при drawrotate альфа не херится, просто нет опции эффекта, так получается?
Да, альфа так же вращается, как и все слои.
SilentPrayerCG
> как высчитать размер спрайта
Нужно учитывать, что в drawrotate выбирается sx и sy - это центр вращения спрайта источника, и dx и dy - точка на приёмнике, куда попадает этот центр.
Теперь, если x и y - это координаты угла источника относительно выбранного центра, то они попадут на приёмника относительно dx и dy на:

xx = x*cos(a)-y*sin(a)
yy = y*cos(a)+x*sin(a)
#638
15:54, 2 июня 2019

У меня есть поворот, с АА и прозрачностью.
Нада?
Но я использую пререндеренные тригонометрические функции, чтобы:
Mikle
> оно не задействует никаких зависимостей, от слова совсем никаких, даже стандартную библиотеку.
пробовал играться с рядом Тейлора, но особо прироста производительности не было :)

#639
16:58, 2 июня 2019

StepEver
> У меня есть поворот, с АА и прозрачностью.
> Нада?
Сравнить бы сначала с моим по качеству и быстродействию. Есть какие-то тесты?
StepEver
> я использую пререндеренные тригонометрические функции
Зачем? Там же на весь спрайт используется один синус и один косинус, не в цикле.

#640
20:28, 2 июня 2019

Mikle
> Сравнить бы сначала с моим по качеству и быстродействию. Есть какие-то тесты?
я могу просто код дать, синусы-косинусы можно заменить на штатные

> Зачем? Там же на весь спрайт используется один синус и один косинус, не в цикле.
Ну, видимо, я изначально их сделал в целях оптимизации, а потом везде использовал.

#641
20:43, 2 июня 2019

Глянул свой RotateA, однако, там всё слегка странно сделано.
Ну, т.е. сам поворот сделан классически: на каждую точку по матрице поворота считаются 4 точки и по ним ищется среднее. Таким образом получается АА и полупрозрачность.
Но вот чтобы не делать проверки на выход за границы памяти, я сначал делаю расширение спрайта в 2 раза, потом поворачиваю, а потом обратно уменьшаю в 2 раза.
Возможно, надо просто попытаться (мне) переделать под поворот код толстой линии, она делает 1 итерацию на 1 точку, и ей пофиг на выход за границы. Собственно, взять код, примерно тот, который используется в софтрендерерах для отображения плоскости/квада. Частный случай, когда квад параллелен плоскости экрана.

RotateA я использовал активно у себя в танках. Собственно, эта самая функция "виновна" в том, что эта игра появилась на свет :) Я тогда подумал, на чём бы попробовать? В голову пришёл танк... и понеслось...
В игре у каждого спрайта есть кеш-спрайт с поворотом, чтобы не считать его постоянно на каждый кадр.

#642
21:31, 2 июня 2019

StepEver
> сам поворот сделан классически: на каждую точку по матрице поворота считаются 4
> точки и по ним ищется среднее.
Тогда это вряд ли будет быстрее моего варианта.
StepEver
> чтобы не делать проверки на выход за границы памяти, я сначал делаю расширение
> спрайта в 2 раза, потом поворачиваю, а потом обратно уменьшаю в 2 раза.
А это вообще убьёт быстродействие.

#643
5:38, 3 июня 2019

Mikle
> Тогда это вряд ли будет быстрее моего варианта.
Да, но у меня есть АА :)
Хотя надо будет пересмотреть код и сделать нормально, да.

> А это вообще убьёт быстродействие.
Не убьёт, немного подсадит.

#644
8:22, 3 июня 2019

StepEver
> Да, но у меня есть АА
Как будто у меня его нет.

Страницы: 139 40 41 42 43 44 Следующая »
Вело-изобретателиФорумSR2D - софтовый 2D движок