C 快速选择立方体贴图正确面的方法?

C 快速选择立方体贴图正确面的方法?,c,assembly,3d,C,Assembly,3d,给定一个以原点为中心的轴对齐立方体贴图和三维空间中的任意点,检查该点所在的面最简单的方法是获取最大大小的坐标并选择对应于该组件的面 原始代码如下所示: if (fabs(point.x) >= fabs(point.y) && fabs(point.x) >= fabs(point.z)) { if (point.x >= 0) {face=0;} else {face=1;} } if (fabs(point.y) >= fabs(point.x

给定一个以原点为中心的轴对齐立方体贴图和三维空间中的任意点,检查该点所在的面最简单的方法是获取最大大小的坐标并选择对应于该组件的面

原始代码如下所示:

if (fabs(point.x) >= fabs(point.y) && fabs(point.x) >= fabs(point.z)) {
    if (point.x >= 0) {face=0;} else {face=1;}
}
if (fabs(point.y) >= fabs(point.x) && fabs(point.y) >= fabs(point.z)) {
    if (point.y >= 0) {face=2;} else {face=3;}
}
if (fabs(point.z) >= fabs(point.x) && fabs(point.z) >= fabs(point.y)) {
    if (point.z >= 0) {face=4;} else {face=5;}
}
有没有一种方法可以实现在C语言中被认为更好的事情
无分支代码会更理想吗


任何选择的内联汇编标准都可以用于此目的。
如有必要,所有的
\>=
运算符都可以转换为
\>
运算符。

看起来可能不太像,但是前三个
if
语句消除了对
fabs
的所有调用,并替换了发布代码中的内部
if
语句。最后的
if/else
最多需要两个比较/分支来确定答案

if ( point.x < 0 ) {
    x = -point.x;
    fx = 1;
} else {
    x = point.x;
    fx = 0;
}

if ( point.y < 0 ) {
    y = -point.y;
    fy = 3;
} else {
    y = point.y;
    fy = 2;
}

if ( point.z < 0 ) {
    z = -point.z;
    fz = 5;
} else {
    z = point.z;
    fz = 4;
}

if ( x >= y ) {
    if ( x >= z ) { face = fx; } else { face = fz; }
} else {
    if ( y >= z ) { face = fy; } else { face = fz; }
}
if(点x<0){
x=-点x;
fx=1;
}否则{
x=点x;
fx=0;
}
如果(点y<0){
y=-点y;
fy=3;
}否则{
y=点y;
fy=2;
}
如果(点z<0){
z=-点z;
fz=5;
}否则{
z=点z;
fz=4;
}
如果(x>=y){
如果(x>=z){face=fx;}否则{face=fz;}
}否则{
如果(y>=z){face=fy;}否则{face=fz;}
}

Nice rewrite+1。在接受任何答案之前,我想看看其他人对这件事有什么看法。