首页 > 解决方案 > 了解此 2D 像素操作代码背后的数学原理

问题描述

我最近一直在尝试扩展我对旧/新复古渲染技术的了解,并且我偶然发现了一种创建 3D-ish(想想 DOOM)渲染方法的方法。但是,我不完全确定它是如何工作的。如果能深入了解这段代码实际工作背后的数学原理,我将不胜感激。

我了解 x,y 值的操作,这些值循环遍历整个屏幕像素集,然后偏移它们以标准化正在创建的“新”假 3D 空间,但是深度是如何包含在其中的?为什么它起作用。我到处寻找一个可靠的解决方案。任何帮助是极大的赞赏。

要获得以下代码的进一步帮助,变量 height=480 和 width=640。我什至用它写过纸,只是无法绕开它。我知道一些事情是从一般的透视方程中得出的。但我很迷茫。

double ceilingHeight = 8.0;
double floorHeight = 4.0;
for(int y = 0; y < height; y++) {
   double yD = y - height / 2.0;
   double z = floorHeight / yD;
   
   if(yD < 0) 
      z = ceilingHeight / -yD;

   for(int x = 0; x < width; x++) {
      double xD = x - width / 2.0;
      xD *= z;
      
      int xx = (int)xD & 15;
      int yy = (int)z & 15;
      
      pixels[x + y * width] = (xx * 16) | (yy * 16) >> 8; 
   }
}

标签: javamathrenderinggame-engine

解决方案


推荐阅读