|
发表于 2020-9-3 12:15:01
|
显示全部楼层
我有类似代码,关键是要将3维变为屏幕2维坐标,列举几例,不用OpenGl等东西.
realP[3]为你的原始3维数据点坐标,scrP为2维的屏幕坐标,生成2维点后,你Lineto不就行了?但我这个程序未实现任意角度的转换,至于还要穿插缩放与偏移算法,这里恕不展示了.
switch(ViewType)
{
case VIEWTYPE_FUS://俯视图
scrP->x = realP[0];
scrP->y = realP[1];
break;
case VIEWTYPE_ZHS://正视图
scrP->x = realP[0];
scrP->y = realP[2];
break;
case VIEWTYPE_YOS://右视图
scrP->x = realP[1];
scrP->y = realP[2];
break;
case VIEWTYPE_ZD0://西南正等轴测图
scrP->x = (realP[0]-realP[1])*COS_30;
scrP->y = (realP[0]+realP[1])*SIN_30+realP[2];
break;
case VIEWTYPE_ZD1://东南正等轴测图
scrP->x = (realP[0]+realP[1])*COS_30;
scrP->y = (realP[1]-realP[0])*SIN_30+realP[2];
break;
......
default:
scrP->x = 0;
scrP->y = 0;
break;
} |
|