当前位置:  开发笔记 > 编程语言 > 正文

汇编程序中的图形编程?

如何解决《汇编程序中的图形编程?》经验,为你挑选了3个好方法。

我使用Visual C++ 6.0和DirectX开发了一个运行的Super Mario Sprite.但这对我来说并不是很令人满意(强调一个仅用于显示2D精灵的3D多媒体框架),所以我希望能够仅使用C和汇编程序编写动画精灵.

因此,在查看旧游戏时(例如,Wolfenstein),它看起来大多数游戏是用C语言编写的,每次涉及图形输出时都会使用汇编程序.

不幸的是,当尝试使用这个旧的汇编程序代码时,始终会出现错误消息"NTVDM.exe找到了无效的指令",所以现在这些东西似乎不起作用.

是否有任何关于汇编程序中图形编程的教程仍然有用?

(我不想使用任何膨胀的框架或库,我只想自己开发所有东西.WinAPI可以创建一个全屏窗口和捕获用户输入,但不是图形因为我读过GDI也是如此快速图形速度慢.)

我正在使用WindowsXP和MASM或A86.



1> Konrad Rudol..:

听起来你只使用Assembler,因为你似乎认为这是必要的.事实并非如此.如果您没有任何其他原因(即想要学习它),请不要在此处使用Assembler,除非您确切知道自己在做什么.

对于普通的图形引擎,完全不需要汇编程序编程.特别是在超级马里奥风格的2D精灵引擎方面.即使像Python这样的"慢"脚本语言也足以应对如今的这类事情.

除此之外,如果你不太确切地知道你在做什么,汇编程序将不会比C更快(事实上,它可能会更慢,因为你将不太有效地重新实现现有的C函数).



2> Peter Parker..:

我完全同意samcl

不再使用汇编程序的主要原因是您无法再访问Videomemory.回到早期(你提到Castle Wolfenstein)有一个特殊的视频模式叫做0x13h,你的图形只是一块内存(每个像素是一个调色板,颜色从0到255 < - 1 Byte)你能够通过这种特定的视频模式访问这个内存,但是,今天事情要复杂得多

今天你有非常快的Videomemory并且使用你的CPU来访问它只会降低所有性能,因为你通过PCI-Express/AGP/PCI/VESA-LOCALBUS/ISA连接CPU(< - 记住任何人!?)

Graphicsprogramming往往是很多的读写访问(读取的像素,判断是否是透明的,具有α相乘,写入像素,等等)现代化的存储器接口比直接访问慢得多的内部图形卡.正如Robert Gould建议的那样,这就是你真正应该使用着色器的原因.通过这种方式,您可以更快速,更容易理解代码,并且不会使GFX-Memory停滞不前.

如果您对GFX编程更感兴趣,可以使用shadertoy,一个致力于基于着色器效果的社区,以及基于WebGL的Shadercode执行,来满足您的需求.

你的初学者汇编程序代码也很蹩脚.在质量和表现.相信我.它需要大量时间来优化这种原始代码.因此,您编译的C/C++代码将轻松胜过您的手写asm.

如果您对Assembler不感兴趣,请尝试编写类似diskaccess的代码.这是您可以获得很多性能的地方.



3> SmacL..:

我猜你是否已经在使用C和DirectX,速度不是问题,这更像是一个学习练习.对于Windows下的2D,C和DirectX确实非常快,正如Konrad Rudolph指出的那样,手动汇编程序不可能比高度优化的SDK更快.

从纯粹的教育观点来看,这是一项有趣的活动,但相当复杂.早在家用计算机和第一个PCS的早期,图形屏幕几乎就像一块内存,其中字节对应于一个或多个彩色像素.通过改变屏幕内存的值,你可以绘制点,然后是线条,然后是精灵等...在现代PC上,这往往不是一种选择,因为你通常通过SDK编程显卡到做同样的工作.然后该卡完成了艰苦的工作,并为您提供了更高级别的抽象.如果你真的想要了解当天的情况,我会推荐一个模拟器.对于现代游戏,请坚持使用SDK.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有