这不完全是一个编程问题(或者是?),但是我想知道:
PC如何通过代码处理图形和声音并输出?
我对图形的猜测:
IE:800 x 600、24位彩色模式== 800x600x3 =〜1.4MB内存空间
假设一个简单的2D游戏:图形数据以代表颜色值的字节数形式存储在机器代码中。根据正在运行的程序指示PC的方式,处理器读取适当的数据并将其写入内存空间。
当然,所有这一切都是疯狂的,并且每秒重复x次,x是监视器的刷新率。我通过避免谈论双缓冲等简化了我自己可能不正确的解释
这是我的问题:
a)以上猜测(三个步骤)有多近?
b)如何将图形结合到纯C++代码中?我假设每个人都在实践中使用图形库(SDL,OpenGL等),但是例如,这些库如何完成其工作?在纯C++代码中手动包含图形(例如2D spite)是否会涉及创建位值的二维数组(或三维创建每个像素包含多个RGB值的三维数组)?这是怎么回事?
c)此外,从上继续,使用实际位图的SDL等库是否只是将位图/ etc文件构建到可执行文件的机器代码中,并像在问题b中提到的相同问题那样使用它们?
d)在我上面的假设步骤3中,是否涉及任何寄存器?就像,您可以将某个字节值写入某个寄存器以在屏幕上输出一个字节的单色图像吗?还是纯粹的专用内存空间(= RAM)+硬件交互?
e)最后,如何完成所有这些声音工作? (我不知道 :) )
最佳答案
一种。
b。 OpenGL通常分为几部分-操作系统的一部分是一个核心库,而图形芯片组(或可能是卡)供应商则提供了一个驱动程序。尽管CPU和GPU之间的确切劳动分配有所不同(在供应商之间,一段时间内单个供应商的产品内等等),但SDL围绕着您所描述的简单帧缓冲区的一般概念而构建。
C。通常,您会按照特定的格式将位图,纹理等构建到单独的文件中。
d。尽管主要的图形芯片组供应商(ATI / AMD和nVidia)倾向于或多或少地保持其寄存器级文档的 secret (尽管这种情况可能已经改变了,但开放源代码开发人员一直在不断要求其提供文档) ,而不仅仅是封闭源代码驱动程序)。大多数硬件都具有专用的线条画等功能,您可以在其中将(例如)线条参数放入指定的寄存器中,并绘制指定的线条。确切的细节差别很大...
e。抱歉,但是已经很长了,声音覆盖的面积很大...
关于graphics - 在PC上编程图形和声音-共有新手问题,其中很多!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003215/