vox_traverse.c

来自「[Game.Programming].Academic - Graphics G」· C语言 代码 · 共 45 行

C
45
字号
/* * C code from the article * "Voxel Traversal along a 3D Line" * by Daniel Cohen, danny@bengus.bgu.ac.il * in "Graphics Gems IV", Academic Press, 1994 *//* The following C subroutine visits all voxels along the linesegment from (x, y, z) and (x + dx, y + dy, z + dz) */Line ( x, y, z, dx, dy, dz )int x, y, z, dx, dy, dz;{    int n, sx, sy, sz, exy, exz, ezy, ax, ay, az, bx, by, bz;    sx = sgn(dx);  sy = sgn(dy);  sz = sgn(dz);    ax = abs(dx);  ay = abs(dy);  az = abs(dz);    bx = 2*ax;	   by = 2*ay;	  bz = 2*az;    exy = ay-ax;   exz = az-ax;	  ezy = ay-az;    n = ax+ay+az;    while ( n-- ) {	VisitVoxel ( x, y, z );	if ( exy < 0 ) {	    if ( exz < 0 ) {		x += sx;		exy += by; exz += bz;	    }	    else  {		z += sz;		exz -= bx; ezy += by;	    }	}	else {	    if ( ezy < 0 ) {		z += sz;		exz -= bx; ezy += by;	    }	    else  {		y += sy;		exy -= bx; ezy -= bz;	    }	}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?