Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定值是否在0=360度问题的范围内_C++_Directx_Rotation - Fatal编程技术网

C++ 确定值是否在0=360度问题的范围内

C++ 确定值是否在0=360度问题的范围内,c++,directx,rotation,C++,Directx,Rotation,我正在为DirectX应用程序编写一段代码。它的意思是不显示不可见的面孔。正常情况下,这将只是使用Z缓冲区,但我做了许多移动和旋转的网格,所以我不想这样做,以节省计算能力。我将在立方体上描述这个。你从前面看,所以你只看到一个面,你不需要旋转左边的5个面。如果你有一个100*100网格的立方体的一面,那就不必旋转你真正不需要的50k网格了。所以我存储了相机的X,Y,Z旋转(我没有使用的Z旋转),还有面的X,Y,Z旋转。在这个简化的立方体中,我会看到使这句话成为事实的面孔: cRot //camer

我正在为DirectX应用程序编写一段代码。它的意思是不显示不可见的面孔。正常情况下,这将只是使用Z缓冲区,但我做了许多移动和旋转的网格,所以我不想这样做,以节省计算能力。我将在立方体上描述这个。你从前面看,所以你只看到一个面,你不需要旋转左边的5个面。如果你有一个100*100网格的立方体的一面,那就不必旋转你真正不需要的50k网格了。所以我存储了相机的X,Y,Z旋转(我没有使用的Z旋转),还有面的X,Y,Z旋转。在这个简化的立方体中,我会看到使这句话成为事实的面孔:

cRot //camera rotation in degrees

oRot //face rotation in degrees

if(oRot.x > cRot.x-90 && oRot.x < cRot.x+90
    && oRot.y > cRot.y-90 && oRot.y < cRot.y+90)
cRot//摄像机旋转角度
oRot//以度为单位的面旋转
如果(oRot.x>cRot.x-90&&oRot.xcRot.y-90和&oRot.y
但是有一个问题。例如,如果我将在四周旋转,相机可以达到值330。在这种状态下,我会看到立方体的正面和右侧。右边有旋转270,所以在IF语句中这是正确的。问题是正面旋转为0,也就是360度


所以我的问题是如何使这句话起作用,因为当我使用模时,它在右边会失效,这样它在0=360时不起作用。

你的意思是检查oRot和cRot是否至少相差90度

//积分
如果((360+cRot-oRot)%360>=90)

//浮点数 diff=abs(克罗特-奥罗特);
如果(diff>=90&&diff您的意思是检查oRot是否与cRot至少相差90度

//积分
如果((360+cRot-oRot)%360>=90)

//浮点数 diff=abs(克罗特-奥罗特);
如果(diff>=90&&diff我必须说我强烈建议不要这样的优化。在现代GPU上,顶点缓冲区的流水线旋转速度远远快于旨在保存它的CPU测试速度。

我必须说我强烈建议不要这样的优化。在现代GPU上,顶点缓冲区的流水线旋转速度非常快比这些CPU测试更能保存它。

感谢您的意见,在使用它之前,我仍将对此进行基准测试。我会在尝试后说,但我认为跳过计算最终矩阵的3倍(在实际渲染之前,我将对每个网格进行2次移动和1次旋转)有两个绝对值的计算和一个if语句会更快。好吧,看起来你是对的,我有一个100x100x100网格立方体9-10 FPS,有这个if和没有它大约是11-12。所以它快一点(我没有意识到矩阵的计算属于GPU)。我仍然需要找出应用程序速度减慢的真正问题所在…@Raven:如果你真的像你在帖子中所说的那样绘制50000个网格,那么这就是你的瓶颈。你每次调用drawprimitive都会有一个每个对象的开销。@Alan:好的,那么你有什么建议吗?例如,我正在构建rubik cube,我需要能够将aro我目前的解决方案是,我制作了6个不同颜色的模型,我正在用这些模型构建立方体,旋转、移动和渲染它们。所以3x3x3实际上需要渲染蓝色、绿色和下4种颜色的6x渲染。在100x100x100中,我需要渲染每种10000x。有什么建议吗?@Raven:google用于网格实例化(无法提供链接,因为您没有指定platfor/API)。您的性能应该会很好。感谢您的意见,在使用它之前,我仍将对此进行基准测试。我会在尝试后说,但我认为跳过计算最终矩阵的3倍(在实际渲染之前,我将对每个网格进行2次移动和1次旋转)有两个绝对值的计算和一个if语句会更快。好吧,看起来你是对的,我有一个100x100x100网格立方体9-10 FPS,有这个if和没有它大约是11-12。所以它快一点(我没有意识到矩阵的计算属于GPU)。我仍然需要找出应用程序速度减慢的真正问题所在…@Raven:如果你真的像你在帖子中所说的那样绘制50000个网格,那么这就是你的瓶颈。你每次调用drawprimitive都会有一个每个对象的开销。@Alan:好的,那么你有什么建议吗?例如,我正在构建rubik cube,我需要能够将aro我目前的解决方案是,我制作了6个不同颜色的模型,我正在用这些模型构建立方体,旋转、移动和渲染它们。所以3x3x3实际上需要渲染蓝色、绿色和下4种颜色的6x渲染。在100x100x100中,我需要渲染每种10000x。有什么建议吗?@Raven:google用于网格实例化(无法给出链接,因为您没有指定platfor/API)。您的性能应该会很好。是的,这就是我要找的,我比较了旋转,而不是它们的差异。一个错误可能是因为我的解释,我需要间隔值,所以这是您的解决方案,倒转为:if(diff=270)是的,这就是我要找的,我比较了旋转,而不是它们的差异。一个错误可能是因为我的解释,我需要间隔的值,所以这是你的解,倒转为:if(diff=270)
//integral
if ((360 + cRot - oRot) % 360 >= 90) ...

//floating point diff = abs(cRot - oRot); if (diff >= 90 && diff <= 270) ...