【发布时间】:2015-04-07 22:52:40
【问题描述】:
我正在尝试“3d 游戏编程的黑色艺术”一书中的一些旧代码。我知道它已经过时了,但我开始阅读它,它有点有趣和有趣。我下载了 OpenWatcom C 编译器并创建了一个新的 DOS 项目,以便对这些旧代码进行编译。我已经编译了一段代码,其中设置了 Videomode int13h,然后我能够在屏幕上绘制像素。但这是通过一个名为 _setvideomode() 的 C 函数完成的。在下面的示例中,视频模式是通过 _int86 函数设置的,该函数进行中断调用,原型应该在 bios.h 中,但 OpenWatcom 说:没有找到函数 _int86 的原型。我现在卡住了,不知道该怎么办;)这是代码:
void setGraphxMode(int mode){
union REGS inregs,outregs;
inregs.h.ah = 0;
inregs.h.al = (unsigned char)mode;
_int86(0x10,&inregs,&outregs);
}
int main(){
return 0;
}
不胜感激任何建议,是的,我知道:这些天图形是通过 DirectX 或 OpenGL 完成的。这只是为了学习目的!谢谢你:)
【问题讨论】:
-
我个人还是直接用汇编写了很多图形代码。当我教汇编课程时,我实际上是从教人们如何编写引导加载程序开始,让某些东西运行,然后立即开始处理屏幕和内存管理以进入保护模式。弄清楚如何自己做事情真的很有用,这样您就可以更好地从图形库中了解您需要什么。
-
不错!我希望我们的教授能做到这一点,而不是让 Java 变得无聊……;)现在我必须自己深入研究这些材料。甚至不知道您可以在保护模式下执行此操作(我的意思是图形)。我也想做你在课堂上描述你所做的事情;)你有这方面的材料吗? @DavidHoelzer
-
我写了一本书,它的组装量刚好够危险。我还没有完全发布。至于受保护模式下的图形,解决此问题的最简单方法是使用显卡的视频模式,将整个屏幕内存映射到平坦内存区域。 SVGA 扩展真的是一团糟,而且没有任何标准,因此尝试手动完成它需要对每张特定卡的文档进行大量研究。使用映射内存模式并创建指向它的选择器要容易得多。
-
所以可以将RAM的一部分定义为屏幕内存并将数据写入其中,然后视频卡将使用这些数据绘制到屏幕上?那么这在windows或linux下是否可行? @DavidHoelzer
-
更准确地说,可以选择一种屏幕模式,将显示内存映射到 RAM,然后定义一个选择器,以便您可以直接访问该区域。