teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

未解決に戻ったので文言を変更

2021/10/28 11:35

投稿

fana
fana

スコア12227

answer CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  ---
104
104
 
105
- [解決後の編集:コメント欄の内容のうち,質問内容への回答的な要素がある部分を以下に移植しておく]
105
+ [編集:コメント欄の内容のうち,質問内容への回答的な要素がある部分を以下に移植しておく]
106
106
 
107
107
  ### 質問文記載の法線計算方法の話について
108
108
 

1

コメント欄の内容を回答へ移植

2021/10/28 11:35

投稿

fana
fana

スコア12227

answer CHANGED
@@ -96,4 +96,47 @@
96
96
  }
97
97
  return 0;
98
98
  }
99
- ```
99
+ ```
100
+
101
+ ---
102
+
103
+ ---
104
+
105
+ [解決後の編集:コメント欄の内容のうち,質問内容への回答的な要素がある部分を以下に移植しておく]
106
+
107
+ ### 質問文記載の法線計算方法の話について
108
+
109
+ > 1と2どちらがただしいでしょうか。
110
+
111
+ とのことですが…
112
+
113
+ > 1.追記ベクトルA=(2,-1,3)のベクトルAを正規化しなさい
114
+
115
+ これは,単なる ベクトルの単位化 の話ですね.
116
+ L2ノルムで全要素を除すことで単位ベクトルが得られる,という普通の話です.
117
+
118
+ > 2.ポリゴンの3頂点をv1=(1,0,0),v2=(0,1,0),v3=(0,0,1)として法線を正規化しなさい
119
+
120
+ こっちは,三角形の法線方向ベクトルを外積で求めて,
121
+ その後でそれを前記1の話で単位化する,という話.
122
+
123
+ …なので,1と2の関係性というのは「2の計算は1の話を用いている」であり,「どちらが正しいか」という関係性ではないですよね.
124
+
125
+ 1, 2 の話自体はごくごく普通の内容と見えます.
126
+
127
+ ### glScale の影響の話
128
+
129
+ glSacle のスケーリングが,glNormal3f で設定している値にまで効果を及ぼしてしまう,ということなんだと思います.
130
+ 例えば,
131
+
132
+ ```
133
+ glScalef( 2, 2, 2 );
134
+ ...
135
+ glNormal3f( /*単位法線ベクトルのx,y,z*/ );
136
+ ```
137
+
138
+ という形で書くと,結果として法線が長さ2になってしまうんでしょうね.
139
+ (で,変な単位ベクトルでない変な値で計算されてしまって,結果の色がおかしくなる,と.)
140
+
141
+ `GL_NOMALIZE` とかいうのはこの嫌らしい効果に対抗するための手段…ということなのかな.
142
+ (ライティング処理の前に法線を正規化してくれる機能っぽい)