【问题标题】:Translating Javascript to C# Issues将 Javascript 转换为 C# 问题
【发布时间】:2016-07-30 18:20:42
【问题描述】:

我一直在尝试将此Javascript code 转换为C# (Unity3d) script。如果有帮助,它是 Naive Surface Nets explained here 的实现。

我翻译的 C# 脚本编译时没有错误/警告,但结果是一个损坏的(但可识别的)网格:

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

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

我真的很想让这个工作,但我并不精通 Javascript。 能很好地了解两种语言的人告诉我我错过了什么吗?谢谢。

编辑:Here's the project.

【问题讨论】:

  • 我很乐意提供帮助,但我不确定如何通过 Stack Overflow 接收您的项目。
  • @Jace 我会把它存起来,然后给你发一个链接。这对你有用吗?
  • 当然可以
  • 谢谢,我去看看

标签: javascript c# unity3d voxel


【解决方案1】:

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 代码可以正常工作。

【讨论】:

  • 感谢您的帮助,但我已经解决了!我只是忘了把它贴在这里。这是我的一个非常小的翻译错误。是的,我知道 Unity 更喜欢三角形,而且我已经实施了您的解决方案,甚至在您知道您已将其发布在这里之前。 (之前我使用的是Mesh.SetIndices(),它允许你指定四边形而不是三角形)不过现在这些都不重要了。当与块中的体素数据一起使用时,这种网格划分方法存在一些基本问题。我打算放弃这种方法并尝试另一种方法,例如行进立方体或双轮廓。
【解决方案2】:

解决了。我只是误译了 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] )

基本上是一个错字。对此感到抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2011-10-19
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多