Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TeksturMeping

[es] :: 3D programiranje :: TeksturMeping

[ Pregleda: 2563 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goq

Član broj: 12091
Poruke: 79
*.yubc.net



Profil

icon TeksturMeping12.07.2003. u 13:45 - pre 253 meseci
Ljudi, da li neko ima proceduru za TextureMapping u 2D prostoru (bez 3D korekcija i sl, samo da se razvuce slika).
Najbolje da je pisana na pascal-delphi jeziku.

Prevrnuh pola interneta ali nisam nasao neku normalnu proceduru. Najbolje sto sam nasao je ovo:

// Make sure to add Math to your uses clause.

procedure TForm1.bmp_rotate(src,dst:tbitmap;angle:extended);
var
c1x,c1y,c2x,c2y:integer;
p1x,p1y,p2x,p2y:integer;
radius,n:integer;
alpha:extended;
c0,c1,c2,c3:tcolor;
begin
//calculate the angle to pi-format
angle := (angle / 180) * pi;

// calculate the central points
c1x := src.width div 2;
c1y := src.height div 2;
c2x := dst.width div 2;
c2y := dst.height div 2;

// number of steps
if c2x < c2y then
n := c2y
else
n := c2x;
dec (n,1);

// starting rotation
for p2x := 0 to n do begin
for p2y := 0 to n do begin
if p2x = 0 then
alpha:= pi/2
else
alpha := arctan2(p2y,p2x);
radius := round(sqrt((p2x*p2x)+(p2y*p2y)));
p1x := round(radius * cos(angle+alpha));
p1y := round(radius * sin(angle+alpha));

c0 := src.canvas.pixels[c1x+p1x,c1y+p1y];
c1 := src.canvas.pixels[c1x-p1x,c1y-p1y];
c2 := src.canvas.pixels[c1x+p1y,c1y-p1x];
c3 := src.canvas.pixels[c1x-p1y,c1y+p1x];

dst.canvas.pixels[c2x+p2x,c2y+p2y]:=c0;
dst.canvas.pixels[c2x-p2x,c2y-p2y]:=c1;
dst.canvas.pixels[c2x+p2y,c2y-p2x]:=c2;
dst.canvas.pixels[c2x-p2y,c2y+p2x]:=c3;
end;
application.processmessages
end;
end;

// Here is how to call it
procedure TForm1.bmpRotateClick(Sender: TObject);
Var
RAngle : Extended;
begin
RAngle := StrToFloat(Edit1.Text);
bmp_rotate(Image1.Picture.Bitmap,Image2.Picture.Bitmap, RAngle);
end;

Smesno, i uz to sporo (:.)
 
Odgovor na temu

bokash

Član broj: 658
Poruke: 35
212.200.84.*

Sajt: bokash.co.yu


Profil

icon Re: TeksturMeping13.07.2003. u 04:32 - pre 253 meseci
Ako ti treba samo razvlacenje onda koristi Blt.
Ova funkcija dole je koliko sam shvatio za rotiranje bitmape.
Sta ti treba preciznije?

pozdrav od Borisa
 
Odgovor na temu

Goq

Član broj: 12091
Poruke: 79
*.yubc.net



Profil

icon Re: TeksturMeping13.07.2003. u 10:14 - pre 253 meseci
Hvala sto, zelis da mi pomognes. Nisam bio najprecizniji : meni treba procedura sledeceg oblika:

procedure map(t1,t2,t3,t4:Tpoint,.....)

Slika treba da se razvuce izmedju 4 tacke. Blt funkcija iscrtava slike pod pravim uglom (BitBlt recimo).


 
Odgovor na temu

bokash

Član broj: 658
Poruke: 35
212.200.84.*

Sajt: bokash.co.yu


Profil

icon Re: TeksturMeping15.07.2003. u 05:34 - pre 253 meseci
AKo hoces deformaciju slike u nepravilnom cetvorouglu
onda algoritam mora da negde duplira piksele a negde
da ih oduzima i sigurno je kompleksniji od ovog za rotaciju.
Zamisli konkavan cetvorougao koji zauzima par procenata
originala.
Jedna ideja ( na dugom stapu):
Uzmes GDI+, kod njega brush moze da bude bitmapa
pa da njome crtas u regionu ili pathu. KAko ce to da ispadne
nemam pojma, nemam GDI+ dokumentaciju.
Ako bi te zadovoljilo da jednostavno odseces delove bitmape
onda radis sa regionima (pogledaj clanke o skiningu).
DirectX ima implementirane gornje pomenute algoritme
(nearest-point sampling, linear filtering, anisotropic filtering,
bilinear filtering) pri mapiranju tekstura.
Ako neko ima bolju ideju i mene bi zanimalo.
pozdrav od Borisa
 
Odgovor na temu

[es] :: 3D programiranje :: TeksturMeping

[ Pregleda: 2563 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Kliknite za generisanje liste srodnih tema...
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.