hRet := FD3DDevice.BeginScene; // ΠΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ
if FAILED(hRet) then begin // ΠΊ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
Result := hRet;
Exit; end;
// ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΡΠ΅ΠΊ
hRet := FD3DDevice.DrawPrimitive(D3DPT_POINTLIST, 0, MAXPOINTS);
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;
// ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΠΊΠΎΠ΄ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
hRet := FD3DDevice.EndScene;
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΡΡΠ½ΠΈΡΡ ΠΈΠ»ΠΈ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π»Π°Π΄:
hRet := FD3DDevice.DrawPrimitive(D3DPT_POINTLIST, 0, random(MAXPOINTS));
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ², ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, ΡΡΠ°Π»ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ°ΠΌΠΌΡ: ΠΎΠ΄Π½ΠΈ ΡΠΎΡΠΊΠΈ ΠΌΠ΅ΡΡΠ°ΡΡ, Π΄ΡΡΠ³ΠΈΠ΅ - Π½Π΅Ρ. ΠΠ°Π½Π½ΡΠ΅, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠ΅ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ°, Π±ΡΠ΄ΡΡ ΡΠ΅ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ, ΡΠ΅ΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π΅Π³ΠΎ Π½Π°ΡΠ°Π»Ρ.
Π§ΡΠΎΠ±Ρ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΌ, Π½Π°Π΄ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π² ΠΊΠ°Π΄ΡΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 200 ΡΠΎΡΠ΅ΠΊ, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
for i := 0 to 200 do begin
hRet := FD3DDevice.DrawPrimitive(D3DPT_POINTLIST,
random (MAXPOINTS), 1);
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;
end;
ΠΠΎ Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 08 ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠ΅ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ°Π΄ΡΠ°. ΠΠ΅ΡΠ΅Π΄ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° DrawPrimitive ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ Π±ΡΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π½ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠΎΠ΄ Π½Π΅ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΡΠ΅ΠΊ:
function TfrmDSD.GenPoints : HRESULT;
var
pVertices : PByte;
hRet : HRESULT; i : Integer;
begin
for i := 0 to MAXPOINTS - 1 do with VPoints [i] do begin
X := random (300);
Y := random (300); // ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΠΌ
end;
hRet := FD3DVB.Lock(0, SizeOf(VPoints), pVertices, 0);
if Failed (hRet) then begin
Result := hRet;
Exit;
end;
Move (VPoints, pVertices", SizeOf(VPoints));
Result := FD3DVB.Unlock;
end;
ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ° Π²Π΅ΡΡΠΈΠ½ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°, Π»ΠΈΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π±ΡΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π½ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡΠΎ Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° Ρ Π°ΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ, Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 09 ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΠ΅ ΡΠΈΡΡΠ΅ΡΡΡ Π²ΡΠ°ΡΠ°ΡΡΠ°ΡΡΡ ΡΠΏΠΈΡΠ°Π»Ρ (ΡΠΈΡ. 7.3).
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠ΅ΠΊ Ρ Π²Π·ΡΠ» ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ. ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠ΅ΠΊ ΡΠΏΠΈΡΠ°Π»ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠΊΡΠ°Π½Π°:
var
Angle : Single = 0.0;
function TfrmD3D.GenPoints : HRESULT;
var
pVertices : PByte;
hRet : HRESULT; i : Integer;
const
Step = 2 * Pi / MAXPOINTS;
begin
for i := 0 to MAXPOINTS - 1 do with VPoints [i] do begin
X := 150 + cos (Angle + Step * 5 * i) * i / 20;
Y := 150 + sin (Angle + Step * 5 * i) * i / 20;
end;
Angle := Angle + 0.1;
if Angle > 2 * Pi then Angle := Angle - 2 * Pi;
hRet := FD3DVB.Lock(0, SizeOf(VPoints), pVertices, 0);
if Failed (hRet) then begin
Result := hRet;
Exit;
end;
Move (VPoints, pVertices^, SizeOf(VPoints));
Result := FD3DVB.Unlock;
end;
Π Π΅ΠΆΠΈΠΌΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ².
ΠΠ΅ΡΠΎΠ΄Ρ GetRenderState Π SetRenderState ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ , Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ².
ΠΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅. Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 10 ΡΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌΠ°Ρ Π½Π°ΠΌ ΠΏΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΠ°ΡΠ°ΡΡΠ°ΡΡΡ ΡΠΏΠΈΡΠ°Π»Ρ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ (ΡΠΈΡ. 7.4).
Π ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ startPointsize ΡΠΈΠΏΠ° DWORD ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΎΡΠ΅ΠΊ, ΠΏΡΠΈΠ½ΡΡΠΎΠΌΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
FD3DDevice.GetRenderState(D3DRS_POINTSIZE, StartPointsize);
ΠΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΡΠΊΠ°Ρ. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° - ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ°Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠΎΡΠΎΠΉ - ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎ DirectX, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ DirectXGraphics.pas. ΠΠΌΠ΅Π½Π° ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° "D3DRS_"; ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΎ ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ.
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠΎΡΠ΅ΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π΅Π», Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΡΠ΅ΠΊ:
FD3DDevice.GetRenderState(D3DRS_POINTSIZE, PointSize);
FD3DDevice.SetRenderState(D3DRS_POINTSIZE, trunc (1.001 * PointSize));
if PointSize > 1.02 * StartPointSize
then FD3DDevice.SetRenderState(D3DRS_POINTSIZE, StartPointSize);
ΠΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° setRenderState ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, ΡΡΠΎ ΠΈ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° GetRenderState; Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π’ΠΈΠΏ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠ±ΠΎΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ DWORD, Ρ ΠΎΡΡ ΡΠ°ΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π±ΡΠ»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ 1.0, Ρ. Π΅. Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, Π½ΠΎ Π΄Π»Ρ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π½Π°Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΡΠΊΠΈ Π² Π΄Π²Π° ΡΠ°Π·Π° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΡΠΈΠ½ΡΡΡΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° single ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΈΠΏ DWORD:
wrk := 2.0;
FD3DDevice.SetRenderState(D3DRS POINTSIZE, PDWORD (@wrk)^);
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ SetRenderState, Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, Ρ. Π΅. ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°
ΠΌΠ΅ΡΠΎΠ΄Π° BeginScene ΠΈ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° End-Scene.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Ex11: ΡΠ°Π±ΠΎΡΠ° Π΅Π³ΠΎ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π½ΠΎ ΠΊΠΎΠ΄ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΡΠΎΡΠΊΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅:
var
PointSize : Single = 1.0;
...
PointSize := 1.3 * PointSize;
if PointSize > 10.0 then PointSize := 1.0;
FD3DDevice.SetRenderState(D3DRS_POINTSIZE, PDWORD (@PointSize)^);
ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ»ΡΠΆΠΈΡ Π±ΡΠ»Π΅Π²ΡΠΌ ΡΠ»Π°Π³ΠΎΠΌ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΡΠ΅ΠΆΠΈΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ: DWORD (True).
ΠΡ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠΈ. ΠΡΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ, Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΡΡ Π΄ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π΅Π»Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ.
ΠΠ»ΠΎΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
Direct3D ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 12 ΡΠΊΡΠ°Π½ ΡΡΠ΅ΠΈΠ²Π°Π΅ΡΡΡ Ρ Π°ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠΌΠΈΡΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ: ΠΎΠ΄Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ, Π² ΡΡΠΈ ΡΠ°Π·Π° ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΡΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π° Π΄ΡΡΠ³Π°Ρ - ΡΠ°Π·ΠΌΠ΅Ρ, Π² ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ (ΡΠΈΡ. 7.5).
ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠΎΡΠ΅ΠΊ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° DWORD, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π΄Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ:
PointSize := 4.0; // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΡΠ΅ΠΊ
with FD3DDevice do begin
BeginStateBlock; // ΠΠ°ΡΠ°Π»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
SetRenderState(D3DRS_POINTSIZE, PDWORD (@PointSize)^);
EndStateBlock (PointSize4); // ΠΠΎΠ½Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
end;
PointSize := 3.0; // ΠΡΠΎΡΠΎΠΉ Π±Π»ΠΎΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ, Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΡΠ΅ΠΊ
with FDSDDevice do begin
BeginStateBlock;
SetRenderState(D3DRS_POINTSIZE, PDWORD (@PointSize)^);
EndStateBlock (PointSizeS);
end;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ°ΠΌΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅ΠΆΠΈΠΌΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, Ρ. Π΅. Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ.
ΠΠ°ΡΡΠΈΠ² Π²Π΅ΡΡΠΈΠ½ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π΅ΡΠΏΡΠ΅ΡΡΠ²Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ, Π° ΠΏΠ΅ΡΠ΅Π΄ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠΎΡΠ΅ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ ApplyStateBiock ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π² Π½ΡΠΆΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°:
// ΠΠ°Π΄Π°Π΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ 3-ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡΠ΅ΠΊ
hRet := FD3DDevice.ApplyStateBiock (PointSize3);
// Π ΠΈΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠΎΡΠ΅ΠΊ
hRet := FDSDDevice.DrawPrimitive(D3DPT_POINTLIST, 0, MAXPOINTS div 2);
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ 4-ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡΠ΅ΠΊ
hRet := FDSDDevice.ApplyStateBiock (PointSize4);
// Π ΠΈΡΡΠ΅ΠΌ Π²ΡΠΎΡΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠΎΡΠ΅ΠΊ
hRet := FDSDDevice.DrawPrimitive(D3DPT_POINTLIST,
(MAXPOINTS div 2) - 1, MAXPOINTS div 2);
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π»ΠΈΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ApplyStateBiock, ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π²Π»ΠΈΡΡΡΠΈΠ΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ.
ΠΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΡΠΎΡΠΊΠΈ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ Π½Π°ΡΡΠΈΠΌΡΡ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ FVF-ΡΠ»Π°Π³.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 13 ΡΠΊΡΠ°Π½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ Π°ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°Π·Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ (ΡΠΈΡ. 7.6).
ΠΠ°ΠΏΠΈΡΡ ΡΠΎΡΠΌΠ°ΡΠ° Π²Π΅ΡΡΠΈΠ½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ»Π΅ΠΌ, Ρ ΡΠ°Π½ΡΡΠΈΠΌ ΡΠ²Π΅Ρ Π²Π΅ΡΡΠΈΠ½Ρ, ΡΠΈΠΏ Π΅Π΅ DWORD:
type
TCUSTOMVERTEX = packed record
X, Y, Z, RHW : Single;
Color : DWORD; // ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅