2009-05-25 2 views
4

OpenGL ES 1.xでは、スケーリング(一様)オブジェクトのダウンによってオブジェクトがより軽くなるのはなぜですか?スケーリングオブジェクトがダウンすると、オブジェクトがOpenGL ESで明るくなるのはなぜですか?

法線が縮小されてオブジェクトが暗くなりませんので、暗くなるのはもっと理にかなっていますか?しかし何らかの理由でオブジェクトが軽くなります。スケールアップすると、オブジェクトは暗くなります。私の意見では、これは別の方法でなければなりません。

GL_NORMALIZEなどを使って提案しないでください。私はなぜOpenGLの実装がそのように機能するのか不思議です。

+0

これの前後のスクリーンショットを投稿します。 –

答えて

7

簡単な質問、複雑な答え。

変革法線

法線ベクトルは頂点、または位置 ベクトルとして 同じように変換しません。これはレッドブックからの関連抽出物です。数学的には、 は、法線ベクトルを ベクトルとしてではなく、これらのベクトルに垂直な平面として考えてください。次に、通常の ベクトルの 変換規則は、 平面の変換規則の 変換規則で記述されています。均一な平面は、行ベクトル(a、b、c、d)によって と表され、 a、b、c、またはdの少なくとも1つは 0ではない。 qが0以外の実数 の場合、(a、b、c、d)と(qa、qb、 qc、qd)は同じ平面を表します。 ax + by + cz + dw = 0の場合、 点(x、y、z、w)Tは平面上にあります。( = (a、b、c、d)がユークリッド平面を表すためには、a、b、またはcの少なくとも1つは0でなければならない。それらがすべてゼロである場合、 (0、0、0、d)は "無限大の点"をすべて含む " 無限大の平面"を表します。

pは均質な平面とvは 均質頂点である場合、その文 は「vが平面P上にある」PVは 通常の行列積であるPV = 0として数学的に を書かれています。 Mが で非特異的な頂点変換 (すなわち、 の逆M-1を持つ4×4行列)の場合、pv = 0はpM-1Mv = 0に等しい であるため、Mvは平面pM上に です-1。あなたは、ベクターとして代わりにそれらに 垂直面として法線ベクトル 考えるVをさせかつn になりたい場合はこのように、PM-1は、頂点 変換M.

下平面の 画像でありますvが、ベクトルに対して、 からnまで垂直であるようなベクトル。そして、nTv = 0となる。従って、 任意の非特異的形質転換 M、nTM-1Mv = 0、これは、nTM-1 が形質転換された形質転換体の転位であることを意味する。したがって、変換された の法線ベクトルは(M-1)T nである。他の ワードでは、法線ベクトルは点を変換する 変換の逆転置によって に変換されます。 すごい!

要するに、位置と法線は同じように変形しません。前のテキストで説明したように、正規変換行列は(M-1)Tです。 MをsMにスケーリングすると、(M-1)T/sになります。スケールファクタが小さいほど、変換されたノーマルは大きくなります...ここに行きます!

0

法線はオブジェクトのスケーリングではないようです。これは、フルサイズのオブジェクトの法線が、より小さいサイズのオブジェクトのかなり多くのカバレッジを意味することを意味する。これは、光源と法線との間の角度がまったく同じであるが、はるかに小さい表面上の角度につながる。

+0

うーん..それはどういうわけか意味をなさないだろうが、私はヒットした数学を理解していない。サーフェスの法線は、スケーリングの影響を受けた逆モデルビュー行列と掛け合わされていません。 –

+0

私は分かりませんが、法線の理解はOpenGLほどではなく3Dアニメーションから来ています。私はいくつかの素早い読書に基づいて私の答えに基づいていました。法線はしばしば事前に計算され、それぞれのポリ顔/ verts/etcに従わなければならないと言わなければなりません。法線がジオメトリに従わない(またはあなたのケースではスケールする)場合は、暗くて明るい場所になります。 – Soviut

関連する問題