Я использую DirectX 9 в C #
Я храню все свои вершины в списке (не в массиве), потому что я использую алгоритм динамического LOD, поэтому все рассчитывается для каждого кадра, поэтому мои вершины потенциально могут отличаться в каждом кадре,
Все работало нормально, пока я не попытался добавить нормали и освещение.
Я обнаружил, что вы не можете редактировать нормаль после добавления вершины в список, потому что это скорее список структур, чемклассы.Так что он просто выдает ошибку вроде «не могу изменить возвращаемое значение blablaba, потому что это не переменная»
Например, если я попытался это сделать, это не сработает -
vertices[i].Normal = new Vector3(0, 1, 0);
Нормали должны быть добавлены, когда вершина помещена в список, но вы не можете вычислять нормали, пока у вас не будет полной сетки.
Поэтому я создал новый пользовательский тип вершины и вместо того, чтобы сделать его структуройЯ сделал это классом.Это также не работает, потому что DirectX не примет его, если это не структура ...
Итак, я попытался заставить его работать с массивами вместо списка вершин.Это привело к тому, что было менее одного кадра в секунду.Мне пришлось использовать Array.Resize, чтобы изменить размер моего массива несколько сотен раз за кадр, и, думаю, это не понравилось.
Вы, вероятно, думаете, что я должен превратить окончательный список в массив, а затем вычислить нормали оттуда.Это не сработает, потому что вершины не добавляются в каком-либо определенном порядке, поэтому я не могу знать, какие вершины находятся рядом с данной вершиной, чтобы можно было вычислить нормаль.
Так как я могу сохранить своивершины таким образом, чтобы я мог дать им нормали после того, как построил свою сетку?