Marching Cubes Issues

I've been trying to implement the marching cubes algorithm with C++ and Qt. Anyway, so far all the steps have been written, but I'm getting a really bad result. I'm looking for orientation or advices about what can be going wrong. I suspect one of the problems may be with the voxel conception , specifically about which vertex goes in which corner (0, 1, ..., 7). Also, I'm not

行进多维数据集问题

我一直在试图用C ++和Qt实现行军立方体算法。 无论如何,到目前为止所有的步骤都已经写好,但是我得到了一个非常糟糕的结果。 我正在寻找关于可能出错的方向或建议。 我怀疑其中一个问题可能与体素概念有关 ,特别是关于哪个顶点进入哪个角(0,1,...,7)。 另外,我不是100%确定如何解释算法的输入(我正在使用数据集)。 我应该按照ZYX的顺序阅读它,并以相同的方式移动行军立方体,或者根本不重要? (撇开每个维度都

C++ Marching Cubes Algorithm Explanation

I am trying to implement the marching cubes algorithm in C++ based on this description: http://paulbourke.net/geometry/polygonise/ But i don't understand how do you calculate the "GRIDCELL" values. To be exact the double val[8]; part is not clear for me what it does. I looked at some examples but they are too complex and it's hard to understand how these values are comp

C ++ Marching Cubes算法说明

我正在尝试在C ++中基于这个描述来实现行进立方体算法: http://paulbourke.net/geometry/polygonise/ 但我不明白你如何计算“GRIDCELL”值。 确切的说 double val[8]; 部分对我来说不清楚它的作用。 我看了一些例子,但它们太复杂,很难理解这些值是如何计算的。 typedef struct { XYZ p[8]; double val[8]; } GRIDCELL; 据我了解XYZ p [8]; 是立方体的顶点坐标。 但是val [8]; 是什么? 你也可以解释如何计

Marching Cubes, voxels, need a bit of suggestions

I'm trying to construct a proper destructible terrain, just for research purposes. Well, everything went fine, but resolution is not satisfying me enough. I have seen a lot of examples how people implement MC algorithm, but most of them, as far as I understand, uses functions to triangulate final mesh, which is not appropriate for me. I will try briefly to explain how I'm constructing

行进立方体,体素,需要一些建议

我正在试图构建一个适当的可破坏地形,仅用于研究目的。 那么,一切都很顺利,但决议并不足够让我满意。 我已经看到很多例子,人们如何实现MC算法,但据我了解,其中大部分都使用函数来对最终网格进行三角剖分,这对我来说并不合适。 我会尽量简单地解释我如何构建我的地形,也许你们中的某个人会给我建议如何改进,或者增加最终地形的分辨率。 1)预先计算MC三角形。 我正在通过MC查找表针对每种情况(0-255)运行简单

print C++ STL containers

Please take note of the updates at the end of this post. Update: I have created a public project on GitHub for this library! I would like to have a single template that once and for all takes care of pretty-printing all STL containers via operator<< . In pseudo code, I'm looking for something like this: template<container C, class T, String delim = ", ", String open = "[", Stri

打印C ++ STL容器

请注意这篇文章末尾的更新。 更新:我在这个库上为GitHub创建了一个公共项目! 我希望有一个单独的模板,通过operator<< ,一劳永逸地处理所有STL容器。 在伪代码中,我正在寻找像这样的东西: template<container C, class T, String delim = ", ", String open = "[", String close = "]"> std::ostream & operator<<(std::ostream & o, const C<T> & x) { o << open;

Use 'class' or 'typename' for template parameters?

Possible Duplicate: C++ difference of keywords 'typename' and 'class' in templates When defining a function template or class template in C++, one can write this: template <class T> ... or one can write this: template <typename T> ... Is there a good reason to prefer one over the other? I accepted the most popular (and interesting) answer, but the real answer

使用'class'或'typename'作为模板参数?

可能重复: 模板中关键字'typename'和'class'的C ++差异 在C ++中定义函数模板或类模板时,可以这样写: template <class T> ... 或者可以这样写: template <typename T> ... 是否有更好的理由相对于另一方偏好? 我接受了最流行的(和有趣的)答案,但真正的答案似乎是“不,没有理由相互选择一个。” 它们是相同的(除非如下所述)。 有些人有理由总是使用typename 。 有些人有理

Storing C++ template function definitions in a .CPP file

I have some template code that I would prefer to have stored in a CPP file instead of inline in the header. I know this can be done as long as you know which template types will be used. For example: .h file class foo { public: template <typename T> void do(const T& t); }; .cpp file template <typename T> void foo::do(const T& t) { // Do something with t } t

将C ++模板函数定义存储在.CPP文件中

我有一些模板代码,我宁愿将它们存储在CPP文件中,而不是在标题中内联。 我知道只要您知道将使用哪种模板类型,就可以完成此操作。 例如: .h文件 class foo { public: template <typename T> void do(const T& t); }; .cpp文件 template <typename T> void foo::do(const T& t) { // Do something with t } template void foo::do<int>(const int&); template void foo::do&l

Why use apparently meaningless do

In many C/C++ macros I'm seeing the code of the macro wrapped in what seems like a meaningless do while loop. Here are examples. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else I can't see what the do while is doing. Why not just write this without it? #define FOO(X) f(X); g(X) The do ... while and if ... else are there to make it so that a sem

为什么使用显然毫无意义的做法

在很多C / C ++宏中,我看到宏包装的代码看起来像是一个无意义的do while循环。 这里是一些例子。 #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else 我不能看到什么do while做。 为什么不在没有它的情况下写这个? #define FOO(X) f(X); g(X) do ... while , if ... else是为了让你的宏后面的分号总是意味着同样的东西。 假设你有类似你的第二个宏。 #define BAR(X) f(x); g(x)

Why is malloc 7x slower than new for Intel's icc?

I benchmarked malloc vs. new for allocating an array of floats. My understanding was that the operations performed by malloc are a subset of the operations performed by new -- that malloc just allocates but new allocates and constructs, although I'm not sure if that's a meaningful difference for primitives. Benchmarking results with gcc give the expected behavior. malloc() is faster.

为什么malloc 7x比英特尔icc的新版慢?

我基于malloc与新分配一个浮点数组。 我的理解是,由malloc执行的操作是由new执行的操作的子集 - malloc只是分配,但是新的分配和构造,尽管我不确定这对基元是否有意义的区别。 使用gcc进行基准测试结果会给出预期的行为。 malloc()更快。 甚至有人提出与此相反的问题。 用icc malloc可以比新的慢7倍。 怎么可能?! 以下所有内容仅仅是基准程序的细节。 对于基准测试,我使用了最近由英特尔描述的协议。 这是

Which one is more optimized for accessing array?

Solving the following exercise: Write three different versions of a program to print the elements of ia. One version should use a range for to manage the iteration, the other two should use an ordinary for loop in one case using subscripts and in the other using pointers. In all three programs write all the types directly. That is, do not use a type alias, auto, or decltype to simplify the c

哪一个更适合访问数组?

解决以下练习: 写出三个不同版本的程序来打印ia的元素。 一个版本应该使用一个范围来管理迭代,另外两个应该使用一个普通的for循环,一个使用下标,另一个使用指针。 在所有三个程序中直接编写所有类型。 也就是说,不要使用类型别名,自动或decltype来简化代码。[C ++ Primer] 一个问题出现了: 访问数组的哪些方法在速度方面进行了优化,为什么? 我的解决方案 Foreach Loop: int ia[3][4]={{1,2,3,4},{5,6,7,8},

Can a local variable's memory be accessed outside its scope?

I have the following code. int * foo() { int a = 5; return &a; } int main() { int* p = foo(); cout << *p; *p = 8; cout << *p; } And the code is just running with no runtime exceptions! The output was 58 How can it be? Isn't the memory of a local variable inaccessible outside its function? How can it be? Isn't the memory of a local variabl

局部变量的内存是否可以在其范围之外访问?

我有以下代码。 int * foo() { int a = 5; return &a; } int main() { int* p = foo(); cout << *p; *p = 8; cout << *p; } 代码只是在没有运行时异常的情况下运行! 产量是58 怎么会这样? 在其功能之外,是不是本地变量的内存不可访问? 怎么会这样? 在其功能之外,是不是本地变量的内存不可访问? 你租一个旅馆房间。 你把书放在床头柜的最上面的抽屉里,然后去睡觉