回答編集履歴

2

タプルを使わないコードに変更

2020/01/20 22:01

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  var tempEdgeList = edges.ToList();
146
146
 
147
- var edgePairs = new List<(Edge, Edge)>();
147
+ var edgePairs = new List<EdgePair>();
148
148
 
149
149
  try
150
150
 
@@ -162,7 +162,7 @@
162
162
 
163
163
  tempEdgeList.Remove(second);
164
164
 
165
- edgePairs.Add((first, second));
165
+ edgePairs.Add(new EdgePair {First = first, Second = second});
166
166
 
167
167
  }
168
168
 
@@ -182,17 +182,17 @@
182
182
 
183
183
  var additionalIndices = new List<int>();
184
184
 
185
- foreach (var (first, second) in edgePairs)
185
+ foreach (var edgePair in edgePairs)
186
-
186
+
187
- {
187
+ {
188
-
188
+
189
- var i0 = first.From.Index;
189
+ var i0 = edgePair.First.From.Index;
190
-
190
+
191
- var i1 = first.To.Index;
191
+ var i1 = edgePair.First.To.Index;
192
-
192
+
193
- var i2 = second.From.Index;
193
+ var i2 = edgePair.Second.From.Index;
194
-
194
+
195
- var i3 = second.To.Index;
195
+ var i3 = edgePair.Second.To.Index;
196
196
 
197
197
 
198
198
 
@@ -282,6 +282,18 @@
282
282
 
283
283
  }
284
284
 
285
+
286
+
287
+ private struct EdgePair
288
+
289
+ {
290
+
291
+ public Edge First;
292
+
293
+ public Edge Second;
294
+
295
+ }
296
+
285
297
  }
286
298
 
287
299
  ```

1

共平面ポリゴンに面を張らないよう変更、メッシュ更新タイミングをLateUpdateに変更

2020/01/20 22:01

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -194,6 +194,28 @@
194
194
 
195
195
  var i3 = second.To.Index;
196
196
 
197
+
198
+
199
+ if (normals[i0] == normals[i3])
200
+
201
+ {
202
+
203
+ // このエッジペアを挟んだ2枚の面が真っ平らになっているなら
204
+
205
+ // 引き伸ばし過程でこのペアが引き離されることはないだろうから
206
+
207
+ // (つまり、一方の三角形が光源に対して表を向いているなら
208
+
209
+ // それと同じ平面上にあるもう一方の三角形も表を向いている
210
+
211
+ // はずだから)面を張る必要はない
212
+
213
+ continue;
214
+
215
+ }
216
+
217
+
218
+
197
219
  additionalIndices.Add(i0);
198
220
 
199
221
  additionalIndices.Add(i3);
@@ -388,7 +410,13 @@
388
410
 
389
411
 
390
412
 
413
+ // Updateだと、このスクリプトがメッシュを更新した後で他のスクリプトによって
414
+
415
+ // オブジェクトの位置その他が書き換えられた場合にずれが生じてしまうため、
416
+
417
+ // LateUpdateを使うようにしてそうなる可能性を低減した
418
+
391
- private void Update()
419
+ private void LateUpdate()
392
420
 
393
421
  {
394
422