![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自制3d引擎
吴嗔
只有经历死亡,才会渴望生命。
展开
-
自制3D显示引擎四:画圆
仍然是bresenham算法代码 public void pcircle(int x,int y,int r){ int p=3-2*r,x0=0,y0=r for(;x0 pics[x0+x][y0+y]=setpci;//忽略一步 pics[-x0+x][y0+y]=setpci; pics[x0+x][-y0+y]=setpci; pics[-x0+x][-y0+y]=setp原创 2017-01-21 00:14:50 · 304 阅读 · 0 评论 -
自制3D显示引擎六:填充三角形
//fill triangle int[] x={1,2,3}; int[] y={2,1,3}; int j,k; int min,max; for(j=0;j k=(j+1+3)%3; pline(x[j],y[j],x[k],y[k]); } //边框已生成 int l=min(min(x[0],x[1]),x[2]); int r=max(max(x[0],x原创 2017-01-21 14:24:35 · 195 阅读 · 0 评论 -
自制3D显示引擎六.二:递归式填充
该算法效果可以从win系统画图程序中得到。 public void pfill(int x,int y){ if(x>=0&&x=0&&y if(pics[x][y] pics[x][y]=setpci; pfill(x-1,y); pfill(x,y-1); pfill(x+1,y); pfill(x,y+1); } } }原创 2017-01-21 14:40:11 · 240 阅读 · 0 评论 -
自制3D显示引擎七:填充任意多边形
将一个n边形分成n-2个三角形,即0123456分成012 023 034 045 056. 以012方向为正(顺逆时针) 判断每个三角形的正反,如果某辅助边一侧为正,一侧为反,那么此边不显示。 现将所有三角形只填充内部,正方向的在内存画布上值(初始值为0)+1,反方向的-1.最后再重新绘制边与可显示的边。 值不为0的即该点显示。 该算法是刚构思出来的,肯定有不妥的地方,应该可以优化。原创 2017-01-22 04:36:27 · 303 阅读 · 0 评论 -
自制3D显示引擎八:矩形窗口裁剪
只讲原理,代码需要自己构思、设计,这种算法只有自己写出来才能真正的记在脑子里。 ①:正方形区域为显示区域,该三角形为经典的多次裁剪三角形。 三角形与显示区域的相交情况有好几种:三角形全部在显示区域内、外,部分在显示区域内;三角形的边框并没有和显示框相交,却有显示部分。 网上也有一些相关的算法,但是总结的不是很正确,很清楚。 正确的方法是用每条边界去裁剪三角形,留下的继续裁剪。直到每条边都去原创 2017-01-22 03:37:20 · 296 阅读 · 0 评论 -
自制3D显示引擎九:三维空间的显示区域
在三维空间里观察物体,需要一个摄像机,和一个处于显示区域里的物体。 摄像机的问题,以后会讲。现在先讲一下显示区域。 空间坐标系有两种,左手坐标系和右手坐标系,在这里,我习惯使用左手坐标系。 显示区域是一个六面体,有着前后上下左右六个面, 超出范围的都会被裁剪掉,裁剪方法借鉴第八篇文章。 在这里需要判断点与面的关系,所以需要知道最后显示的屏幕大小,根据这个数据才能得原创 2017-01-23 20:46:19 · 355 阅读 · 0 评论 -
自制3D显示引擎十:三维坐标在屏幕上的映射
根据图可知P(x,y,z)在没有缩放倍数的情况下的显示坐标为(x/z,y/z)。原创 2017-01-23 21:08:47 · 723 阅读 · 0 评论 -
只是展示一下
视频链接: 3D显示引擎1.0 http://v.youku.com/v_show/id_XMjQ5MzcxODYyOA==.html?spm=a2hzp.8244740.userfeed.5!2~5~5~5!3~5~A原创 2017-02-02 15:53:28 · 203 阅读 · 0 评论