回答編集履歴
2
未解決に戻ったので文言を変更
test
CHANGED
@@ -206,7 +206,7 @@
|
|
206
206
|
|
207
207
|
|
208
208
|
|
209
|
-
[
|
209
|
+
[編集:コメント欄の内容のうち,質問内容への回答的な要素がある部分を以下に移植しておく]
|
210
210
|
|
211
211
|
|
212
212
|
|
1
コメント欄の内容を回答へ移植
test
CHANGED
@@ -195,3 +195,89 @@
|
|
195
195
|
}
|
196
196
|
|
197
197
|
```
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
---
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
---
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
[解決後の編集:コメント欄の内容のうち,質問内容への回答的な要素がある部分を以下に移植しておく]
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
### 質問文記載の法線計算方法の話について
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
> 1と2どちらがただしいでしょうか。
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
とのことですが…
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
> 1.追記ベクトルA=(2,-1,3)のベクトルAを正規化しなさい
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
これは,単なる ベクトルの単位化 の話ですね.
|
230
|
+
|
231
|
+
L2ノルムで全要素を除すことで単位ベクトルが得られる,という普通の話です.
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
> 2.ポリゴンの3頂点をv1=(1,0,0),v2=(0,1,0),v3=(0,0,1)として法線を正規化しなさい
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
こっちは,三角形の法線方向ベクトルを外積で求めて,
|
240
|
+
|
241
|
+
その後でそれを前記1の話で単位化する,という話.
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
…なので,1と2の関係性というのは「2の計算は1の話を用いている」であり,「どちらが正しいか」という関係性ではないですよね.
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
1, 2 の話自体はごくごく普通の内容と見えます.
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
### glScale の影響の話
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
glSacle のスケーリングが,glNormal3f で設定している値にまで効果を及ぼしてしまう,ということなんだと思います.
|
258
|
+
|
259
|
+
例えば,
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
```
|
264
|
+
|
265
|
+
glScalef( 2, 2, 2 );
|
266
|
+
|
267
|
+
...
|
268
|
+
|
269
|
+
glNormal3f( /*単位法線ベクトルのx,y,z*/ );
|
270
|
+
|
271
|
+
```
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
という形で書くと,結果として法線が長さ2になってしまうんでしょうね.
|
276
|
+
|
277
|
+
(で,変な単位ベクトルでない変な値で計算されてしまって,結果の色がおかしくなる,と.)
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
`GL_NOMALIZE` とかいうのはこの嫌らしい効果に対抗するための手段…ということなのかな.
|
282
|
+
|
283
|
+
(ライティング処理の前に法線を正規化してくれる機能っぽい)
|