Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° DirectX Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 52

Автор ΠœΠΈΡ…Π°ΠΈΠ» ΠšΡ€Π°ΡΠ½ΠΎΠ²

X, Y : DWORD;

Bmp, wrkBmp : TBitmap;

R, G, Π’ : Byte;

begin

Bmp := TBitmap.Create;

Bmp.LoadFromflie (FileName);

wrkBmp := TBitmap.Create;

wrkBmp.Width := 128;

wrkBmp.Height := 128;

// ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исходного растра

wrkBmp.Canvas.StretchDraw (Rect (0, 0, 128, 128), Bmp);

hRet := frmDSD.FD3DDevice.CreateTexture (wrkBmp.Width, wrkBmp.Height,

0, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, FDSTexture);

if FAILED(hRet) then begin

if Failed (hRet) then frmDSD.ErrorOut ('InitTexture', hRet);

Exit;

end;


hRet := FD3Texture.LockRect(0, d3dlr, nil, 0);

if FAILED(hRet) then begin

if Failed (hRet) then frmDSD.ErrorOut ('InitTexture', hRet);

Exit;

end;


dwDstPitch := d3dlr.Pitch; for Y := 0 to wrkBmp.Height - 1 do

for X := 0 to wrkBmp.Width - 1 do begin

R := GetRValue(wrkBmp.Canvas.Pixels[X, DWORD (wrkBmp.Height-1)-Y]);

G := GetGValue(wrkBmp.Canvas.Pixels[X, DWORD (wrkBmp.Height-1)-Y]);

Π’ := GetBValue(wrkBmp.Canvas.Pixels[X, DWORD (wrkBmp.Height-1)-Y]);

// ΠŸΠΈΠΊΡΠ΅Π»Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ

if (R = inR) and (G = inG) and (B = inB)

then PDWORD (DWORD(d3dlr.pBits) + Y * dwDstPitch + X * 4)^ :=

D3DCOLOR__ARGB(0, R, G, B)

else PDWORD (DWORD(d3dlr.pBits) + Y * dwDstPitch + X * 4)" :=

D3DCOLOR_ARGB(255, R, G, B);

end;


hRet := FD3Texture.UnlockRect(0) ;

if FAILED(hRet) then begin

if Failed (hRet) then frmD3D.ErrorOut ('InitTexture', hRet);

Exit;

end;


Bmp. Free ; wrkBmp.Free ;

end;


Π˜Ρ‚Π°ΠΊ, всС растровыС изобраТСния ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Ρ€Π°Π·ΠΌΠ΅Ρ€ 128x128 пиксСлов, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ исходныС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… окаТутся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ искаТСнными Π² своих пропорциях.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… нарисована Π½Π° красном Ρ„ΠΎΠ½Π΅, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ - Π½Π° Π·Π΅Π»Π΅Π½ΠΎΠΌ:


for i := 0 to NumFish - 1 do begin // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

case random (4) of

0 : Fishes [i] := TFish.Create ('Fishl.bmp', 0, 255, 0);

1 : Fishes [i] := TFish.Create ('Fish2.bmp', 255, 0, 0) ;

2 : Fishes [i] := TFish.Create ('Fish3.bmp', 0, 255, 0);

3 : Fishes [i] := TFish.Create ('Fish4.bmp', 0, 255, 0);

end;


with Fishes [i] do begin PosX := random - 0.5;

PosY := (random (60) - 30) / 100;

StepX := (random - 0.5) / 10;

if StepX < 0 then RotateTexture; // ВрСбуСтся ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Scale := (random (60) + 40) / 100;

end;


end;


Π’ исходных ΠΎΠ±Ρ€Π°Π·Π°Ρ… Ρ€Ρ‹Π±ΠΊΠΈ нарисованы ΠΏΠ»Ρ‹Π²ΡƒΡ‰ΠΈΠΌΠΈ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ содСрТимоС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° пСрСворачиваСтся:


function TFish.RotateTexture : HRESULT;

var

d3dlr : TD3DLOCKED_RECT;

dwDstPitch : DWORD;

pDst, pDstl : PDWORD;

X, Π£ : DWORD;

wrkDW : DWORD;

begin

FD3Texture.LockRect(0, d3dlr, nil, 0);

dwDstPitch := d3dlr.Pitch;

for Y := 0 to 127 do

for X := 0 to 63 do begin //Π”ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π·Π°

// ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ содСрТимоС Π΄Π²ΡƒΡ… пиксСлов

pDst := PDWORD (DWORD(d3dlr.pBits) + Y * dwDstPitch + X * 4);

pDstl := PDWORD (DWORD(d3dlr.pBits) + Y * dwDstPitch +

(127 - X) * 4);

wrkDW := pDsf\-pDst^;

pDstlA; pDst^;:= wrkDW;

end;


Result := FD3Texture.UnlockRect(0) ;

end;


Π‘ΡƒΡ„Π΅Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½ инициализируСтся с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΠ΄ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для изобраТСния Ρ€Ρ‹Π±ΠΊΠΈ этот Π±ΡƒΡ„Π΅Ρ€ заполняСтся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… сторон ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°. Π Π°Π·ΠΌΠ΅Ρ€ стороны ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° - scale:


function TFish.Draw : HRESULT;

var

Vertices : ATCustomVertex;

hRet : HRESULT;

begin

hRet := frraD3D.FD3DVB.Lock(0, 4 * SizeOf(TCustomVertex), PByte(Vertices), 0);

if Failed(hRet) then begin

Result := hRet;

Exit;

end;


Vertices.X = -0.5 + PosX; // Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y = -0.5 + PosY;

Vertices.Z = 0;

Vertices.U = 0;

Vertices.V = 0;

Inc(Vertices);

Vertices.X = -0.5 + PosX; // Π›Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y = -0.5 + Scale + PosY;

Vertices.Z = 0;

Vertices.U = 0;

Vertices.V = 1;

Inc(Vertices);

Vertices.X = -0.5 + Scale + PosX; // ΠŸΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y = -0.5 + PosY;

Vertices.Z = 0;

Vertices.U = 1;

Vertices.V = 0;

Inc(Vertices) ;

Vertices.X = -0.5 + Scale + PosX; // ΠŸΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

Vertices.Y = -0.5 + Scale + PosY;

Vertices.Z = 0;

Vertices.U = 1;

Vertices.V = 1;

frmD3D.FD3DVB.Unlock;

with frmD3D.FD3DDevice do begin

SetTexture(0, FD3Texture);

SetTextureStageState(0, D3DTSS_COLOROP, D3DTA_TEXTURE);

SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTAJTEXTURE);

SetRenderState(D3DRS_ALPHABLENDENABLE, DWORD (True));

SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);

SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2) ;

SetRenderState(D3DRS_ALPHABLENDENABLE, DWORD (False));

end;


Result := frmD3D.FD3DDevice.SetTexture(0, nil);

end;


Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, связанный с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ:


procedure TFish.Move; begin

PosX := PosX + StepX;

if (PosX < -1.5) or (PosX > 1.5) then begin // Π£Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ экрана

RotateTexture; // ΠŸΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·

StepX := -StepX; // МСняСм Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅

end;


end;


Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ΄ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сократился, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стало Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Π½ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 20-Π°ΠΊΡΠ΅Π»Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π½Π΅ смогут ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² этой Π³Π»Π°Π²Π΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π½Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Direct3D. ΠœΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π°Π»ΡŒΡ„Π°-ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², познакомились с ваТнСйшим понятиСм тСкстуры.

Π˜Π³Ρ€Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ эффСкты ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании DirectDraw.

Π“Π»Π°Π²Π° 9 Π’Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ построСния


ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

РСалистичныС изобраТСния

Π‘ΡƒΡ„Π΅Ρ€ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² этой Π³Π»Π°Π²Π΅


ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ основан Π½Π° свСдСниях ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Ρ‹, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅: Π² Π½Π΅ΠΉ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅.

Π’Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшого экскурса Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Π°Π»Π³Π΅Π±Ρ€Ρƒ. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅ знакомство с Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ изучСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², связанных с 3D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, рассматриваСмыС Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ \Examples\Chapter09.

ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ приступим ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ Π² пространствС, Π½Π°ΠΌ прСдстоит ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π°ΠΆΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π°Ρ…, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, хотя ΠΎΠ½ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, казалось Π±Ρ‹, ΠΈ Π½Π΅ связаны с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π°ΠΌΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…, посвящСнных Direct3D. Π‘ΡƒΡ„Π΅Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½ заполняСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠ± ΠΎΠΏΠΎΡ€Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ…, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹. Если ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ экрану, Π±ΡƒΡ„Π΅Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½ заполняСтся Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°Π΄ΠΎ Π·Π°ΠΏΠ΅Ρ€Π΅Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ содСрТимому, ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… построСниях ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… содСрТат Ρ‚Ρ€ΠΈ пространствСнныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΈ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π½Π°Π΄ΠΎ для Π½Π°Ρ‡Π°Π»Π° Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Z-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ, Ρ€Π°Π½Π΅Π΅ Π½Π°ΠΌΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΅Ρ‰Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, Π½ΠΎ интуиция подсказываСт, Ρ‡Ρ‚ΠΎ для рисования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΡƒΠ±ΠΈΠΊΠ°, Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠ΅ стороны ΠΊΡƒΠ±Π°, манипулируя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. А для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊΡƒΠ±ΠΈΠΊ, слСдуСт пСриодичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½. Но ΠΌΡ‹ сразу ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ ΠΌΡ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· заполняли Π±ΡƒΡ„Π΅Ρ€ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ ΠΊΡƒΠ±ΠΈΠΊΠ΅, Π° воспроизводили Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ полоТСния. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ: Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· массивом Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… сцСны, Π° ΠΏΡ€ΠΈ воспроизвСдСнии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊ рСсурсам ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, указывая Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² пространствС. К Ρ‚Π°ΠΊΠΎΠΌΡƒ порядку дСйствий ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚ΡŒΡΡ. НС использовал я Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ боялся Π½Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ вас ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° (этого я боюсь ΠΈ сСйчас), ΠΈ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ двигались шаг Π·Π° шагом. Но, ΠΊ соТалСнию, сСйчас Π½Π°ΠΌ придСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большой скачок, ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΏΠΎΡ‚ΠΊΠ½ΡƒΡ‚ΡŒΡΡ, слСдуСт ΡƒΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. НачнСм.

ΠŸΡ€ΠΈ описании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±ΡƒΡ„Π΅Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½ опираСмся Π½Π° ΠΌΠΈΡ€ΠΎΠ²ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π˜Π½Ρ‹ΠΌΠΈ словами, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ всС ΠΎΠ½ΠΈ находятся Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π°Ρ‡Π°Π»Π° глобальной систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны Π½Π°Π΄Π΅Π»ΡΡŽΡ‚ΡΡ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ с ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ систСмой. КаТдая трансформация систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, связанной с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ трансформации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если ΠΏΠ΅Ρ€Π΅Π΄ воспроизвСдСниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠΌ мСстС, Ρ‚. Π΅. ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ смСщСнной ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСскольким осям систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Для осущСствлСния ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π½ΠΈΠΌ, Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· осСй. Если Π½Π° сцСнС присутствуСт нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ рисованиСм ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… трансформируСм систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

НадСюсь, ΠΏΠΎΠΊΠ° всС понятно ΠΈ просто, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ собствСнно ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ манипуляции с систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘Π°ΠΌΡ‹ΠΌΠΈ популярными матСматичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ для описания Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ слуТат Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ. ВрСхмСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° базируСтся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΌ элСмСнтом ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° (Ρ‚Π°Π±Π»ΠΈΡ†Π° чисСл) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4x4. Π― знаю ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ всСгда ΠΈ Ρƒ всСх, ΠΊΡ‚ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΠ»Ρ‹ΡˆΠΈΡ‚ ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ. Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ для описания Ρ‚ΠΎΡ‡ΠΊΠΈ Π² пространствС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ числа, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ характСристикС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ любой смысл, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, заряд частицы ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½Π°Ρ масса. Π’ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ называСтся W-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для осущСствлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ экрана. Π­Ρ‚ΠΎ вСсовой Ρ„Π°ΠΊΡ‚ΠΎΡ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ Π΅Π΅ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ задаСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ.