我最近在这里阅读了这个问题为什么处理排序数组比未排序数组更快?并且发现答案绝对令人着迷,在处理基于Data的分支时,它完全改变了我对编程的看法.
我目前有一个用C编写的相当基本但功能完备的解释型Intel 8080仿真器,操作的核心是一个256长的交换机案例表,用于处理每个操作码.我最初的想法是,这显然是最快的工作方法,因为操作码编码在整个8080指令集中并不一致,并且解码会增加很多复杂性,不一致性和一次性情况.一个装有预处理器宏的开关盒表非常整洁,易于维护.
不幸的是,在阅读上述帖子之后,我发现我的电脑中的分支预测器绝对没有办法预测开关盒的跳跃.因此,每次切换案例时,必须完全擦除管道,导致几个周期延迟,否则应该是一个非常快速的程序(在我的代码中甚至没有多次乘法).
我相信大多数人都在想"哦,这里的解决方案很简单,转向动态重新编译".是的,这看起来似乎会削减大部分开关盒并大大提高速度.不幸的是,我的主要兴趣是模拟旧的8位和16位时代控制台(这里的英特尔8080只是一个例子,因为它是我最简单的模拟代码),其中保持精确指令的周期和时序对于视频和声音很重要必须根据这些确切的时间进行处理.
当处理这种级别的准确性时,性能成为一个问题,即使对于旧的控制台(例如,查看bSnes).在处理具有长管道的处理器时,是否有任何追索权或者这仅仅是事实?
c performance emulation compiler-optimization branch-prediction
我有一个角色,比如20 x 10像素大,我有一个基于像素的碰撞图(想想蠕虫).
给定速度大于每帧1个像素的角色追踪碰撞的最佳方法是什么.有没有比沿速度矢量迭代每个像素更好的解决方案?
我在Lua(Love 2D)中这样做,但通用的解决方案是理想的.
我正在研究一个古怪的复古飞行模拟器,我在我的3D项目中遇到了一些问题,因为我找不到关于这个主题的任何可靠的通用文档.
如何在给定以下信息的情况下将我的游戏世界中的简单位置矢量转换为屏幕上的2d矢量:
摄像机将摄像机方向(见下文)定位为视野,屏幕的高度和宽度(以及宽高比)
我也在寻找一种存储方向的方法,我已经编写了一个基本的矢量库,但我不确定如何存储用于相机(和投影代码)的旋转以及旋转的实际处理游戏中的物体.我目前正在寻找使用四元数但是它可以(并且很容易)使用四元数而不是矩阵进行投影变换?
代码中的实现四元数是否有任何好的来源?我是否必须为复数编写一个单独的库?
谢谢你的时间和任何帮助:)
lua ×2
3d ×1
c ×1
collision ×1
emulation ×1
love2d ×1
matrix ×1
performance ×1
pixel ×1
projection ×1
quaternions ×1