﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-野猪世界 专注图形技术-随笔分类-数学</title><link>http://www.cppblog.com/zhuyeaini/category/14562.html</link><description>ogre cegui wxWidgets bullet python lua</description><language>zh-cn</language><lastBuildDate>Sat, 10 Nov 2012 10:33:47 GMT</lastBuildDate><pubDate>Sat, 10 Nov 2012 10:33:47 GMT</pubDate><ttl>60</ttl><item><title>3D 数学</title><link>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Fri, 09 Nov 2012 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/194981.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/194981.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/194981.html</trackback:ping><description><![CDATA[<p><span style="color: red">1.坐标系转换：</span><br />讨论范围：右手坐标系<br />坐标系A<br />坐标系B<br />仅考虑旋转：坐标系B的x y z轴在坐标系A中可表示为x' y' z'<br />则坐标系A中的一点P在坐标系B下的新坐标为P'：<br />(x'<br />&nbsp;y'&nbsp;&nbsp; * P = P'<br />&nbsp;z')<br /><br /><span style="color: red">2.关于叉积：</span><br />叉积在数学上是用右手定则来判断结果向量的<br />x轴和y轴的叉积是z 但在左手坐标系下 x轴和y轴的叉积是-z轴<br /><br /><span style="color: red">3 tangent space 本质</span><br />靠 为什么不能插表情了 <br />好 直入主题 什么是tangent space<br />本质 我们看的是本质 本质就是一坐标系 谁的坐标系 纹理空间的坐标系<br />好 现在我们要做的就是 在世界坐标系和纹理坐标系这两个坐标系之间的某种变换<br />这种变换是一个4x4矩阵，包括位移，旋转，缩放，错切等<br />特别地，当我们知道其中一个坐标系的原点以及三个坐标系的方向在另一个坐标系中的值时<br />这个变换就可以很容易的写出来：<br />假如新坐标系S'的X轴,Y轴,Z轴在原坐标系中为X'，Y'，Z'，原点不变，那么新坐标系下的A&#8217;点<br />在原坐标系下的A点为：(A'为Px' Py' Pz' 1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />A&nbsp;&nbsp; = X' &nbsp;&nbsp;&nbsp; Y' &nbsp;&nbsp; Z' &nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; A'<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1<br /><br />假如不考虑位移 且V'为新坐标系下的某个单位方向<br /></p>
<div>那么，其在原坐标系下的方向V为：<br />V= X' &nbsp;&nbsp;&nbsp; Y' &nbsp;&nbsp; Z'&nbsp; *V'<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>现在 我们再回到原问题<br />我们知道的是：三角形面的三个顶点 顶点的纹理<br />一般来说 这个问题的变换上我们关心的是旋转 因为我们只在乎：<br />在纹理空间下的法线方向对应世界坐标系中的方向<br />所以，我们只要知道对应的U,N,V对应在世界坐标系的方向，这个变换就知道了<br />这就变成了上面的那个方向变换问题，我们通过顶点的世界坐标和纹理坐标可以<br />知道对应的在两个坐标系下的方向 其中的N在世界坐标系中的方向可以通过面法线<br />马上知道 其它两个方向通过等式就可以得出：<br />V1 = (U N V) V1'<br />V2 = (U N V) V2'<br />其中，V1为世界坐标系方向 V1'为纹理坐标系方向 可分别通过顶点坐标和纹理坐标得到<br />当然，纹理坐标的N向量为0，事实上，变换到最后用不着N法线，可参考：<br /><a href="http://www.cppblog.com/tx7do/archive/2008/12/09/68898.html"><font color="#0000ff">http://www.cppblog.com/tx7do/archive/2008/12/09/68898.html</font></a><br /><br />现在 是否明白<br />当然 原理基本上就是这样 具体情况视应用而定 <img src ="http://www.cppblog.com/zhuyeaini/aggbug/194981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2012-11-09 16:23 <a href="http://www.cppblog.com/zhuyeaini/archive/2012/11/09/194981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>