将 Javascript 转换为 C# 问题

Translating Javascript to C# Issues

如果有帮助,我一直在尝试转换此 Javascript code into a C# (Unity3d) script. It is an implementation of Naive Surface Nets explained here

我翻译的 C# 脚本在没有 errors/warnings 的情况下编译,但结果是一个损坏的(但可识别的)网格:

我还注意到顶点看起来相当正确:

(如果您还不能分辨,输入体素只是单纯形噪声。)

我真的很想让它工作,但我对 Javascript 不是很熟悉。 精通这两种语言的人可以告诉我我错过了什么吗?谢谢。

编辑:Here's the project.

Unity 的网格接收三角形列表。
但是,Javascript 代码似乎使用四边形列表。
你应该把一个正方形分成两个三角形。

if (Convert.ToBoolean(mask & 1))
{

    faces.Add(buffer[m]);
    faces.Add(buffer[m - dv]);
    faces.Add(buffer[m - du]);

    faces.Add(buffer[m - dv]);
    faces.Add(buffer[m - du - dv]);
    faces.Add(buffer[m - du]);
}
else
{
    faces.Add(buffer[m]);
    faces.Add(buffer[m - du]);
    faces.Add(buffer[m - dv]);

    faces.Add(buffer[m - du]);
    faces.Add(buffer[m - du - dv]);
    faces.Add(buffer[m - dv]);
}

mesh.SetTriangles(faces, 0);

你的三维数组工具有问题...
带有单个数组的原始 Javascript 代码工作正常。

已解决。我只是错误翻译了 Javascript 代码的第 87 行。

原文:

for(x[2]=0; x[2]<dims[2]-1; ++x[2], n+=dims[0], buf_no ^= 1, R[2]=-R[2]) {

我的错误翻译:

for (pos[2] = 0; pos[2] < depth - 1; pos[2]++, bufferNumber ^= 1, R[2] = -R[2] )

更正为:

for (pos[2] = 0; pos[2] < depth - 1; n += width, bufferNumber ^= 1, R[2] = -R[2] )

基本上是错别字。抱歉。