- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经在 DirectX 环境中实现了 Marching Cube 算法(为了测试和玩乐)。完成后,我注意到生成的模型看起来严重变形,就好像索引被关闭了一样。
我试图提取索引,但我认为顶点已经正确排序,使用查找表,示例位于 http://paulbourke.net/geometry/polygonise/ .当前构建使用 15^3 体积。
移动立方体像往常一样遍历数组:
for (float iX = 0; iX < CellFieldSize.x; iX++){
for (float iY = 0; iY < CellFieldSize.y; iY++){
for (float iZ = 0; iZ < CellFieldSize.z; iZ++){
MarchCubes(XMFLOAT3(iX*StepSize, iY*StepSize, iZ*StepSize), StepSize);
}
}
}
调用 MarchCube 函数:
void MC::MarchCubes(){
...
int Corner, Vertex, VertexTest, Edge, Triangle, FlagIndex, EdgeFlags;
float Offset;
XMFLOAT3 Color;
float CubeValue[8];
XMFLOAT3 EdgeVertex[12];
XMFLOAT3 EdgeNorm[12];
//Local copy
for (Vertex = 0; Vertex < 8; Vertex++) {
CubeValue[Vertex] = (this->*fSample)(
in_Position.x + VertexOffset[Vertex][0] * Scale,
in_Position.y + VertexOffset[Vertex][1] * Scale,
in_Position.z + VertexOffset[Vertex][2] * Scale
);
}
FlagIndex = 0;
交点计算:
...
//Test vertices for intersection.
for (VertexTest = 0; VertexTest < 8; VertexTest++){
if (CubeValue[VertexTest] <= TargetValue)
FlagIndex |= 1 << VertexTest;
}
//Find which edges are intersected by the surface.
EdgeFlags = CubeEdgeFlags[FlagIndex];
if (EdgeFlags == 0){
return;
}
for (Edge = 0; Edge < 12; Edge++){
if (EdgeFlags & (1 << Edge)) {
Offset = GetOffset(CubeValue[EdgeConnection[Edge][0]], CubeValue[EdgeConnection[Edge][1]], TargetValue); // Get offset function definition. Needed!
EdgeVertex[Edge].x = in_Position.x + VertexOffset[EdgeConnection[Edge][0]][0] + Offset * EdgeDirection[Edge][0] * Scale;
EdgeVertex[Edge].y = in_Position.y + VertexOffset[EdgeConnection[Edge][0]][1] + Offset * EdgeDirection[Edge][1] * Scale;
EdgeVertex[Edge].z = in_Position.z + VertexOffset[EdgeConnection[Edge][0]][2] + Offset * EdgeDirection[Edge][2] * Scale;
GetNormal(EdgeNorm[Edge], EdgeVertex[Edge].x, EdgeVertex[Edge].y, EdgeVertex[Edge].z); //Need normal values
}
}
原始实现被插入 DirectX 的持有结构。
for (Triangle = 0; Triangle < 5; Triangle++) {
if (TriangleConnectionTable[FlagIndex][3 * Triangle] < 0) break;
for (Corner = 0; Corner < 3; Corner++) {
Vertex = TriangleConnectionTable[FlagIndex][3 * Triangle + Corner];3 * Triangle + Corner]);
GetColor(Color, EdgeVertex[Vertex], EdgeNorm[Vertex]);
Data.VertexData.push_back(XMFLOAT3(EdgeVertex[Vertex].x, EdgeVertex[Vertex].y, EdgeVertex[Vertex].z));
Data.NormalData.push_back(XMFLOAT3(EdgeNorm[Vertex].x, EdgeNorm[Vertex].y, EdgeNorm[Vertex].z));
Data.ColorData.push_back(XMFLOAT4(Color.x, Color.y, Color.z, 1.0f));
}
}
(这与原始 GL 实现的顺序相同)
最佳答案
事实证明,我错过了一个显示运算符优先级的括号。
EdgeVertex[Edge].x = in_Position.x + (VertexOffset[EdgeConnection[Edge][0]][0] + Offset * EdgeDirection[Edge][0]) * Scale;
EdgeVertex[Edge].y = in_Position.y + (VertexOffset[EdgeConnection[Edge][0]][1] + Offset * EdgeDirection[Edge][1]) * Scale;
EdgeVertex[Edge].z = in_Position.z + (VertexOffset[EdgeConnection[Edge][0]][2] + Offset * EdgeDirection[Edge][2]) * Scale;
修正,获得Visine;恢复乐趣。
关于c++ - DirectX/C++ : Marching Cubes Indexing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465519/
到目前为止我的代码:月 = 月.substring(0,1).toUpperCase() + 月.substring(1);当我输入 March 时,它会显示为 March,这就是我想要的。但是如果我
我收到以下警告:。当我将-mcPU设置为CORACLE-R4或CORACLE-R4F时,我没有得到这个问题。由于Cortex R5是相同的ARMv7-r架构,我猜这是GCC工具链中的一个错误?我目前使
With GCC可以打印出-march=native触发的特定标志。 Clang是否可以打印类似的信息? 最佳答案 可以使用-help=target来打印出编译命令,而不是使用(在clang中不存在)
编译器(例如:gcc)中的 -march 标志真的很重要吗? 如果我使用 -march=my_architecture 而不是 -march=i686 编译所有程序和内核,会不会更快 最佳答案 是的,
为什么我在运行以下代码时得到两个 March 而不是 February 然后 March? 输出: 01:January 02:March 03:March 04:April 05:May 06:J
我正在编写一个 C++ 程序,用于求解网络上的偏微分方程和代数方程。Eigen 库承担了大部分工作,通过 LU 分解求解许多稀疏线性系统。 由于性能总是很好,所以我尝试了一些选项。我正在使用 g++
我的应用程序极大地受益于高级 CPU 功能,gcc 在使用 -march native 运行时可以访问这些功能。 Docker 可以消除操作系统的差异,但它如何处理不同的 CPU?要构建一个可以在任何
这个问题已经有答案了: How to see which flags -march=native will activate? (5 个回答) 已关闭 4 年前。 目前我们在相同的硬件上编译和运行代码
我正在寻找 vtk 的行进立方体的替代方案。它必须与 python 绑定(bind)。存在吗? 最佳答案 pythonisosurfaces包含一个实现here ,尽管它需要与其 web 应用程序的装
我正在制作一个使用“齿轮和链条”的 CSS 动画,但无法创建“平滑”的边框旋转序列。 你可以在这个fiddle中看到我(目前)如何使用伪元素来生成“旋转”效果。这是通过在白色虚线和金色虚线边框之间“切
Gentoo Wiki告诉我以下内容: Warning: GCC 4.2 and above support -march=native. -march=native applies addition
我需要能够准确地检测和响应与任何位图地形的碰撞,最好的方法似乎是使用 Marching Squares 生成多边形网格,然后我可以将其与 Bullet 等物理引擎一起使用,这比我自己写的任何东西都要好
我尝试为此擦洗 GCC 手册页,但仍然没有明白,真的。 -march 和 -mtune 之间有什么区别? 什么时候只使用-march,什么时候同时使用两者?是否可以仅-mtune? 最佳答案 如果您使
我正在使用 GCC 4.3 编译我的 C++ 应用程序。我没有手动选择优化标志,而是使用 -march=native,理论上它应该添加适用于我正在编译的硬件的所有优化标志。但我如何检查它实际使用了哪些
对于大多数 C/C++ 编译器,都有一个可传递给编译器的标志 -march=native,它告诉编译器针对主机 CPU 的微架构和 ISA 扩展调整生成的代码。即使名称不同,基于 LLVM 的编译器通
如何安装STS来eclipseoxy(2018.march) 市场上没有sts?我已经使用帮助>安装软件>解压文件夹>手动尝试过,但它不起作用 最佳答案 如果您对 Spring Tools 4 感兴趣
我正在编译程序: #include #include #include #include struct Model { int open, extend; }; struct Cell
我想要按以下格式给出日期格式:1990 年 3 月 1 日。日期格式应为 YYYY-MM-DD。我有以下代码。它给了我一个无法解析的日期。由此我可以理解,这不是格式化该日期的正确方法,因为它不是有效的
我的云服务器上的底层架构最近发生了变化,看起来像我在使用 gcc -march=native (Ubuntu 14.04, gcc 4.8) 编译的代码时遇到了麻烦 它过去总是在 16 核 Intel
我目前正在实现 Marching Squares用于计算等高线曲线,我对此处提到的位移位的使用有疑问 Compose the 4 bits at the corners of the cell to
我是一名优秀的程序员,十分优秀!