Daite suvet
17 отговора
590 прегледа
Re: Daite suvet
se6tam se samo za softwaren texture mapping. ne e mnogo trudno. ama trqbwa da potyrsi6 materiali po wyprosa
Re: Daite suvet
За огледална конверсия можеш да пробваш да размениш стойностите на X и Y координатите на всички точки. В някои случай резултата изглежда като завъртане надясно на 90 градуса :-))) Това е трик, а не решение обаче !
don't waste my time - waste yours !
don't waste my time - waste yours !
Re: Daite suvet
t.e. iskash da go zavartish na niakakav agal izobrajenieto ?
emi che sto ne probvash standartno da smenish koordinatnata sistema
xNew = x * cosA - y * sinA + a
yNew = x * sinA + y * sinA + b
A ti e agala na zavartane , (a,b) vektora na translacia
na tia novi koordinati zapisvash Color[x,y]
ako za tova stava vapros de 8-)
emi che sto ne probvash standartno da smenish koordinatnata sistema
xNew = x * cosA - y * sinA + a
yNew = x * sinA + y * sinA + b
A ti e agala na zavartane , (a,b) vektora na translacia
na tia novi koordinati zapisvash Color[x,y]
ako za tova stava vapros de 8-)
Браво !
Ашколсун :-)))
Ти ми хареса. Това си е математическия начин - няма значение ОС или разни софтуерни слоеве :-)))
don't waste my time - waste yours !
Ти ми хареса. Това си е математическия начин - няма значение ОС или разни софтуерни слоеве :-)))
don't waste my time - waste yours !
Re: Daite suvet
za syvalenie ne e tolkowa lesno. ako sled towa se narisuwa towa ne6to 6te widi6 4e ima dosta 4erni petna - ponqkoga matematikata ne e towa koeto e :)
Re: Daite suvet
Zatova obryshtash f-lata i gotovo. Izchislyavash spryamo target pixelite.
Re: Daite suvet
Няма никакви черни петна.
Това е начина, но по добре да се се изрази (Xold, Yold) чрез (Xnew, Ynew). Ако новото положение е завъртване на ъгъл alpha (измерен от оста Ox обратно на часовниковата стрелка) имаме:
//
След това си правим цикъл по новите координати и пренасяме точките от старите координати. Когато сме извън image_old, приемаме някакъв цвят, да речем черен:
//
Какъв е проблема?
Това е начина, но по добре да се се изрази (Xold, Yold) чрез (Xnew, Ynew). Ако новото положение е завъртване на ъгъл alpha (измерен от оста Ox обратно на часовниковата стрелка) имаме:
static double c;
static double s;
void Rotate(int Xnew, int Ynew, int *Xold, int *Yold)
{
double c = cos(alpha);
double s = sin(alpha);
*Xold = (int)(Xnew * c - Ynew *s);
*Yold = (int)(Xnew * s + Ynew *c);
}
//
След това си правим цикъл по новите координати и пренасяме точките от старите координати. Когато сме извън image_old, приемаме някакъв цвят, да речем черен:
// . . .
c = cos(alpha);
s = sin(alpha);
for(Ynew = 0; Ynew < MAXY; Ynew ++)
for(Xnew = 0; Xnew < XMAX; Xnew++)
{
Rotate(Xnew, Ynew, &Xold, &Yold);
if (точката <Xold, Yold> е извън image_old)
color = BLACK;
else
color = image_old[Xold][Yold];
image_new[Xnew][Ynew] = color;
}
// . . .
//
Какъв е проблема?
Re: Daite suvet
Проблема ми се струва е, че с чисто математическия метод, изображението може да стане доста ръбесто. То работи, ама трябва да му се приложи и някакъв AntiAliasing може би ...
Mixy
Mixy
Re: Daite suvet
hum, basi... mai sum zatapial dosta naposledak... kakuv drug metod moje da ima osven matemati4eski?
Re: Daite suvet
Какво значи AntiAliasing?
По принцип ще има някакви микроскопични дефекти - сигурно имаш в предвид че от ротацията получаваме не-цели числа, които после закръгляваме до цели координати.
А какъв избор имаме?
Може винаги да се добави някой заглаждащ филтър ... но филтъра променя образа!
Един по-слаб заглаждащ филтър може да получим чрез конволюция с матрицата
| 1 1 1 |
| 1 9 1 | * (1/17)
| 1 1 1 |
Това значи вместо да вземаме
color = image_old[Xold][Yold];
да вземем в предвид и околните pixel-и
color =
(image_old[Xold-1][Yold-1] + image_old[Xold][Yold-1] + image_old[Xold+1][Yold] +
image_old[Xold-1][Yold] + 9*image_old[Xold][Yold] + image_old[Xold+1][Yold] +
image_old[Xold-1][Yold+1] + image_old[Xold][Yold+1] + image_old[Xold+1][Yold+1])
/ 17;
Може и по-сложна логика - да засилваме или отслабваме коефициентите в конволюционната матрица в зависимост от реалните (double) стойности на Xold и Yold.
Зависи как ти харесва.
При всички случаи ще има някакви микроскопични дефекти!
Според мен всичко това е излишно.
По принцип ще има някакви микроскопични дефекти - сигурно имаш в предвид че от ротацията получаваме не-цели числа, които после закръгляваме до цели координати.
А какъв избор имаме?
Може винаги да се добави някой заглаждащ филтър ... но филтъра променя образа!
Един по-слаб заглаждащ филтър може да получим чрез конволюция с матрицата
| 1 1 1 |
| 1 9 1 | * (1/17)
| 1 1 1 |
Това значи вместо да вземаме
color = image_old[Xold][Yold];
да вземем в предвид и околните pixel-и
color =
(image_old[Xold-1][Yold-1] + image_old[Xold][Yold-1] + image_old[Xold+1][Yold] +
image_old[Xold-1][Yold] + 9*image_old[Xold][Yold] + image_old[Xold+1][Yold] +
image_old[Xold-1][Yold+1] + image_old[Xold][Yold+1] + image_old[Xold+1][Yold+1])
/ 17;
Може и по-сложна логика - да засилваме или отслабваме коефициентите в конволюционната матрица в зависимост от реалните (double) стойности на Xold и Yold.
Зависи как ти харесва.
При всички случаи ще има някакви микроскопични дефекти!
Според мен всичко това е излишно.
Re: Daite suvet
imenno, texture-mappvash
kato gledam mu triabva samo 2D taka che shte mu otpadne problema s interpolacii prez neznam si kolko pixela na 1/Z i tem podobni
kato gledam mu triabva samo 2D taka che shte mu otpadne problema s interpolacii prez neznam si kolko pixela na 1/Z i tem podobni
Re: Daite suvet
abe stavashe vapros samo za zavartane sega i filtri ako pocnesh da mu slagash otgore ste stane palna boza
zakacash za vseki ot varhovete koordinatite na teksturata ( u,v ) koito sa fiksirinai
posle puskash na novopolucenia zavartian obraz edin scanline za da go rasterizirash kato v kraistata na vseki scanline izcisliavash (uStart,vStart) i (uEnd,vEnd ) i dokato izcertavash scanline-a interpolirash mejdu tiah lineijno tai kato vsicko ti stava v 2D i na tekustite (x,y) koordinati slagash pixela ot originalnoto izobrajenie s koordinati na teksturata (u,v)
onezi (uStart,vStart) i (uEnd,vEnd) sasto mojesh da gi interpolirash poneje sa vinagi po granicnite linii na izobrajenieto
zakacash za vseki ot varhovete koordinatite na teksturata ( u,v ) koito sa fiksirinai
posle puskash na novopolucenia zavartian obraz edin scanline za da go rasterizirash kato v kraistata na vseki scanline izcisliavash (uStart,vStart) i (uEnd,vEnd ) i dokato izcertavash scanline-a interpolirash mejdu tiah lineijno tai kato vsicko ti stava v 2D i na tekustite (x,y) koordinati slagash pixela ot originalnoto izobrajenie s koordinati na teksturata (u,v)
onezi (uStart,vStart) i (uEnd,vEnd) sasto mojesh da gi interpolirash poneje sa vinagi po granicnite linii na izobrajenieto
Re: Daite suvet
>abe stavashe vapros samo za zavartane sega i filtri ako pocnesh da mu slagash otgore ste stane palna boza
>zakacash za vseki ot varhovete koordinatite na teksturata ( u,v ) koito sa fiksirinai
>posle puskash na novopolucenia zavartian obraz edin scanline za da go rasterizirash kato v kraistata na vseki scanline
> ...
ОК, не са нужни филтри.
Така ясно говориш, . . . като на себе си :( Почти не те разбирам.
Може би искаш да кажеш, че ще местиш от горе на долу една завъртяна линия върху стария образ, ще я обхождаш с алгортъма на Bresenham (както работи LineDDA от Win) и ще копираш пикселите.
Ако е това, . . . напълно съм съгласен.
>zakacash za vseki ot varhovete koordinatite na teksturata ( u,v ) koito sa fiksirinai
>posle puskash na novopolucenia zavartian obraz edin scanline za da go rasterizirash kato v kraistata na vseki scanline
> ...
ОК, не са нужни филтри.
Така ясно говориш, . . . като на себе си :( Почти не те разбирам.
Може би искаш да кажеш, че ще местиш от горе на долу една завъртяна линия върху стария образ, ще я обхождаш с алгортъма на Bresenham (както работи LineDDA от Win) и ще копираш пикселите.
Ако е това, . . . напълно съм съгласен.
Re: Daite suvet
abe sega i az tebe ne te razbrah ama ... 8-)
otgore nadolu da samo che po novia obraz i niama da mi triabva Bresenham zastoto tia ste e horizontalna 8-)
a kato minavam po pikselite ot novia ste izcisliavam na bazata na tiah koi ot staria saotvetstvat
otgore nadolu da samo che po novia obraz i niama da mi triabva Bresenham zastoto tia ste e horizontalna 8-)
a kato minavam po pikselite ot novia ste izcisliavam na bazata na tiah koi ot staria saotvetstvat
Re: Daite suvet
OK,
извинявам се, че и аз не бях точен.
Програмата дето показах по-горе работи точно така: обхожда новия образ отгоре - надолу и на всяка стъпка пресмята координатите в стария образ.
За съжаление тази трансформация трябва да се прави WIDTH * HEIGHT пъти за всяка точка (X, Y).
Помислих, че с Bresenham може да се избегнат част от сметките, но май не е много ясно дали може да стане.
извинявам се, че и аз не бях точен.
Програмата дето показах по-горе работи точно така: обхожда новия образ отгоре - надолу и на всяка стъпка пресмята координатите в стария образ.
За съжаление тази трансформация трябва да се прави WIDTH * HEIGHT пъти за всяка точка (X, Y).
Помислих, че с Bresenham може да се избегнат част от сметките, но май не е много ясно дали може да стане.