几年前,我曾经使用汇编语言为MS-DOS编程。可以做的一件事情是告诉BIOS x
坐标,y
坐标和颜色(表示为整数),然后调用一个函数,BIOS会立即执行此操作。
当然,这是一项非常艰苦的工作,而且非常耗时,但是要权衡的是,您在想要的时候就得到了想要的东西。
我尝试写MacOS API多年,但发现困难或不可能,因为没有任何文献记载。 (NSNumber到底是什么?为什么所有控件都返回一个无用的对象?)
我现在实际上还没有任何特定的项目,但是我希望能够编写能够以相同方式绘制像素的C ++。也许我疯了,但是我想要那种控制。
直到我能克服这个问题,我仅限于编写在控制台中运行的程序,方法是打印文本并在屏幕变满时向上滚动。
答案 0 :(得分:2)
现代的x86操作系统在real mode下无法正常工作。
您有几种选择:
运行VM并安装实模式操作系统(例如MS-DOS)。
使用模拟实模式的图层(例如DOSBox)。
使用GUI库(例如Qt,GTK,wxWidgets,Win32,X11),并使用画布或类似的控件进行绘制。
使用2D API(例如SDL,SFML和Allegro的2D组件)。
使用3D API(例如OpenGL,Direct3D,Vulkan,Metal;如果您希望将其便携式,则可能会被SDL,SFML或Allegro暴露)流式传输已逐像素填充的纹理,CPU每帧
编写片段着色器(使用3D API或使用WebGL在Web应用程序中更容易)。
如果您想了解当今图形的真实制作方式,则应使用最后两个选项。
请注意,如果您喜欢逐像素绘制,可能会爱直接在GPU上编写片段着色器,以及使用它们可以实现的所有惊人效果。有关示例,请参见ShaderToy!
答案 1 :(得分:1)
您可以尝试使用Windows GDI:
#include <windows.h>
int main()
{
HDC hdc = GetDC(GetConsoleWindow());
for (int x = 0; x < 256; ++x)
for (int y = 0; y < 256; ++y)
SetPixel(hdc, x, y, RGB(127, x, y));
}
从上面的示例中可以很容易地绘制出一些东西(如果这是您要的内容)。