综合实验里 3dplay.c 下有这么一段
void t3d_pixel_transform,这是是什么样的模型? 求详述。
//核心算法部分
//3d转2D函数, pangle-旋转角度,ptrandis-移动位置, ppixel-要转换的像素, ppreturn-转换后的2D值保存到这
//pangle:角度.单位为弧度,而不是°.如果要用度表示的话,需要乘以π/180
//ptrandis:移动位置(当前点所围绕操作的点的坐标,3D像素点)
//ppixel:要转换的像素点(3D像素点)
//ppreturn:转换完成后的像素点(2D像素点)
void t3d_pixel_transform(_t3d_obj* t3dx,u16 pixindex)
{
signed long lsinx,lcosx,lsiny,lcosy,lsinz,lcosz;
signed long ltempx,ltempy,ltempz;
signed long ldx,ldy,ldz;
float tdx,tdy;//必须要的2个个浮点数据,否则在x/y轴上会有点问题.
lsinx=my_sin(t3dx->ang.x);
lcosx=my_cos(t3dx->ang.x);
lsiny=my_sin(t3dx->ang.y);
lcosy=my_cos(t3dx->ang.y);
lsinz=my_sin(t3dx->ang.z);
lcosz=my_cos(t3dx->ang.z);
//开始计算和转换
ldx = t3dx->p3dbuf[pixindex].x;
ldy = t3dx->p3dbuf[pixindex].y;
ldz = t3dx->p3dbuf[pixindex].z;
ltempy = ldy*lcosx - ldz*lsinx;
ltempz = ldy*lsinx + ldz*lcosx;
ldy = ltempy;
ldz = ltempz;
ltempx = ldx*lcosy*1000 - ldz*lsiny;
ltempz = ldx*lsiny*1000 + ldz*lcosy;
ldx = ltempx/1000;
ldz = ltempz/10000;//得到扩大100倍的结果
ltempx = ldx * lcosz - ldy * lsinz;
ltempy = ldx * lsinz + ldy * lcosz;
ldx = ltempx/100000;
ldy = ltempy/100000;
tdx = ldx + t3dx->dis.x*10;
tdy = ldy + t3dx->dis.y*10;
ldz = ldz - t3dx->dis.z*100 + t3dx->offz*100;
t3dx->p2dbuf[pixindex].x = (((tdx-USRX)*USRZ)/ldz) + t3dx->offx;
t3dx->p2dbuf[pixindex].y = (((tdy-USRY)*USRZ)/ldz) + t3dx->offy;
t3dx->p2dbuf[pixindex].color=t3dx->p3dbuf[pixindex].color;
} |