能从底层解释一下计算机的原理吗?

那我从底层解释一下,在你打游戏的时候,从你移动鼠标到屏幕上的视角改变这个过程,到底发生了什么:

1.你移动了一个普通的USB的光学鼠标

2.鼠标底部的光学模块检测到位移——原理略微复杂——记录了相关信息

3.鼠标内部将位移信息转化为鼠标HID报文,通过USB发送给电脑

4.这个报文触发电脑的中断服务程序(粗略近似,实际情况是操作系统内置的HID协议标准驱动),操作系统就记录了这个输入

5.游戏输入模块通过操作系统支持的低延迟鼠标输入API直接获取这个输入的内容,记录鼠标输入的水平和垂直位移

6.游戏帧循环,准确来说应该是渲染帧的更新循环中会获取这个输入内容——不是单个鼠标报文的输入,而是自上一帧以来的累计量

7.帧渲染逻辑在渲染前会先根据鼠标输入内容调整参数,比如FPS中会调整玩家相机的朝向(即改变观察视角)

8.然后在渲染流程中使用新的参数进行渲染,向GPU提交对应的渲染指令

9.渲染指令在GPU中完成渲染生成需要显示的帧的内容

10.需要显示的内容被发送到或者设置为显示缓冲区(垂直同步等设置影响这一步)

11.显卡将显示缓冲区的内容通过HDMI/DP或者其他视频传输线发送给显示器

12.显示器根据线中发送来的内容更新显示内容

13.你看到了屏幕中的视角发生了改变


大概过程就是这样,其中的每一步要细讲都可以讲半天演化流程

步骤1中的USB鼠标从PS2鼠标演化来

步骤2中的光学鼠标从底下带个球的滚球(?)鼠标升级而来。如果你把滚球抠下来就可以看到鼠标中与滚球接触的横纵两个轴,球的滚动会带动轴的转动,分别被翻译成横纵方向的位移

步骤3中的HID报文是USB的,PS2使用另一套协议

步骤4中的中断服务程序是早期系统处理PS2的技术栈,比HID驱动简单得多

步骤5中的方法多种多样,可以想见早期游戏可能直接修改中断服务程序获取输入,后面的Direct Input, Raw Input都是逐渐发展的技术

步骤6中的帧循环有可能逻辑帧与渲染帧分离,每个逻辑帧处理一些输入,一部分的逻辑帧结果更新渲染帧内容

步骤7中调整参数在FPS中是改视角,在卡牌游戏中可能是修改拖拽的卡牌的位置,在2D俯视角中可能是修改鼠标指针的位置与附近的UI元素状态

步骤8中的渲染也分成2D渲染和3D渲染的问题,也区分DirectX11,DirectX12,Vulkan,OpenGL等等API

步骤9的渲染生成部分就是考验厂商驱动和开发者着色器兼容性,玩家显卡性能的地方

步骤10中的技术就经历了直接更新(有画面撕裂)到缓冲区交换链的演进

步骤11中的传输线的最早期版本应该是VGA,800x600分辨率和640x480分辨率就是这个时代的遗留——这玩意甚至是模拟信号(?)

步骤12中的更新在液晶显示器上可能会有残影,这是液晶本身的固有响应时间的问题,为了消灭残影,OLED显示器就干脆不要液晶了,直接控制每个像素的亮度

哦对了,液晶显示器拖影和TAA拖影虽然形式上差不多但是原理上不一样。TAA拖影在步骤8~9的那个位置。

编辑于 2026-03-03 · 著作权归作者所有