2016-07-30 68 views
1

我一直在試圖將Javascript code轉換爲C# (Unity3d) script。如果有幫助,這是一個天真表面網explained here的實施。將Javascript轉換爲C#問題

我轉換過來的C#腳本不正確編譯/警告,但結果是一個壞的(但可識別)目: C# Script in Unity3D

我也注意到,頂點看起來相當正確的: enter image description here

(如果你不能說,輸入體素只是單純的噪音。)

我真的很想得到這個工作,但我不熟悉Javascript。 懂得這兩種語言的人能告訴我我錯過了什麼嗎?謝謝。

編輯:Here's the project.

+1

我很樂意提供幫助,但我不確定如何通過堆棧溢出接收您的項目。 – Jace

+0

@Jace我會Dropbox它並給你一個鏈接。那對你有用嗎? – bpmw

+0

當然,那會做 – Jace

回答

0

已解決。我簡單地誤譯了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]) 

基本上是一個錯字。對於那個很抱歉。

0

統一的網格收到一個三角形列表。
但是,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代碼工作正常。

+0

感謝您的幫助,但我已經解決了!我只是忘了把它發佈在這裏。這是我的一個非常小的翻譯錯誤。是的,我知道Unity喜歡三角形,而且在知道您已經發布之前,我已經實施了您的解決方案。 (事先我正在使用'Mesh。SetIndices()'它允許你指定四邊形而不是三角形)儘管如此,這些都不重要。這種網格化方法在與體塊數據一起使用時會遇到一些基本問題。我要廢棄這種方法,並嘗試另一種方法,如遊動立方體或雙輪廓。 – bpmw