原型 extern void far d3scale (int points, int xscale, int yscale,int zscale, D3Point far *inary, D3Point far *outary)
輸入 numpoints - 縮放的點數
xscale - X軸方向的縮放因子
yscale - Y軸方向的縮放因子
zscale - Z軸方向的縮放因子
inary - 指向包含待縮放點數組的D3Point型指針
輸出 無返回值
outary - 指向包含縮放後點數組的D3Point型指針
用法 D3SCALE將三維數組inary中的每個坐標乘以相應的縮放因子。結果通過outary返回,outary可與inary共用一個空間。縮放因子為256(100hex)被認為是100%,結果無變化。同理,128(80hex)被認為縮小一半;512(200hex)則為放大一倍。此函式假定outary已合適分配.
例子
/*
* shows d3scale works
*/
#include <stdlib.h>
#include <conio.h>
#include "svgacc.h"
D2Point plot[8];
void drwcube(void);
void main(void)
{
int vmode,i,dummy;
ProjParameters proj;
D3Point scube[8];
D3Point cube[8] = { { 100,-100, 100},
{ 100,-100,-100},
{ 100, 100,-100},
{ 100, 100, 100},
{-100,-100, 100},
{-100,-100,-100},
{-100, 100,-100},
{-100, 100, 100}};
vmode = videomodeget();
if (!whichvga() || (whichmem() < 512))
exit(1);
res640();
proj.eyex = -1040;
proj.eyey = -600;
proj.eyez = -1200;
proj.scrd = 1700;
proj.theta = 30;
proj.phi = 45;
for(i=256;i>=128;i-=4)
{
d3scale(8,i,i,i,cube,scube);
dummy = D3PROJECT(8,&proj,scube,plot);
drwcube();
sdelay(2);
drwcube();
}
for(i=132;i<=256;i+=4)
{
d3scale(8,i,i,i,cube,scube);
dummy = d3project(8,&proj,scube,plot);
drwcube();
sdelay(2);
drwcube();
}
drwcube();
getch();
videomodeset(vmode);
}
void drwcube(void)
{
int j;
for(j=0;j<=2;j++)
DRWLINE(2,10,plot[j].x,plot[j].y,plot[j+1].x,plot[j+1].y);
drwline(2,10,plot[3].x,plot[3].y,plot[0].x,plot[0].y);
for(j=4;j<=6;j++)
drwline(2,10,plot[j].x,plot[j].y,plot[j+1].x,plot[j+1].y);
drwline(2,10,plot[7].x,plot[7].y,plot[4].x,plot[4].y);
for(j=0;j<=3;j++)
drwline(2,10,plot[j].x,plot[j].y,plot[j+4].x,plot[j+4].y);
return;
}