相关疑难解决方法(0)

避免对楼层的呼叫()

我正在处理一段代码,我需要处理不一定在0到1范围内的uvs(2D纹理坐标).作为一个例子,有时我会得到一个uv与au组件1.2.为了处理这个问题,我正在实现一个包装,它通过执行以下操作来导致平铺:

u -= floor(u)
v -= floor(v)
Run Code Online (Sandbox Code Playgroud)

这样做会使1.2变为0.2,这是所希望的结果.它还处理负面情况,例如-0.4变为0.6.

然而,这些对地板的调用相当缓慢.我使用英特尔VTune描述了我的应用程序,我正在花费大量的周期来进行这种操作.

在对这个问题进行了一些背景阅读之后,我提出了以下功能,这个功能有点快,但仍然有很多不足之处(我仍然会遇到类型转换惩罚等).

int inline fasterfloor( const float x ) { return x > 0 ? (int) x : (int) x - 1; }
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些使用内联汇编完成的技巧,但似乎没有任何工作完全正确或有任何显着的速度提升.

有谁知道处理这种情况的任何技巧?

c++ 3d graphics optimization floor

11
推荐指数
3
解决办法
9384
查看次数

标签 统计

3d ×1

c++ ×1

floor ×1

graphics ×1

optimization ×1