编程语言:C级
我目前正在实施的过程中,三维线框模型表示通过等距投影。
我目前对该项目的理解是:
1.解析包含线框模型的x、y、z坐标的文本Map
1.使用等轴测投影将3D坐标转换为2D坐标
1.使用Bresenham线算法和我选择的图形库中的一些函数绘制线。
我已经完成了第1步,但在过去的几天里,我一直停留在第2步。
我知道等角投影是将一个2D平面以一个Angular 投影的过程,即使我们在画线的时候只使用x,y,这个Angular 看起来也像是3D的。这是定义。不是描述它的最好方式,如果我说错了,请纠正我。
文本Map示例:
0 0 0
0 5 0
0 0 0
我选择的数据结构(实现为结构数组)
typedef struct point
{
float x;
float y;
float z;
bool is_last;
int color; // Implemented after mandatory part
} t_point;
我基本上只是读出文本Map的行、列和值,并将它们分别存储在x、y、z值中。
现在我必须转换它们,我尝试了以下公式:
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个
它吐出各种各样的东西,这对我来说毫无意义。我可以只去一个,并试图实现线算法。从这里,并希望最好的,但我想了解我实际上在这里做什么。其次,我通过我的研究,我了解到,我需要设置我的相机在一定的方式来创建投影。
总而言之,我只是非常迷失,我的问题归结为这一点。
1.请帮助我理解等角投影的概念。
1.如何使用等轴测投影将三维坐标(x,y,z)转换为坐标。
1条答案
按热度按时间bzzcjhmw1#
我是这样看的:
坐标形式:
假设x轴向右,y轴向下...
O
通常设置为屏幕中心,而不是(0,0)
,除非您添加了等距世界的平移功能。如果您想在“3D”XY平面内添加任意旋转,请参见:
因此,您只需计算椭圆上的
X,Y
向量(注意,它们不再是单位!!!),因此,如果我理解正确,则为:其中
ax
是旋转角...