![]() |
![]() |
![]() |
| 4.51.2.4.3. ogAvail() | Table of Contents | 4.51.2.4.5. ogCircle() |
procedure ogBSpline(numPoints: uInt32; var points : array of ogPoint2d; segments, colour:uInt32);Remarks:
Draws a B-Spline approximating a curve defined by the array of points. A B-Spline generally does not normally pass through the points defining it.
Segments is the number of line segments to use inbetween each point. The higher the number, the smoother the B-Spline looks, but the longer it takes to render.
See also: Sample Code:
{ogBSpline.pas}
uses
ObjGfx40, CRT;
const MAX_NODES = 6;
var
i: uIn32;
points: array [ 0..MAX_NODES-1 ] of ogPoint2d;
dX, dY: array [ 0..MAX_NODES-1 ] of int32;
var
buf:^ogSurface;
begin
randomize;
new(buf, ogInit);
if not screen^.ogCreate(640, 480, OG_PIXFMT_32BPP) then
begin
writeln('Error setting video mode');
halt
end;
buf^.ogClone(screen^);
with buf^ do
for i:=0 to MAX_NODES-1 do
begin
Points[i].X := random(ogGetMaxX);
Points[i].Y := random(ogGetMaxY);
DX[i] := random(4)+1;
DY[i] := random(4)+1;
end;
repeat
buf^.ogClear(buf^.ogRGB(0,0,0));
for i:=0 to MAX_NODES-1 do
begin
points[i].x := points[i].x + dX[i];
if (points[i].x >= buf^.ogGetMaxX) or (points[i].x <= 0) then
dX[i] := -dX[i];
pPoints[i].y := points[i].y + dY[i];
if (points[i].y >= buf^.ogGetMaxY) or (points[i].y <= 0) then
dY[i] := -dY[i];
buf^.ogFillCircle(points[i].x, points[i].y, 5, buf^.ogRGB(0,128,128));
end;
{Draw a spline in blue}
buf^.ogSpline(MAX_NODES, points, 20, buf^.ogRGB(128,128,255));
{draw a BSpline in red}
buf^.ogBSpline(MAX_NODES, points, 20, buf^.ogRGB(255,128,128));
screen^.ogCopy(buf^);
until keyPressed;
while keyPressed do readKey;
dispose(buf, ogDone);
end.
![]() |
![]() |
![]() |
| 4.51.2.4.3. ogAvail() | Table of Contents | 4.51.2.4.5. ogCircle() |