﻿<?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++博客-WHy so serious?-随笔分类-Graphics</title><link>http://www.cppblog.com/tabmood/category/11059.html</link><description>太阳下早已没有新鲜事</description><language>zh-cn</language><lastBuildDate>Sun, 12 Jul 2009 05:31:46 GMT</lastBuildDate><pubDate>Sun, 12 Jul 2009 05:31:46 GMT</pubDate><ttl>60</ttl><item><title>nurbs学习&lt;3&gt;</title><link>http://www.cppblog.com/tabmood/archive/2009/07/11/89767.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Fri, 10 Jul 2009 16:43:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/07/11/89767.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/89767.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/07/11/89767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/89767.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/89767.html</trackback:ping><description><![CDATA[<font style="FONT-SIZE: 10pt" face=#ce_temp_font#>关于控制点的权因子在opengl下的体现。准备画一条nurbs曲线的时候想到的，貌似在opengl的库函数里，无论是gluNurbsSurface还是gluNurbsCurve里面都没有看到关于权因子的参数啊，那么怎么画nurbs曲线呢？<br>开始注意的是函数中的最后一个type参数GL_MAP1_VERTEX_3和GL_MAP1_VERTEX_4，嗯，如果体现的话，应该是坐标的第四个参数，就是齐次坐标。关于齐次坐标，资料上也没有详细提它的用处，只简单的介绍了一下它与三维坐标的变换，就是三个坐标都除以齐次的那个坐标。<br>想想应该就是这样了，开始动手了。又遇到了一个问题，曲线根本不正确。因为用的是一个pp上的例子，参数应该没问题，然后就反复的查找原因，开始我想是不是权因子错了，但改了一下图形反而更不对了。google了一下，看了狠多例子后，发现是自己权因子的用错了，并不是简单的设置w参数的，要考虑到因此而改动的三维坐标，保持一致性。<br>那么修改后的坐标参数应该是(x*w, y*w, z*w, w)而不是简单的(x, y, z, w)。</font> 
<img src ="http://www.cppblog.com/tabmood/aggbug/89767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-07-11 00:43 <a href="http://www.cppblog.com/tabmood/archive/2009/07/11/89767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NURBS学习（2）</title><link>http://www.cppblog.com/tabmood/archive/2009/07/05/89276.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Sun, 05 Jul 2009 04:42:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/07/05/89276.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/89276.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/07/05/89276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/89276.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/89276.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt">NURBS曲线新增加的曲线控制手段权因子{&#969;i }。第一眼看上去的感觉是没有必要，调整控制点不就可以了吗。后来发现不是这样的，一个控制点和<span style="FONT-SIZE: 10pt"><font style="FONT-SIZE: 10pt" size=3>B-spline的基函数只能表示有限的曲线，并且曲线的走向收到基函数的控制比较大。那么加上权因子之后使得走向更灵活，而且可以表示</font><font style="FONT-SIZE: 10pt" color=#008000 size=4>Conic sections了<font color=#002c99>。</font></font><br></span></span>
<img src ="http://www.cppblog.com/tabmood/aggbug/89276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-07-05 12:42 <a href="http://www.cppblog.com/tabmood/archive/2009/07/05/89276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>B-spline basis functions（转）</title><link>http://www.cppblog.com/tabmood/archive/2009/07/05/89273.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Sun, 05 Jul 2009 04:10:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/07/05/89273.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/89273.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/07/05/89273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/89273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/89273.html</trackback:ping><description><![CDATA[<h1><font style="FONT-SIZE: 10pt" color=green size=5>这篇可能帮我们更好的理解B-spline。</font></h1>
The equation for <em>k</em>-order B-spline with <em>n+1</em> control points <em>(<strong>P</strong><sub>0</sub> , <strong>P</strong><sub>1</sub> , ... , <strong>P</strong><sub>n</sub> )</em> is <br>&nbsp; &nbsp; <em><strong>P</strong>(t) = ∑<sub>i=0,n</sub> N<sub>i,k</sub>(t) <strong>P</strong><sub>i</sub> , &nbsp; &nbsp; t<sub>k-1</sub> &lt;= t &lt;= t<sub>n+1</sub></em> . <br>In a B-spline each control point is associated with a basis function <em>N<sub>i,k</sub></em> which is given by the recurrence relations (see <a href="http://ibiblio.org/e-notes/Splines/Bspline.java"><u><font color=#810081>Bspline.java</font></u></a>) <br>&nbsp; &nbsp; <em>N<sub>i,k</sub>(t) = N<sub>i,k-1</sub>(t) (t - t<sub>i</sub>)/(t<sub>i+k-1</sub> - t<sub>i</sub>) + N<sub>i+1,k-1</sub>(t) (t<sub>i+k</sub> - t)/(t<sub>i+k</sub> - t<sub>i+1</sub>) , <br>&nbsp; &nbsp; N<sub>i,1</sub> = {1 &nbsp; if &nbsp; t<sub>i</sub> &lt;= t &lt;= t<sub>i+1</sub> ,&nbsp; &nbsp; 0 &nbsp; otherwise }</em> <br><em>N<sub>i,k</sub></em> is a polynomial of order <em>k</em> (degree <em>k-1</em>) on each interval <em>t<sub>i</sub> &lt; t &lt; t<sub>i+1</sub></em>. <em>k</em> must be at least 2 (linear) and can be not more, than <em>n+1</em> (the number of control points). A knot vector <em>(t<sub>0</sub> , t<sub>1</sub> , ... , t<sub>n+k</sub>)</em> must be specified. Across the knots basis functions are <em>C<sup> k-2</sup></em> continuous. <br><img height=200 alt="iterations scheme" src="http://ibiblio.org/e-notes/Splines/fig/B.gif" width=200> &nbsp; &nbsp; <img height=200 alt="basis functions" src="http://ibiblio.org/e-notes/Splines/fig/B2.gif" width=250> <br>Corresponding iterations scheme for cubic (<em>k = 4</em>) basis functions is shown in Fig.1 . You see, that for a given <em>t</em> value only <em>k</em> basis functions are non zero, therefore B-spline depends on <em>k</em> nearest control points at any point <em>t</em>.
<p>B-spline basis functions as like as Bezier ones are nonnegative <em>N<sub>i,k</sub> &gt;= 0</em> and have "partition of unity" property <br>&nbsp; &nbsp; <em>∑<sub>i=0,n</sub> N<sub>i,k</sub>(t) = 1, &nbsp; &nbsp; t<sub>k-1</sub> &lt; t &lt; t<sub>n+1</sub></em> <br>therefore <br>&nbsp; &nbsp; <em>0 &lt;= N<sub>i,k</sub> &lt;= 1</em>. <br>As since <em>N<sub>i,k</sub> = 0</em> for <em>t &lt;= t<sub>i</sub></em> or <em>t &gt;= t<sub>i+k</sub></em> therefore a control point <em><strong>P</strong><sub>i</sub></em> influences the curve only for <em>t<sub>i</sub> &lt; t &lt; t<sub>i+k</sub></em>. </p>
<img src ="http://www.cppblog.com/tabmood/aggbug/89273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-07-05 12:10 <a href="http://www.cppblog.com/tabmood/archive/2009/07/05/89273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NURBS学习（1）</title><link>http://www.cppblog.com/tabmood/archive/2009/07/01/89030.html</link><dc:creator>Eleven</dc:creator><author>Eleven</author><pubDate>Wed, 01 Jul 2009 14:36:00 GMT</pubDate><guid>http://www.cppblog.com/tabmood/archive/2009/07/01/89030.html</guid><wfw:comment>http://www.cppblog.com/tabmood/comments/89030.html</wfw:comment><comments>http://www.cppblog.com/tabmood/archive/2009/07/01/89030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tabmood/comments/commentRss/89030.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tabmood/services/trackbacks/89030.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt">要用opengl做一个模型，所以这两天一直在看曲线和曲面方面的图形学知识。<br>关于NURBS的曲线，opengl提供了一般的函数来使用。但如果不了解原理的话，使用起来还是比较困难的。这两天我就一直在艰涩的学习着。因为图形学的知识比较差，高数中的曲线函数学的又比较废，所以进展很慢。<br>但今天总算对B-样条和贝兹曲线有了些理解。<br>它们两个可以说是NURBS的基础和前提吧。<br>关于B&#233;zier curve，理解起来比较容易。wiki上的解释比较形象，</span><a href="http://zh.wikipedia.org/w/index.php?title=%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A&amp;variant=zh-cn"><span style="FONT-SIZE: 10pt">http://zh.wikipedia.org/w/index.php?title=%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A&amp;variant=zh-cn</span></a><span style="FONT-SIZE: 10pt">。在此就不过多阐述了。<br>B-样条可以说缠了我很长时间，起初一直在节点向量和具体的图形之间纠结。而且大多数网上的讲解都是以公式为基础的。我本来就是想快速的形象的理解下的，对公式又比较厌烦，所以看了一天没有明白之后决定从公式看起来。现在感觉是有点小理解了。<br>关于B-样条，我想主要是这两个东西：控制点和B样条基。可以说曲线的形状就是由它而来的。<br></span><img class=tex alt="\mathbf{S}(t)= \sum_{i=0}^{m+1} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [0,1]" src="http://upload.wikimedia.org/math/9/e/2/9e28a1ce0e3bfad6d1d983b146751a7f.png"><br><font size=2>由这个公式可以看出来，</font><font style="FONT-SIZE: 10pt" size=3><strong>P</strong><sub><em>i</em></sub>称为<strong>控制</strong>点<strong>。</strong>&nbsp; 看过B&#233;zier curve的话对控制点应该有些了解，其实它控制了曲线的一个大致的走向，但曲线的细节部分，比如曲率啊这些还要更仔细的控制，这就要用到B样条基。 还是引用下wiki，<a href="http://zh.wikipedia.org/w/index.php?title=B-%E6%A0%B7%E6%9D%A1&amp;variant=zh-cn">http://zh.wikipedia.org/w/index.php?title=B-%E6%A0%B7%E6%9D%A1&amp;variant=zh-cn</a>。<br>但想说的就是节点向量这东西。它控制了B样条基的值，间接地决定的曲线的走向。但硬要形象找出两者的联系还是比较困难的。<br>可以说B样条基决定了控制点的比重，所以B&#233;zier curve是B样条的一个特例。<br>下面是学习过程中参考的文档，推荐下：<a href="http://www.rw-designer.com/NURBS">http://www.rw-designer.com/NURBS</a>，<a href="http://ibiblio.org/e-notes/Splines/Intro.htm">http://ibiblio.org/e-notes/Splines/Intro.htm</a>。<br></font></p>
<img src ="http://www.cppblog.com/tabmood/aggbug/89030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tabmood/" target="_blank">Eleven</a> 2009-07-01 22:36 <a href="http://www.cppblog.com/tabmood/archive/2009/07/01/89030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>