2016-07-30 12 views
1

Я пытался конвертировать этот Javascript code в C# (Unity3d) script. Это реализация сетей Naive Surface Nets explained here, если это помогает.Перевод Javascript на проблемы C#

Мой переведенный C# скрипт компилируется без ошибок/предупреждений, но результат разбитым (но узнаваемы) сетка: C# Script in Unity3D

Я также заметил, что вершины выглядят достаточно корректно: enter image description here

(Если вы не можете сказать, входные вокселы - это просто симплексный шум.)

Я бы очень хотел, чтобы это работало, но я не очень хорошо разбираюсь в Javascript. Может ли кто-нибудь, кто знает оба языка, хорошо сказать мне, что я пропустил? Спасибо.

EDIT: Here's the project.

+1

Я был бы рад помочь, но я не уверен, как получить ваш проект через Stack Overflow. – Jace

+0

@Jace Я сниму его и отправлю вам ссылку. Это работает для вас? – bpmw

+0

Несомненно, что сделает – Jace

ответ

0

Решено. Я просто ошибочно передал строку 87 кода Javascript.

Оригинал:

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

 Смежные вопросы

  • Нет связанных вопросов^_^