8086汇编语言实现的以平行投影的方式显示三维线段的程序

时间:2021-03-04 01:26:08
http://download.csdn.net/source/3460650
不是我看不起初学者,如果你只把《汇编语言》或任何一本汇编语言的入门教材看完了的话,是绝对看不明白这个程序的。
想看明白这个程序必须能忍受混乱而且复杂的寻址。混乱主要是我造成的。 8086汇编语言实现的以平行投影的方式显示三维线段的程序还有必须要有基础的立体几何知识,至少要会看三视图,还要了解立体直角坐标系,还有二维直线的解析式。还要了解FPU指令集,我这个程序里用了大量的浮点指令,这个CSDN上就能下载到资料。
我不怎么会写注释,凑合看吧。
主要思路就是把三维的线段投射到二维的平面上,我的方法是投影的时候只把X轴和Y轴的坐标拿出来,然后直接按二维的方式显示。另外程序里面用了一个向量旋转公式:
x'=xCOSα-ySINα
y'=yCOSα+xSINα
证明过程我就不说了,高中学了,大概就在和的正弦那个地方。这个公式可以说是这个程序的核心。

24 个解决方案

#1


我写的这个程序没有任何的优化,还有这个程序有点过于简单了,和真正的三维显示还有很远的距离,我到现在还没有想到怎么解决三角面的显示过程中的一些问题。

#2


看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164

8086汇编语言实现的以平行投影的方式显示三维线段的程序

#3


引用 2 楼 zoologist 的回复:
看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164

我完全是自己写的。
他那个显示的不是点么?我显示的可是线。高一个维度呢。

#4


8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序

运行效果。

#5


版主能不能帮我修改一下?把图弄到顶楼里。

#6


引用 2 楼 zoologist 的回复:
看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164


还有这个和他那个还有很大的不同,他那个好像是基于函数的,我这个是基于模型的。

#7


楼主真厉害,我下载下来运行看了看,果然是那样的。嘿嘿。真佩服。

#8


这个是动态的,那个三维的IC是能动的。
如果看不懂代码的话,也可以改一下模型和脚本来修改显示效果,具体是怎么定义的代码里的注释里有。挺简单的。

#9


确实很牛

#10


有必要用汇编这么折磨自己么……

#11


挑个刺~

仔细看你的图像,可以看到里面有很多在 x 方向填充了两个像素然后又在 y 方向上填充两个像素的情况,就像这样:
...##
..#..
..#..
##...

其实更精确的表示应该是这样:
...##
..#..
.#...
#....

或者这样:
....#
...#.
..#..
##...

#12


引用 11 楼 hpsmouse 的回复:
挑个刺~

仔细看你的图像,可以看到里面有很多在 x 方向填充了两个像素然后又在 y 方向上填充两个像素的情况,就像这样:
...##
..#..
..#..
##...

其实更精确的表示应该是这样:
...##
..#..
.#...
#....

或者这样:
....#
...#.
..#..
##...

为了效率牺牲了一下效果。

#13


引用 10 楼 hpsmouse 的回复:
有必要用汇编这么折磨自己么……

我写的时候没有被折磨的感觉。不过写这个程序我草纸用了好几十张。

#14


其实还有个瑕疵,就是顶点有时候是没有像素的。可能是我的算法不太完美。还有改进的余地。

#15


LZ前面说新手完全看不明白程序是不恰当的,不是他们看不懂,你的程序只是繁琐,并不是用了什么很高的技术。不光是新手,就是老程序员看着也费力。汇编一共就那么些指令,何况这还是86.不可能看不明白,只是写杂了,看着就费劲,你可以反汇编任何一个win32程序,你会发现,每句都能看懂,但看了好长时间,也不知道这段代码在干什么,就是这个原因。

#16


引用 15 楼 ictxiangxin 的回复:
LZ前面说新手完全看不明白程序是不恰当的,不是他们看不懂,你的程序只是繁琐,并不是用了什么很高的技术。不光是新手,就是老程序员看着也费力。汇编一共就那么些指令,何况这还是86.不可能看不明白,只是写杂了,看着就费劲,你可以反汇编任何一个win32程序,你会发现,每句都能看懂,但看了好长时间,也不知道这段代码在干什么,就是这个原因。

其实我自己都看不明白。其实那句话我说后悔了,确实有点不谦虚。

#17


另外感谢cxdzxc告诉我的双缓存技术。这个东西完美解决了显示过程中闪动的问题。

#18


程序写得霸气外露

#19


LZ比初学者有一点好,文本对的很齐,看着干净,不费力,赞一个先

#20


引用 12 楼 mhbbcrcpj 的回复:
为了效率牺牲了一下效果。


又看了一下我的代码,不是为了效率牺牲了效果,是我根本就没弄明白怎么高效地显示线段,我的程序中用的是一种非常低效的方式显示的线段。低效到每显示一个点都要执行大量的代码。

#21


不懂汇编,我下完之后怎么运行啊?

#22


引用 21 楼 xc2011_k 的回复:
不懂汇编,我下完之后怎么运行啊?


其实发代码的时候没附带编译好的可执行文件是我最大的失误。
点击下载编译好的可执行文件
里面还有个EXE录像文件,给那些不能运行16位程序的同志们准备的。本人不保证没毒,录像软件我忘了我是不是在官网下的了。但那个“_MAIN.EXE”可以保证没毒。

#23


CSDN 下载频道抽了,用的 skydrive。

#24


引用 19 楼 ddownload 的回复:
LZ比初学者有一点好,文本对的很齐,看着干净,不费力,赞一个先


这个评价很中肯啊~~哈哈。。

赞一个楼主

#1


我写的这个程序没有任何的优化,还有这个程序有点过于简单了,和真正的三维显示还有很远的距离,我到现在还没有想到怎么解决三角面的显示过程中的一些问题。

#2


看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164

8086汇编语言实现的以平行投影的方式显示三维线段的程序

#3


引用 2 楼 zoologist 的回复:
看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164

我完全是自己写的。
他那个显示的不是点么?我显示的可是线。高一个维度呢。

#4


8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序
8086汇编语言实现的以平行投影的方式显示三维线段的程序

运行效果。

#5


版主能不能帮我修改一下?把图弄到顶楼里。

#6


引用 2 楼 zoologist 的回复:
看过这个没?  Ham写的

http://aogosoft.com/downpage.asp?mode=viewtext&id=164


还有这个和他那个还有很大的不同,他那个好像是基于函数的,我这个是基于模型的。

#7


楼主真厉害,我下载下来运行看了看,果然是那样的。嘿嘿。真佩服。

#8


这个是动态的,那个三维的IC是能动的。
如果看不懂代码的话,也可以改一下模型和脚本来修改显示效果,具体是怎么定义的代码里的注释里有。挺简单的。

#9


确实很牛

#10


有必要用汇编这么折磨自己么……

#11


挑个刺~

仔细看你的图像,可以看到里面有很多在 x 方向填充了两个像素然后又在 y 方向上填充两个像素的情况,就像这样:
...##
..#..
..#..
##...

其实更精确的表示应该是这样:
...##
..#..
.#...
#....

或者这样:
....#
...#.
..#..
##...

#12


引用 11 楼 hpsmouse 的回复:
挑个刺~

仔细看你的图像,可以看到里面有很多在 x 方向填充了两个像素然后又在 y 方向上填充两个像素的情况,就像这样:
...##
..#..
..#..
##...

其实更精确的表示应该是这样:
...##
..#..
.#...
#....

或者这样:
....#
...#.
..#..
##...

为了效率牺牲了一下效果。

#13


引用 10 楼 hpsmouse 的回复:
有必要用汇编这么折磨自己么……

我写的时候没有被折磨的感觉。不过写这个程序我草纸用了好几十张。

#14


其实还有个瑕疵,就是顶点有时候是没有像素的。可能是我的算法不太完美。还有改进的余地。

#15


LZ前面说新手完全看不明白程序是不恰当的,不是他们看不懂,你的程序只是繁琐,并不是用了什么很高的技术。不光是新手,就是老程序员看着也费力。汇编一共就那么些指令,何况这还是86.不可能看不明白,只是写杂了,看着就费劲,你可以反汇编任何一个win32程序,你会发现,每句都能看懂,但看了好长时间,也不知道这段代码在干什么,就是这个原因。

#16


引用 15 楼 ictxiangxin 的回复:
LZ前面说新手完全看不明白程序是不恰当的,不是他们看不懂,你的程序只是繁琐,并不是用了什么很高的技术。不光是新手,就是老程序员看着也费力。汇编一共就那么些指令,何况这还是86.不可能看不明白,只是写杂了,看着就费劲,你可以反汇编任何一个win32程序,你会发现,每句都能看懂,但看了好长时间,也不知道这段代码在干什么,就是这个原因。

其实我自己都看不明白。其实那句话我说后悔了,确实有点不谦虚。

#17


另外感谢cxdzxc告诉我的双缓存技术。这个东西完美解决了显示过程中闪动的问题。

#18


程序写得霸气外露

#19


LZ比初学者有一点好,文本对的很齐,看着干净,不费力,赞一个先

#20


引用 12 楼 mhbbcrcpj 的回复:
为了效率牺牲了一下效果。


又看了一下我的代码,不是为了效率牺牲了效果,是我根本就没弄明白怎么高效地显示线段,我的程序中用的是一种非常低效的方式显示的线段。低效到每显示一个点都要执行大量的代码。

#21


不懂汇编,我下完之后怎么运行啊?

#22


引用 21 楼 xc2011_k 的回复:
不懂汇编,我下完之后怎么运行啊?


其实发代码的时候没附带编译好的可执行文件是我最大的失误。
点击下载编译好的可执行文件
里面还有个EXE录像文件,给那些不能运行16位程序的同志们准备的。本人不保证没毒,录像软件我忘了我是不是在官网下的了。但那个“_MAIN.EXE”可以保证没毒。

#23


CSDN 下载频道抽了,用的 skydrive。

#24


引用 19 楼 ddownload 的回复:
LZ比初学者有一点好,文本对的很齐,看着干净,不费力,赞一个先


这个评价很中肯啊~~哈哈。。

赞一个楼主