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

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

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

XPos := NewXPos; ZPos := NewZPos;

end;


end;


// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Result := DIKeyboard.GetDevicestate(SizeOf(KeyBuffer), @KeyBuffer);

if KeyBuffer[DIK_ESCAPE] and $80 <> 0 then begin // Esc

Close;

Exit;

end;


// НаТата клавиша "Π²ΠΏΡ€Π°Π²ΠΎ", вычисляСм Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² пространствС

if KeyBuffer[DIK_RIGHT] and $80 <> 0 then begin

XPos := XPos - sin(RotY) * 0.05;

ZPos := ZPos - cos(RotY) * 0.05;

end;


// НаТата клавиша "Π²Π»Π΅Π²ΠΎ"

if KeyBuffer[DIK_LEFT] and $80 <> 0 then begin

XPos := XPos + sin(RotY) * 0.05;

ZPos := ZPos + cos(RotY) * 0.05;

end;


// НаТата клавиша "Π²Π½ΠΈΠ·"

if KeyBuffer[DIK_DOWN] and $80 ΠΎ 0 then begin

XPos := XPos + sin(RotY - Pi / 2) * 0.05;

ZPos := ZPos + cos(RotY - Pi / 2) * 0.05;

end;


// НаТата клавиша "Π²Π²Π΅Ρ€Ρ…" if KeyBuffer[DIK_UP] and $80 <> 0 then begin

XPos := XPos + sin(RotY + Pi / 2) * 0.05;

ZPos := ZPos + cos(RotY + Pi / 2) * 0.05;

end;


// НаТата клавиша "F", ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FPS

if KeyBuffer[DIK_F] and $80 <> 0 then begin

flgFPS := not flgFPS; // ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ значСния Ρ„Π»Π°Π³Π°

Sleep (50); // МалСнькая ΠΏΠ°ΡƒΠ·Π°

end;


// Клавиша <Page Up>, Π³ΠΎΠ»ΠΎΠ²Ρƒ Π·Π°Π΄ΠΈΡ€Π°Π΅ΠΌ Π²Π²Π΅Ρ€Ρ…

if KeyBuffer[DIK_PRIOR] and $80 <> 0 then begin

Lookupdown := Lookupdown + 0.05;

if Lookupdown > 1 then Lookupdown := 1;

end;


// Клавиша <Page Down>, Π³ΠΎΠ»ΠΎΠ²Ρƒ опускаСм Π²Π½ΠΈΠ·

if KeyBuffer[DIK_NEXT] and $80 <> 0 then begin

Lookupdown := Lookupdown - 0.05;

if Lookupdown < -1 then Lookupdown := -1;

end;


end;


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

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, свободСн Π»ΠΈ ΠΏΡƒΡ‚ΡŒ, я ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽ самый простой ΠΌΠ΅Ρ‚ΠΎΠ΄: Π² Π·Π°Π΄Π½Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅ сцСна воспроизводится Π² Π½ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, взгляд Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΈ этом ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ двиТСния. Π“Π»Π°Π· Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ опускаСм Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΠ»Ρƒ, ΠΈ выясняСм Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ, располоТСнной прямо ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ двиТСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ» ΠΎΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ красным, Π° прСпятствия ΠΈ Ρ„ΠΎΠ½ - синим, Ρ‚ΠΎ синий Ρ†Π²Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ подошСл ΠΊ Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ сСктора:


function TfrmD3D.TestRender (const XPos, ZPos, RotY : Single) : BOOL;

var

i : Integer; matView : TD3DMatrix; d3dlr : TD3DLOCKED_RECT;

dwDstPitch : DWORD; DWColor : DWORD;

Π’ : Byte; // Доля синСго пиксСла ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ

begin

Π’ := 0; // ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ компилятора

// Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° сцСну ΠΈΠ· Π½ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ - Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΏΠΎΠ»Ρƒ

SetViewMatrix(matView, D3DVector(XPos, 0,1, ZPos),

D3DVector(XPos + cos(RotY), 0.1,

ZPos -sin(RotY)), ZVector); // Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ воспроизвСдСниС сцСны

with FD3DDevice do begin

Clear(0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,

$000000FF, 1.0, 0); BeginScene;

// ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ источники свСта

-SetRenderState(D3DRS_LIGHTING, DWORD (False)); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ„Ρ„ΡƒΠ·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ описания Π²Π΅Ρ€ΡˆΠΈΠ½ SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

SetTransform(D3DTS_VIEW, matView);

SetStreamSource(0, FD3DVB, SizeOf(TNormDiffTextVertex));

SetVertexShader(D3DFVF_NORMDIFFTEXTVERTEX); SetTransform(D3DTS_WORLD, IdentityMatrix);

end;


// РисуСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ

for i := 0 to NumTriangles - 1 do with FD3DDevice do

DrawPrimitive(D3DPT_TRIANGLELIST, 1*3, 1);

with FD3DDevice do begin

EndScene;

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Π·Π°Π΄Π½Π΅ΠΌΡƒ Π±ΡƒΡ„Π΅Ρ€Ρƒ

GetBackBuffer (О, D3DBACKBUFFER_TYPE_MONO, FD3SurfBack);

SetRenderState(D3DRS_LIGHTING, DWORD (True));

end;


// Π—Π°ΠΏΠΈΡ€Π°Π΅ΠΌ Π·Π°Π΄Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€

FD3SurfBack.LockRect (d3dlr, nil, D3DLOCK_READONLY);

dwDstPitch := d3dlr.Pitch;

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ долю синСго Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ case

FD3DfmtFullscreen of D3DFMT_X8R8G8B8 : begin

DWColor := PDWORD (DWORD(d3dlr.pBits) + TestPointY * dwDstPitch +

TestPointX * 4)^; Π’ := DWColor and $lf;

end;


D3DFMT_R5G6B5 : begin

DWColor := PDWORD (DWORD(d3dlr.pBits) + TestPointY * dwDstPitch +

TestPointX * 2}Π›; Π’ := DWColor and $lf;

end;


end;


FDSSurfBack.UnLockRect;

// НСт синСго Ρ†Π²Π΅Ρ‚Π°, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ

Result := not (Π’ <> 0);

end;


Π‘ΠΈΠ½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ взят мною Π² качСствС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π΅Π³ΠΎ Π²Ρ‹Ρ€Π΅Π·ΠΊΠΈ трСбуСтся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· использования ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ DWColor.

Если установлСн 24-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ D3DFMT_R8G8B8, Ρ‚ΠΎ Π₯-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π°Π΄ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 3, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ отводится для ΠΎΠ΄Π½ΠΎΠ³ΠΎ пиксСла Π² этом Ρ€Π΅ΠΆΠΈΠΌΠ΅.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° для опрСдСлСния столкновСния с прСпятствиями бСрСтся ΠΎΠ΄Π½Π° - посСрСдинС экрана ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, Π½Π° 10 пиксСлов Π²Ρ‹ΡˆΠ΅ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана:


ScreenWidth := GetSystemMetrics(SM_CXSCREEN);

ScreenHeight := GetSystemMetrics(SM_CYSCREEN);

TestPointX := ScreenWidth div 2;

TestPointY := DWORD{ScreenHeight - 10);

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ здСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ - самый простой, Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ самый ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ. На Π΅Π³ΠΎ основС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ быстрыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ области, доступныС для нахоТдСния, ΠΈ Ρ‚ΠΎΠ³Π΄Π° достаточно Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ "ΠΏΠΎΠ΄ Π½ΠΎΠ³Π°ΠΌΠΈ". Π’ этом случаС описаниС ΠΌΠΈΡ€Π° услоТняСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ описываСтся Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΈ трСбуСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. Π’ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ пСрСмСщСния ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ пространствСнными, различая ΠΏΠΎ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°ΠΌ высоту прСпятствий. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² пространствС являСтся дискрСтным, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ массивом, значСния элСмСнтов ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТат Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ возмоТности нахоТдСния ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ пространства, свСдСния ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ для этой Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ тСкстур, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ высотС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°Π»Π΅ΠΊ ΠΏΠΎ своСму качСству ΠΎΡ‚ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠΉ. ΠœΠ°ΡΡ‚Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ с большой ΠΈΡ€ΠΎΠ½ΠΈΠ΅ΠΉ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° наши ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΌΠΈΡ€Π΅ программирования Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€, Π½ΠΎ вСдь Π½Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ трСбуСтся ΠΊΡƒΠ»ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ образования для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ сСбС ΠΎΠ±Π΅Π΄, вСдь Ρ‚Π°ΠΊ? И Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΡƒΠ»ΠΈΠ½Π°Ρ€Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ нашС ΠΊΡƒΡˆΠ°Π½ΡŒΠ΅, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π³ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΌΠΈ. На этом простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, дальшС ΠΆΠ΅ Π½Π°ΠΌ прСдстоит ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Но эта Ρ‚Π΅ΠΌΠ° ΠΈΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, Π° данная ΠΊΠ½ΠΈΠ³Π° Π½Π° этих словах заканчиваСтся.

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

Direct3D располагаСт массой срСдств, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ высококачСствСнных ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈ Π² настоящСй Π³Π»Π°Π²Π΅ рассмотрСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшая ΠΈΡ… доля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΡƒΠΌΠ°Π½ ΠΈ источник свСта.

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

Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ Π³Π»Π°Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ простого Π΄Π²ΠΈΠΆΠΊΠ° Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹.


Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅


НадСюсь, ΠΊΠ½ΠΈΠ³Π° принСсла Π²Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΈ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρƒ вас появились ΠΈ замСчания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ со ΠΌΠ½ΠΎΠΉ: [email protected]

Π‘ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΎΠΉ Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ знакомство с DirectX, Π½ΠΎ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π²ΠΎΠ΄Π½ΠΎΠ΅ руководство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ лишь Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‚ΠΎΠ»ΠΈΠΊΡƒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹. Π’ Π½Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Ρ‚ Π½ΠΈ слова ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Direct3DX, Π° это ΠΎΡ‡Π΅Π½ΡŒ ваТная Ρ‚Π΅ΠΌΠ°. ΠžΡ‚ΠΊΠ°Π·Π°Π»ΡΡ я ΠΎΡ‚ Π΅Π΅ рассмотрСния ΠΏΠΎΡΡ‚ΠΎΠ»ΡŒΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Delphi, доступна ΠΎΠ½Π° лишь Π² Π²ΠΈΠ΄Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ нСстандартных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ послС прочтСния ΠΊΠ½ΠΈΠ³ΠΈ Π²Π°ΠΌ Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ дСйствия, Ρ‚Π°ΠΊΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° тСкстур.

Книга Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ, Π½ΠΎ Ρ‚Π΅ΠΌΠ° Π΅Π΅ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π° вмСстС с Π½Π΅ΠΉ, ΠΈ, навСрняка, Π²Ρ‹ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ большСС. Π― Ρ…ΠΎΡ‡Ρƒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ мСста, Π³Π΄Π΅ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π΅Ρ‰Π΅ массу ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Помимо адрСсов, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π΅Ρ‰Π΅ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ссылок.

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π• 1

Глоссарий


2D Graphics

ДвумСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. ДСйствиС Π² Ρ‚Π°ΠΊΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ происходит Π½Π° ΠΎΠ΄Π½ΠΎΠΉ плоскости.

3D Graphics

ВрСхмСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. ГрафичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° дисплСС Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны.

Alpha

ΠΠ»ΡŒΡ„Π°. ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ прозрачности. Π’ описаниС Ρ†Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ, называСмая Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»ΠΎΠΌ.

Alpha blending

ΠΠ»ΡŒΡ„Π°-смСшСниС. БмСшиваниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ² исходного ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ пиксСлов для достиТСния эффСкта прозрачности ΠΈ просвСчивания.

Alpha channel

ΠΠ»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π». Массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… способ объСдинСния пиксСлов изобраТСния-источника с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ. ΠΠ»ΡŒΡ„Π°-Π±ΡƒΡ„Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прозрачности, размытия Π³Ρ€Π°Π½ΠΈΡ† ΠΈ создания Ρ‚ΡƒΠΌΠ°Π½Π°.

Ambient

ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ срСда. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ свСта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ свСтит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²ΠΎ всСх направлСниях, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΡΠ²Π΅Ρ‰Π°ΡŽΡ‚ΡΡ с Ρ€Π°Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ.

API (Application Programming Interface)

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программирования. БпСцификация Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для совмСстимости своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

Back buffer

Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. Π’ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ осущСствляСтся воспроизвСдСниС. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ замСняСт ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ (Front buffer) ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, выводится Π½Π° экран.

BitBLT (Bit BLock Transfer)

ГрафичСская опСрация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пиксСлов копируСтся ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ участками памяти с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ графичСской памяти.

Bitmap

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ массив. Π§Π°Ρ‰Π΅ всСго примСняСтся для хранСния ΠΎΠ±Ρ€Π°Π·Π° растра.