小编Dav*_*ave的帖子

Visual Studio C++ 2008/2010 - 在float NaN上打破

有没有办法设置Visual Studio(刚刚从2008年升级到2010年)来破解,就好像断言失败,只要任何浮点数变成NaN,QNAN,INF等?

到目前为止,我刚刚使用了断言(x == x)技巧,但我宁愿隐含一些东西,所以我不必在任何地方添加断言.

相当惊讶我无法通过谷歌找到答案.关于'浮点异常'的一些东西,但我不确定它们是否是同一个东西,我已经尝试在Visual Studio中启用它们,但是程序不会破坏,直到由于NaN后来发生灾难性事件执行中.

c++ floating-point floating-point-exceptions visual-studio-2010 visual-studio

27
推荐指数
1
解决办法
9100
查看次数

强制所有QNaN为正常NaN(SNaN),因此抛出异常

我已经将Visual Studio配置为通过_controlfp函数抛出浮点异常.这适用于NAN和INF,但不适用于QNAN.即安静的NaNs不会引发异常.Visual Studio 2008/2010是否有任何函数或配置选项会强制QNAN为NAN,以便它们抛出异常?

c++ floating-point nan floating-point-exceptions visual-studio

9
推荐指数
1
解决办法
1224
查看次数

体积渲染:与前后合成混淆

例如,在GPU Gems中,前后合成方程(用于颜色)是

C ' =(1 - A' Ⅰ-1)C + C" I-1

其中C'i是输出累积颜色值; ' i-1是直到前一个体素的累积alpha(不透明度)值; C i当前体素的颜色值; 和C'i-1是直到前一个体素的累积颜色值.

这个提法给我提出了两个问题:

  1. 一旦累积的不透明度达到大约1,就会发生从前到后的终止.那么,在达到不透明度极限之前,有哪些颜色通道(RGB)会超过最大值?你只是将值夹在0..255之间(例如500,1000,2000将变为255,255,255),或者查看通道之间的比率(例如500,1000,2000将变为64,128,255).

  2. 上一个问题的答案可能就是这个问题.当前体素的颜色输出取决于一个减去累积的不透明度.如果累积不透明度为零并且当前体素的不透明度为零怎么办?- 输出是完全不透明的体素,因为(1 - A'i-1)= 1,即使它被认为是透明的体素!?

任何提示非常感谢.

math graphics rendering volume composite

9
推荐指数
1
解决办法
2781
查看次数

使用OpenGL功能进行非常基本的体积渲染(用于教学目的)

我有一些学生正在进行体积渲染项目.我正在尝试设计最基本的可能示例来启动它们.我想要做的是有一个窗口,并根据通过底层体积数据集的光线投射独立设置窗口中的每个像素.例如,可以使用Windows API函数轻松完成此操作.但是我们想要使用OpenGL.

我有两个想法:

  1. 使用过剩来创建一个窗口.
  2. 使用一些OpenGL函数手动设置窗口中的每个像素.

或者,稍微复杂一点......

  1. 使用过剩来创建一个窗口.
  2. 创建与窗口大小相同的屏幕外纹理.
  3. 根据光线投射的结果,在纹理中单独设置每个像素.
  4. 将纹理翻转到窗口内容.

所以我的问题是双重的:有没有比这些选择更好的方法?有人能指出我相关的OpenGL函数来完成这些方法吗?

c++ opengl rendering

5
推荐指数
1
解决办法
5897
查看次数

矢量排序/唯一/擦除与复制到 unordered_set 的性能

我有一个函数,可以将网格中点列表的所有邻居移出一定距离,这涉及很多重复项(我邻居的邻居再次 == 我)。

我一直在尝试几种不同的解决方案,但我不知道哪个更有效。下面是一些代码,演示了两个并行运行的解决方案,一个使用 std::vector sort-unique-erase,另一个使用 std::copy 到 std::unordered_set。

我还尝试了另一种解决方案,即将包含到目前为止的邻居的向量传递给邻居函数,该函数将使用 std::find 确保在添加邻居之前不存在邻居。

所以三个解决方案,但我无法完全理解哪个会更快。任何人的想法?

代码片段如下:

// Vector of all neighbours of all modified phi points, which may initially include duplicates.
std::vector<VecDi> aneighs;
// Hash function, mapping points to their norm distance.
auto hasher = [&] (const VecDi& a) {
    return std::hash<UINT>()(a.squaredNorm() >> 2);
};
// Unordered set for storing neighbours without duplication.
std::unordered_set<VecDi, UINT (*) (const VecDi& a)> sneighs(phi.dims().squaredNorm() >> 2, hasher);

... compute big long list of points including many …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector duplicates c++11

4
推荐指数
1
解决办法
2463
查看次数

C++模板 - 成员函数的部分特化

我试图专门化一些几何函数,取决于2D或3D,由模板参数指定.如果我为问题的玩具版本包含一些(非常破碎的)代码,那么最好:

template <typename T, int d>
class Point
{
public:
    int x;
    int y;
    int z;

    T add ()
    {
        return T(0);
    }

    template <>
    T add <T, 2> ()
    {
        return x + y;
    }

    template <>
    T add <T, 3> ()
    {
        return x + y + z;
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码很难编译.我已经尝试了很多模板参数格式和类定义的不同组合,并且在'd'上找不到一种方法来执行函数特化,同时保留'T'一般.

在我的实际解决方案中,我正在尝试计算专门用于2D或3D情况的渐变,曲率,插值等内容.有些事情,比如梯度计算,可以简单地使用'd'参数来限制for循环迭代.其他如插值,需要单独的2D和3D功能.

任何提示非常感谢!

c++ inheritance templates class specialization

3
推荐指数
2
解决办法
926
查看次数

OSX bash以递归方式查找按大小排序的文件,文件夹除外

我遇到了以下命令,几乎可以满足我的需求:

find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn > ~/files.txt

现在,我不知道这意味着什么(会喜欢解释,但不是那么重要).

我需要添加的一件事是不要打扰特定的文件夹(即我有一个包含成千上万个Word文档的Documents文件夹,这使得这个命令需要很长时间).

任何人都可以建议添加上面的命令,找到忽略给定的文件夹?

macos bash search file file-listing

3
推荐指数
2
解决办法
5520
查看次数