<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4330825877015615693</id><updated>2024-09-15T21:19:22.248-07:00</updated><category term="3D"/><category term="Blog"/><category term="Design Pattern"/><category term="S3D"/><category term="電玩"/><title type='text'>Maxi&#39;s Back Garden</title><subtitle type='html'>一個準備邁入30歲的有禮貌青年所架設的部落格</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-993557890730732086</id><published>2012-07-12T23:00:00.000-07:00</published><updated>2012-07-12T23:00:09.861-07:00</updated><title type='text'>The difficult situation to develop medical device products</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
I am a bio-engineer and have been working in vaccine equipment and medical device research center for four years.&lt;br /&gt;
&lt;br /&gt;
Recently, I have lose my enthusiasm, because the medical device industry go from bad to worse.&lt;br /&gt;
&lt;br /&gt;
An innovation medical device products need to be done in a good research environment.&lt;br /&gt;
&lt;br /&gt;
It means the doctors, specialists, patients, the infrastructure, the management system, the money, everything need to be well integrated.&lt;br /&gt;
&lt;br /&gt;
There are still lots of work in this industry, if we want medical device industry finer.&lt;br /&gt;
&lt;br /&gt;
First of all is to built a good enviroment for the next generation who wants to research and practice new medical device products.&lt;br /&gt;
&lt;br /&gt;
Wish one day the day I dream come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/993557890730732086/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/07/difficult-situation-to-develop-medical.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/993557890730732086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/993557890730732086'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/07/difficult-situation-to-develop-medical.html' title='The difficult situation to develop medical device products'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5424945105310254843</id><published>2012-07-09T01:00:00.001-07:00</published><updated>2012-07-09T01:03:57.236-07:00</updated><title type='text'>Tales of Only !!</title><content type='html'>&lt;br /&gt;
Let me introduce an exhibition: Tales of Only&lt;br /&gt;
&lt;br /&gt;
It is a large show for the fans of Tales series in Taiwan.&lt;br /&gt;
&lt;br /&gt;
Date: 2012/10/14&lt;br /&gt;
&lt;br /&gt;
Location: The Taipei Jiantan Youth Activity Center&lt;br /&gt;
&lt;br /&gt;
It&#39;s offical website:&lt;br /&gt;
&lt;a href=&quot;http://or.studio-web.net/too/&quot;&gt;http://or.studio-web.net/too/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
Also:&lt;br /&gt;
&lt;a href=&quot;http://www.doujin.com.tw/events/info/74&quot;&gt;http://www.doujin.com.tw/events/info/74&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe you could see me dress like someone in TOV&lt;br /&gt;
&lt;br /&gt;
HA HA~ &lt;br /&gt;
&lt;br /&gt;
See you in the Tales of Only Exhibition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5424945105310254843/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/07/tales-of-only.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5424945105310254843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5424945105310254843'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/07/tales-of-only.html' title='Tales of Only !!'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-1262964776979108895</id><published>2012-06-12T01:23:00.000-07:00</published><updated>2012-06-12T01:23:12.479-07:00</updated><title type='text'>NA</title><content type='html'>It&#39;s hard to record the entire things in English in my life.&lt;br /&gt;
&lt;br /&gt;
But I&#39;ll try hard to keep this blog going.&lt;br /&gt;
&lt;br /&gt;
There are lots of rain in Taiwan recently.&lt;br /&gt;
&lt;br /&gt;
Hope to cease this disaster.&lt;br /&gt;
&lt;br /&gt;
God bless Taiwan.</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/1262964776979108895/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/06/na.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1262964776979108895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1262964776979108895'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/06/na.html' title='NA'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-1576338816020647564</id><published>2012-03-16T01:00:00.000-07:00</published><updated>2012-03-16T01:00:18.131-07:00</updated><title type='text'>JJ Lin - the smiling eyes</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/ACAzJG5ZN7w?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/ACAzJG5ZN7w?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/1576338816020647564/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/03/jj-lin-smiling-eyes.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1576338816020647564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1576338816020647564'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/03/jj-lin-smiling-eyes.html' title='JJ Lin - the smiling eyes'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-6893572348426234882</id><published>2012-02-15T22:08:00.000-08:00</published><updated>2012-02-19T18:55:15.409-08:00</updated><title type='text'>From now on</title><content type='html'>In order to make foreigner easier reading this blog &lt;br /&gt;
&lt;br /&gt;
Therefore, I will try to translate all my articles to English form in near future &lt;br /&gt;
&lt;br /&gt;
The first one will be discussed about the international license - Regulatory Affair Certification (General Scope, Medical device)&lt;br /&gt;
&lt;br /&gt;
I actually don&#39;t know what it is until I joined a conference held by Tze Chiang Foundation of Science and technology in 2011  &lt;br /&gt;
&lt;br /&gt;
This license is not cheaper compared to other licenses in Taiwan &lt;br /&gt;
&lt;br /&gt;
And I am also afraid it may not do great help in my career &lt;br /&gt;
&lt;br /&gt;
Because the medical device or biotechnology industry in Taiwan still need time to grow up&lt;br /&gt;
&lt;br /&gt;
If anybody in this area knows the RAC-GS(medical device focus) license in detail, I am seeking to discuss with you  &lt;br /&gt;
&lt;br /&gt;
Forgive my poor grammar, if there are any mistake in this article please let me know   &lt;br /&gt;
&lt;br /&gt;
Maxi Chien</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/6893572348426234882/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/02/from-now-on.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6893572348426234882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6893572348426234882'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/02/from-now-on.html' title='From now on'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5522898164750553425</id><published>2012-01-31T00:26:00.000-08:00</published><updated>2012-01-31T00:26:05.958-08:00</updated><title type='text'>下一次戀愛 - ELVA</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/yuUhbY2GNJg?version=3&amp;feature=player_embedded&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/yuUhbY2GNJg?version=3&amp;feature=player_embedded&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5522898164750553425/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/01/elva.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5522898164750553425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5522898164750553425'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/01/elva.html' title='下一次戀愛 - ELVA'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5033759175507181845</id><published>2012-01-18T22:46:00.000-08:00</published><updated>2012-01-18T22:46:06.181-08:00</updated><title type='text'>公主病 - 周杰倫</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/S-p4gXbIifo?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/S-p4gXbIifo?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5033759175507181845/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2012/01/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5033759175507181845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5033759175507181845'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2012/01/blog-post.html' title='公主病 - 周杰倫'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5606723368440478527</id><published>2011-12-01T04:08:00.000-08:00</published><updated>2011-12-01T04:12:53.964-08:00</updated><title type='text'>12/10  飲料兩瓶</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoUBbVKdINbvPJ7qzeQ48vwlIfPT_ByjwaaR-RaV4sklRAS8IqGcAkpA24UvugfR3qSbGf4m7XakFJTTXwwjczzcewHxZJvFJSQp7j8mQ7FoWi05-BMIlCVDiRzDls7GIeMz-yIhgIWBs/s1600/IMG0090A.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoUBbVKdINbvPJ7qzeQ48vwlIfPT_ByjwaaR-RaV4sklRAS8IqGcAkpA24UvugfR3qSbGf4m7XakFJTTXwwjczzcewHxZJvFJSQp7j8mQ7FoWi05-BMIlCVDiRzDls7GIeMz-yIhgIWBs/s320/IMG0090A.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
品名: Yellow Tail Cabernet Sauvignon 黃尾袋鼠 卡貝納蘇維翁紅酒&lt;br /&gt;
產地: 澳洲&lt;br /&gt;
年份: 2010&lt;br /&gt;
酒精度: 13.5%&lt;br /&gt;
容量: 750 ml&lt;br /&gt;
醒酒時間: 15-20分鐘&lt;br /&gt;
簡介: 黑莓與微甜摩卡融合黑醋栗果香，口感柔順&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIR0kq6IQVdc9g60Cjb_hTw9emLvksj5Dr8PxnYwRHkCRMsWxTuO2im-qc7AuHLLJ91pwdUJMEemOjXP7G98Gbqxr4ALa1bMMfyNuBn9G4FslQuYWXjWJihgFSAZVXqRl26JLFALrY9bY/s1600/IMG0093A.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIR0kq6IQVdc9g60Cjb_hTw9emLvksj5Dr8PxnYwRHkCRMsWxTuO2im-qc7AuHLLJ91pwdUJMEemOjXP7G98Gbqxr4ALa1bMMfyNuBn9G4FslQuYWXjWJihgFSAZVXqRl26JLFALrY9bY/s320/IMG0093A.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
品名: Cahors Apogee卡歐艾伯奇A.O.C.紅酒&lt;br /&gt;
產地: 法國&lt;br /&gt;
年份: 2007&lt;br /&gt;
酒精度: 13%&lt;br /&gt;
容量: 750 ml&lt;br /&gt;
適飲溫度: 18 度&lt;br /&gt;
葡萄品種: 100%馬爾貝克&lt;br /&gt;
簡介: 木質香氣與水果甜，結構平衡，口感持久</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5606723368440478527/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/12/1210.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5606723368440478527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5606723368440478527'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/12/1210.html' title='12/10  飲料兩瓶'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoUBbVKdINbvPJ7qzeQ48vwlIfPT_ByjwaaR-RaV4sklRAS8IqGcAkpA24UvugfR3qSbGf4m7XakFJTTXwwjczzcewHxZJvFJSQp7j8mQ7FoWi05-BMIlCVDiRzDls7GIeMz-yIhgIWBs/s72-c/IMG0090A.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-3444685383584469859</id><published>2011-11-27T04:42:00.000-08:00</published><updated>2011-11-27T05:28:56.885-08:00</updated><title type='text'>少見逸品 - TOV 15週年開箱</title><content type='html'>寫在文前&lt;br /&gt;
&lt;br /&gt;
-------------------&lt;br /&gt;
&lt;br /&gt;
感謝一位去日本出差的麻吉&lt;br /&gt;
&lt;br /&gt;
不辭辛苦&lt;br /&gt;
&lt;br /&gt;
跑遍各大遊戲區  &lt;br /&gt;
&lt;br /&gt;
才找到他說&quot;架上僅有一片&quot;的遊戲&lt;br /&gt;
&lt;br /&gt;
我也爬了國內各大網拍 發現真的是很少有這一片的蹤跡&lt;br /&gt;
&lt;br /&gt;
麻吉  感謝你阿&lt;br /&gt;
&lt;br /&gt;
還有另一位麻吉要感謝&lt;br /&gt;
&lt;br /&gt;
這是後話&lt;br /&gt;
&lt;br /&gt;
我們看圖去&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVtnHAZ01dOgE2NEypp-2S_JtggGyvT_BW_G2VGyqBXmrie2xaoYa4jnz-QOac6Ne8L7C1Vmly2BX81PTITuHF5tjHLqo0hfwCe6MLZZodqeNhuAAYPKEb-I-2yt0S434AiodSepQhHsY/s1600/DSC04023.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVtnHAZ01dOgE2NEypp-2S_JtggGyvT_BW_G2VGyqBXmrie2xaoYa4jnz-QOac6Ne8L7C1Vmly2BX81PTITuHF5tjHLqo0hfwCe6MLZZodqeNhuAAYPKEb-I-2yt0S434AiodSepQhHsY/s320/DSC04023.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
噫  不是要開遊戲片嗎&lt;br /&gt;
&lt;br /&gt;
丟個一張紙出來幹嘛&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0U0eey6szFKQjndq13X9pwNqqeX9X4EIo6dQeBVGzbU3hX1fnqCc69lOpwpKSiWS7y7fWpjZ0oC-4LKhe171UrIVSw8UxzplCH3e6arZk-jjkA4wlnnjhGtyJX7Isz-SBwroUJ4l5oeY/s1600/DSC04026.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0U0eey6szFKQjndq13X9pwNqqeX9X4EIo6dQeBVGzbU3hX1fnqCc69lOpwpKSiWS7y7fWpjZ0oC-4LKhe171UrIVSw8UxzplCH3e6arZk-jjkA4wlnnjhGtyJX7Isz-SBwroUJ4l5oeY/s320/DSC04026.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
打開來看  是米菈!!&lt;br /&gt;
&lt;br /&gt;
原來是我麻吉去日本逛了TALES故事館 &lt;br /&gt;
&lt;br /&gt;
一進館就可以抽一張海報阿&lt;br /&gt;
&lt;br /&gt;
我也好想去阿~~&lt;br /&gt;
&lt;br /&gt;
跟麻吉一起去日本出差的朋友抽到老頭&lt;br /&gt;
&lt;br /&gt;
聽說在日本當地留下一句國罵&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
有請今天的開箱助理&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxFHb244oBcojdDBxk3xWjl5qTFrS6jfCS2B5eOl82uAV5IUIdc86V_4FS3blGwuSWsKq03NxuvPmiBua8QFfFQ0mynE4Qvw_6UGZFNwYv4TLYDwIXfjn8rXvKvwa88JIrz8vRqmmTDwY/s1600/DSC04033.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxFHb244oBcojdDBxk3xWjl5qTFrS6jfCS2B5eOl82uAV5IUIdc86V_4FS3blGwuSWsKq03NxuvPmiBua8QFfFQ0mynE4Qvw_6UGZFNwYv4TLYDwIXfjn8rXvKvwa88JIrz8vRqmmTDwY/s320/DSC04033.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
沒錯 TOX的特點  米菈  &lt;br /&gt;
&lt;br /&gt;
可是怎麼有兩隻??&lt;br /&gt;
&lt;br /&gt;
這就是剛剛說的要感謝的另一個麻吉阿(還被我騙去買了一片TOV  金歹勢阿)&lt;br /&gt;
&lt;br /&gt;
合照&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhGbwsYits2rV4nUfq5SqhS8VaHc7BiZSYwornWFRLOSs94KdAotrNOxP_2CEp24SEZ9krEQComhHs4rRAjiIvcfKFcsIy0FedqpUyGWGOHnOmK0TYoqHYJS47s5PgCWh7Jh2pbGlSvJk/s1600/DSC04038-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;245&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhGbwsYits2rV4nUfq5SqhS8VaHc7BiZSYwornWFRLOSs94KdAotrNOxP_2CEp24SEZ9krEQComhHs4rRAjiIvcfKFcsIy0FedqpUyGWGOHnOmK0TYoqHYJS47s5PgCWh7Jh2pbGlSvJk/s320/DSC04038-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
主角現身&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2heN-4Z2GJtnSqqaqWm-5BOfWq2pcglhprCU-zAKatj17SsK_h5AkbRHl9daSzdRjAz-KPq1wYpffzEkCjw1LWdoYLCUcNIGWuGumQFh0jy4dRYyksjObcp-KsI2wAP-ZMc3VCdA_Q3k/s1600/DSC04039.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2heN-4Z2GJtnSqqaqWm-5BOfWq2pcglhprCU-zAKatj17SsK_h5AkbRHl9daSzdRjAz-KPq1wYpffzEkCjw1LWdoYLCUcNIGWuGumQFh0jy4dRYyksjObcp-KsI2wAP-ZMc3VCdA_Q3k/s320/DSC04039.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
我拉&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOp5vxlkrmITLPABBJm-WMisjuICjfBBuGO91166cpiixCUpa4IWqiw3tI8X0YiUe_DTj9MKJv2LRDlMEK13btjOdYln7H5uNWODp7_F7RF_1LXqMJVhb5xN-zwcEqdJkLX5MSsvw311U/s1600/DSC04041-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOp5vxlkrmITLPABBJm-WMisjuICjfBBuGO91166cpiixCUpa4IWqiw3tI8X0YiUe_DTj9MKJv2LRDlMEK13btjOdYln7H5uNWODp7_F7RF_1LXqMJVhb5xN-zwcEqdJkLX5MSsvw311U/s320/DSC04041-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
我再拉&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitfvVlXl2zPj1U9RVHKMGaJvLjDMb9pb4eHUBIPxMDEh94oBwwRH28Z5_DsDmRCRqP99tdiI1s8HhP8Yk4SZnKGK4qpFUdsEnf8SmRHyhZmatElfeyZADbtMIvyKOmgmxNiAMlnb39BTw/s1600/DSC04042-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitfvVlXl2zPj1U9RVHKMGaJvLjDMb9pb4eHUBIPxMDEh94oBwwRH28Z5_DsDmRCRqP99tdiI1s8HhP8Yk4SZnKGK4qpFUdsEnf8SmRHyhZmatElfeyZADbtMIvyKOmgmxNiAMlnb39BTw/s320/DSC04042-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
拉出來~~&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx7peLb2hz7_brhQwxg6_4EVJN5DDKPwoJDuJKuNRAazkNWd1SEtUadR_LiN2hZe4n1E41CulgQGXMI8YCT2AiE0SoWb8fSAFvHFs0iyGPKxSG_Lx-0rrg5T12UYV0rVAA3NUkiKXDcoI/s1600/DSC04043-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx7peLb2hz7_brhQwxg6_4EVJN5DDKPwoJDuJKuNRAazkNWd1SEtUadR_LiN2hZe4n1E41CulgQGXMI8YCT2AiE0SoWb8fSAFvHFs0iyGPKxSG_Lx-0rrg5T12UYV0rVAA3NUkiKXDcoI/s320/DSC04043-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
15週年阿  邪惡的名字阿&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbTpEya1Icy6zGffl6ft5M2DvdbbszEpaFDEhNlQGvNUUHd-D8yabpsaXWdyP6iab6pe7qKtCdPxSapLx-N9Uity5ljUaM7HYUV3xydD6rsxWwZmJmIef_t8Rqnb7Kj-wKZawSMtZL0e0/s1600/DSC04045-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbTpEya1Icy6zGffl6ft5M2DvdbbszEpaFDEhNlQGvNUUHd-D8yabpsaXWdyP6iab6pe7qKtCdPxSapLx-N9Uity5ljUaM7HYUV3xydD6rsxWwZmJmIef_t8Rqnb7Kj-wKZawSMtZL0e0/s320/DSC04045-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
正面來一張&lt;br /&gt;
&lt;br /&gt;
其實15週年就是日版遊戲片套上15周年的硬紙板外殼&lt;br /&gt;
&lt;br /&gt;
附上特點CODE &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEobUDvikuL4sjo-bnaUp_FgUXFuoqml-3A2_BW3gvjpSAVOe6AtqiD8DhPpFnxdaI7Y4UB8m15UFCuR1geuvaJg6lp37LxHN8AI3xIzepTeK-yArU8gWypRmk-D504-O8cQNGtXOcqt0/s1600/DSC04052-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEobUDvikuL4sjo-bnaUp_FgUXFuoqml-3A2_BW3gvjpSAVOe6AtqiD8DhPpFnxdaI7Y4UB8m15UFCuR1geuvaJg6lp37LxHN8AI3xIzepTeK-yArU8gWypRmk-D504-O8cQNGtXOcqt0/s320/DSC04052-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
背面來一張&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUWscpELMKxt4IVU5Gzpv1lohFsCpRuROWOqAkRJpSBUBVfTz8DPFjFKflxbti4ja9h6caQ63FLj9oPU-f73uEiWahTy3uqF3NLk57w18s57oRWgbaELobY-osG2GxdFw2F2LUJORrJXw/s1600/DSC04053-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUWscpELMKxt4IVU5Gzpv1lohFsCpRuROWOqAkRJpSBUBVfTz8DPFjFKflxbti4ja9h6caQ63FLj9oPU-f73uEiWahTy3uqF3NLk57w18s57oRWgbaELobY-osG2GxdFw2F2LUJORrJXw/s320/DSC04053-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
邪惡的MARK&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EYXZwmnN063K06qMZWJ5CAE2gtLkL42Six9OkMt3tEnyO9Xsy7uqpMhH0QJAVPz8wjK81OIcMdbgWCTk16HU33AvapEPxmeWAKMxjj3pE8JHJ9ht3C905sbAYD8PViK39kXwuQ73yoM/s1600/DSC04049.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EYXZwmnN063K06qMZWJ5CAE2gtLkL42Six9OkMt3tEnyO9Xsy7uqpMhH0QJAVPz8wjK81OIcMdbgWCTk16HU33AvapEPxmeWAKMxjj3pE8JHJ9ht3C905sbAYD8PViK39kXwuQ73yoM/s320/DSC04049.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
正義貫通的RPG與兩位米菈小姐&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81TA1OThpup89wKTrp3lyAsix6mE0RhTv32Bi8DHrYcQ4uEnR7S0lkZSz2yBKPEqQ5UoTvIZgl9SPaGiCq92A-bllIDKshtxZ6xTDqYUntA5JBBq6CpluXubFc_kZgWH5TP7gAi7vapE/s1600/DSC04050-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;255&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh81TA1OThpup89wKTrp3lyAsix6mE0RhTv32Bi8DHrYcQ4uEnR7S0lkZSz2yBKPEqQ5UoTvIZgl9SPaGiCq92A-bllIDKshtxZ6xTDqYUntA5JBBq6CpluXubFc_kZgWH5TP7gAi7vapE/s320/DSC04050-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
日本店家送的TOV資料夾  正版的喔~~&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALliKK_Qtbb79FBh2hnZ7_kA19lcJNIdxepXDVeY5_XV58yXbFizQf1Xhgs-JF2j9sZKNhc1WiyTVi1uqFxIgfM7kK3XhCdkE7Wo9CGSEF8790KF38siG8PnCZsDC8fAKMY561xgI7vA/s1600/DSC04056-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALliKK_Qtbb79FBh2hnZ7_kA19lcJNIdxepXDVeY5_XV58yXbFizQf1Xhgs-JF2j9sZKNhc1WiyTVi1uqFxIgfM7kK3XhCdkE7Wo9CGSEF8790KF38siG8PnCZsDC8fAKMY561xgI7vA/s320/DSC04056-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiea4VQW00CE649oU8Q5E20ZqPnmCEoAkhaFuGgi8LxyUzXwr7KNljQS7H9gD4Qz0ZEdQ-WwEmRQ8LpJYnP1gC1G2eIVpVMdbsbT8pGaSaosdlrYKXbAe7vu3mz8Gj9oo6nV-oxneAd11k/s1600/DSC04057-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; width=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiea4VQW00CE649oU8Q5E20ZqPnmCEoAkhaFuGgi8LxyUzXwr7KNljQS7H9gD4Qz0ZEdQ-WwEmRQ8LpJYnP1gC1G2eIVpVMdbsbT8pGaSaosdlrYKXbAe7vu3mz8Gj9oo6nV-oxneAd11k/s320/DSC04057-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
這次血拼的主角合照&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOpENjRooa-0qemj3gRY-EFqwUuyBXnqPN85hVvQhgOQkOqzvF8qY5TR7ppzRTcL8zeaR9vzxP5ZkyX8tMbj3txsgPafo-_YKU1ysOMJuCFBqsKT1EA5MT6nBr9aJC32MYFLLmEl6flU/s1600/DSC04062-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOpENjRooa-0qemj3gRY-EFqwUuyBXnqPN85hVvQhgOQkOqzvF8qY5TR7ppzRTcL8zeaR9vzxP5ZkyX8tMbj3txsgPafo-_YKU1ysOMJuCFBqsKT1EA5MT6nBr9aJC32MYFLLmEl6flU/s320/DSC04062-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
PS3 三巨頭 TOV TOGF TOX &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFhNd0NuKh7yIRDsyLgSidIr__GWFC6is3mRXQnnLWo_PN6IRo_0-y946uajZ-eh8F5OP-4aBTYFLLJ8xIO5-qSuuZdzjzOUQ2eyBbf5L_vwGX35y8awnCNd_cUxTo9TXLyAghVzS0qjk/s1600/DSC04063-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFhNd0NuKh7yIRDsyLgSidIr__GWFC6is3mRXQnnLWo_PN6IRo_0-y946uajZ-eh8F5OP-4aBTYFLLJ8xIO5-qSuuZdzjzOUQ2eyBbf5L_vwGX35y8awnCNd_cUxTo9TXLyAghVzS0qjk/s320/DSC04063-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
個人的TALES收藏 (離全制霸還好遠阿)&lt;br /&gt;
&lt;br /&gt;
PS:  TOE&lt;br /&gt;
PSP: TOP&lt;br /&gt;
PS2: TOD2 TOR TOL TOS TOA RETOD &lt;br /&gt;
PS3: TOV TOGF TOX&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBv54c-Ug87hhEDlRbjbqIdyCxKP9JXWcNIpKPi7x_N6rqwohzMgLoClEkjMQlIhYVzelAWNOznTFGVftdJxEDISAXE9xiiVxwhkZJZAr9lsYt1GaYXmWQehfezqKSWFZTkv3t06th4IQ/s1600/DSC04066-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBv54c-Ug87hhEDlRbjbqIdyCxKP9JXWcNIpKPi7x_N6rqwohzMgLoClEkjMQlIhYVzelAWNOznTFGVftdJxEDISAXE9xiiVxwhkZJZAr9lsYt1GaYXmWQehfezqKSWFZTkv3t06th4IQ/s320/DSC04066-2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/3444685383584469859/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/11/tov-15.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/3444685383584469859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/3444685383584469859'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/11/tov-15.html' title='少見逸品 - TOV 15週年開箱'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVtnHAZ01dOgE2NEypp-2S_JtggGyvT_BW_G2VGyqBXmrie2xaoYa4jnz-QOac6Ne8L7C1Vmly2BX81PTITuHF5tjHLqo0hfwCe6MLZZodqeNhuAAYPKEb-I-2yt0S434AiodSepQhHsY/s72-c/DSC04023.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-2632984457215915829</id><published>2011-11-24T05:58:00.000-08:00</published><updated>2011-11-24T05:58:15.510-08:00</updated><title type='text'>Taylor Swift - You belong with me</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/VuNIsY6JdUw?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/VuNIsY6JdUw?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/2632984457215915829/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/11/taylor-swift-you-belong-with-me.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/2632984457215915829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/2632984457215915829'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/11/taylor-swift-you-belong-with-me.html' title='Taylor Swift - You belong with me'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-7381698295754490710</id><published>2011-10-20T23:12:00.001-07:00</published><updated>2011-10-20T23:12:54.846-07:00</updated><title type='text'>一本滿足</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/q8IJzttt-I8?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/q8IJzttt-I8?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/7381698295754490710/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7381698295754490710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7381698295754490710'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/blog-post.html' title='一本滿足'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-4018583617305281399</id><published>2011-10-20T02:36:00.000-07:00</published><updated>2011-10-20T02:52:53.374-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design Pattern"/><title type='text'>Design Pattern - Singleton</title><content type='html'>&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;&lt;b&gt;.Introduction&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Singleton在軟體設計上屬於很常見, 也很易於使用的一個樣板, 主要設計用於&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;開發者對&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;某個物件限制其只能產生一個的時候使用, 以下對其設計思維以及實作方式做說明.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;&lt;b&gt;.Thinking in Singleton Pattern&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Singleton正如其名, 主要是為了確保目標物件只產生一個而設計, &lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;常見的&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Design Patterns中有很多其他的樣板常使用Singleton來實作, 像是Abstract Factory, State Pattern等等.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我們在什麼需求下會使用到Singleton, &lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;在這邊舉一個簡單的例子來做說明, 假設我們要設計一個遊戲, 在這個遊戲裡面有各種各樣的場景, 為了不要讓&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;程式架構中&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;場景的處理太過混亂, 我希望設計一個場景管理器, 把這些場景的各種功能, 像是產生場景, 釋放場景等等都交由這個場景管理器處理, 那麼理所當然的, 我必須確認整個程式中所有的場景都交由這&quot;一個&quot;管理器做處理, 為了保證不讓程式中其他地方不小心產生額外的場景處理器, 此時就可以使用Singleton樣板.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;&lt;b&gt;.Implement&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 為了確保只產生一個實體物件, Singleton的實作會在&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;class中利用static成員變數的方式來確保產生唯一的&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Singleton&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;物件, 並實作一個static函式提供用來取得這個&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Singleton&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;物件, 架構並不複雜, 如下圖所示.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;Singleton架構&lt;/u&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTbyFTCIVnFbY09tnXdEyx9ZfGwFUYGAqgRAUj1GH96iL4z77EwTGIc93Kc96DtPklmTP5YERbn1kue5vCujZiyGQcG0iBY2kZLUuK3RdOvl7ZfHmz8X-c47tZFFLdtdaLRJrFGJpBJmo/s1600/design_patterns.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTbyFTCIVnFbY09tnXdEyx9ZfGwFUYGAqgRAUj1GH96iL4z77EwTGIc93Kc96DtPklmTP5YERbn1kue5vCujZiyGQcG0iBY2kZLUuK3RdOvl7ZfHmz8X-c47tZFFLdtdaLRJrFGJpBJmo/s1600/design_patterns.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那麼, 實際以程式碼實作層面來看上圖的話, 需要注意幾個重點,以下列出注意點以及程式實做.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;為了不讓外部有權限產生Singleton物件, 其&lt;u&gt;建構子會定為private&lt;/u&gt;&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;為了不讓外部有權限對Singleton裡面存取的物件做更動, &lt;u&gt;用來儲存的static成員變數instance也會定為private&lt;/u&gt;&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;外部要使用的話&lt;u&gt;統一透過GetInstance函式取來用&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;程式碼實做&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class Singleton 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static Singleton instance = null;

&amp;nbsp;&amp;nbsp;&amp;nbsp; private Singleton() 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public static Singleton getInstance() 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (instance == null) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance = new Singleton();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return instance;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; //other method...
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test()
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;Hello Singleton!&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; };
}

class App
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Singleton.getInstance().test();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
};&lt;/pre&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上執行結果會印出&quot;Hello Singleton!&quot;, 不過以上的架構只是最基本的Singleton, 有開發過多執行序程式的人就會發現, 假設有多個執行序幾乎同時在程式第一次呼叫&lt;/span&gt;getInstance時, 在if判斷null與new產生物件之間, 同時另一個執行序也有可能跑到if判斷, 結果因為還沒new, 判斷是null, 也進去new, 結果產生了多個Singleton導致問題, 針對此問題有很多人提出討論以及解決辦法, 以下簡略做說明.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;&lt;b&gt;.Extended Reading&lt;/b&gt;&lt;/u&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;Double-checked locking and the Singleton pattern&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp; &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-dcl/index.html&quot;&gt;http://www.ibm.com/developerworks/java/library/j-dcl/index.html&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如上列網址所探討, 針對在多執行序下Singleton的架構, 有人提出各種利用synchronized再多加一層處理的方式, 防止另一個執行序在當時同時做處理,如下所示&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;利用synchronized處理Singleton&lt;/u&gt;&lt;/span&gt; &lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;public static synchronized Singleton getInstance()
{
  if (instance == null)          //1
    instance = new Singleton();  //2
  return instance;               //3
}

public static Singleton getInstance()
{
  if (instance == null)
  {
    synchronized(Singleton.class) {
      instance = new Singleton();
    }
  }
  return instance;
} 

public static Singleton getInstance()
{
  if (instance == null)
  {
    synchronized(Singleton.class) {  //1
      if (instance == null)          //2
        instance = new Singleton();  //3
    }
  }
  return instance;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不過利用&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;synchronized多多少少會影響到程式本身執行的效率, 所以&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;也有人提出直接在class產生時就把物件建好&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;, 一勞永逸&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;, 不需要在GetInstance時還要判斷, 程式如下所示&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;u&gt;預先建好Singleton物件&lt;/u&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;class Singleton
{
  private Vector v;
  private boolean inUse;
  private static Singleton instance = new Singleton();

  private Singleton()
  {
    v = new Vector();
    inUse = true;
    //...
  }

  public static Singleton getInstance()
  {
    return instance;
  }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以這幾種方式來看, 如果class本身沒有很複雜, 我個人是比較建議直接在class產生就建好, 畢竟&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;synchronized影響的效率也不算小,又是多執行序一堆在取, 影響又更大了, 所以以我而言應該就比較偏向採用先建好的方式來實作, 另外, 在Java上實作可能要注意一些其他問題, 如下面網址, 有空的人可以鑽研一下.....&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;The &quot;Double-Checked Locking is Broken&quot; Declaration&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp; &lt;a href=&quot;http://www.cs.umd.edu/%7Epugh/java/memoryModel/DoubleCheckedLocking.html&quot;&gt;http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;原帖&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - &lt;a href=&quot;http://arkkk.blogspot.com/2011/10/design-pattern-singleton.html&quot;&gt;http://arkkk.blogspot.com/2011/10/design-pattern-singleton.html&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/4018583617305281399/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/design-pattern-singleton.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/4018583617305281399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/4018583617305281399'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/design-pattern-singleton.html' title='Design Pattern - Singleton'/><author><name>arkkk</name><uri>http://www.blogger.com/profile/09113024690552715485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoGTuvIHxhCSthnxesFHaVX0jJ5iIP9pxzoJhblXGoNK80srHiwC00jfj77A-MApAnQtZkyjeOK7NvY-0TSnNB-Cucwq5foXnt-KyNTOS6DPDkckI6_ZyzVZ1WZvNWJCQ/s220/head.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTbyFTCIVnFbY09tnXdEyx9ZfGwFUYGAqgRAUj1GH96iL4z77EwTGIc93Kc96DtPklmTP5YERbn1kue5vCujZiyGQcG0iBY2kZLUuK3RdOvl7ZfHmz8X-c47tZFFLdtdaLRJrFGJpBJmo/s72-c/design_patterns.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-6661484519763242687</id><published>2011-10-14T07:34:00.000-07:00</published><updated>2011-10-14T07:46:43.390-07:00</updated><title type='text'>Stereoscopic 3D on Android ( OpenGL ES )</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;本篇在Android上使用OpenGL ES簡單的實做Stereo View影像, 以下是結果畫面&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;u&gt;執行結果&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDcT0xC5sXQczEWS82LovExttkCp1E4U8dPUKhQBbBpy4EeOh-pSYAGFzpszv1fH2jdOWL_2FCfU9_IPvJdvF05J6k66DNSl4n9jsD-YJ2YFTfnWqRu64RHjz41Bi_WuLs-rEe6Tlplc/s1600/DSC_0106.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDcT0xC5sXQczEWS82LovExttkCp1E4U8dPUKhQBbBpy4EeOh-pSYAGFzpszv1fH2jdOWL_2FCfU9_IPvJdvF05J6k66DNSl4n9jsD-YJ2YFTfnWqRu64RHjz41Bi_WuLs-rEe6Tlplc/s400/DSC_0106.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVqL0SqOjFYletL6WoR7dhUSp2yzP9rU8h8ZvCxTJB4ieQJudCFdebulpvGmkl99tgK28diftveP2ruHH12Qkot0ZJfqcNSu9Gbj28w4Tsp22VAjM_0COFqbM4nBrq8ZZyGWwPXnepgo/s1600/DSC_0101.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVqL0SqOjFYletL6WoR7dhUSp2yzP9rU8h8ZvCxTJB4ieQJudCFdebulpvGmkl99tgK28diftveP2ruHH12Qkot0ZJfqcNSu9Gbj28w4Tsp22VAjM_0COFqbM4nBrq8ZZyGWwPXnepgo/s400/DSC_0101.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;u&gt;1.Introduction&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt; 之前發過一篇x86上用OpenGL實做Stereo View, 概念一樣, 這次改在Android上實做&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 網址:&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stereoscopic 3D in OpenGL &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://arkkk.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html&quot;&gt;http://arkkk.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 雖然說是用OpenGL ES, 不過嚴格說來並不是直接使用,  在這邊我說明一下, 在Android上使用OpenGL ES開發3D軟體常見有兩種方式, 一種是透過官方Android  SDK幫你包好的版本下去實做, 一種是不使用SDK提供的版本, 直接在Android的source  tree下使用Android底層的的OpenGL ES來撰寫編譯可執行檔或者lib, 透過JNI去link編譯好的lib或者直接執行檔執行,  兩種方式都不會很困難, 不過為了效率考量, 比較建議用原生的版本去撰寫程式, 這篇只是要講個概念而非OpenGL ES如何使用,  所以為了方便直接使用Android SDK來實做.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;2.Implementation&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; 首先, Android SDK軟體開發的基本架構資料很好找到, 這裡就不多談了, 主要架構程式碼如下&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;u&gt;Android Application基本架構&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;package com.GLDemo;

import android.app.Activity;

public class GLDemo extends Activity 
{&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void onPause() 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onPause();&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void onResume() 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onResume();

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;基本架構有了後, 第一步一開始要先做的是先偵測目前系統支援的OpenGL ES版本是否有到2.0, 如果有用到2.0才有的功能, 像是shader等等功能, 使用前可以先檢查版本有支援再執行&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;u&gt;檢查OpenGL ES版本&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private boolean detectOpenGLES20() 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ActivityManager am =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConfigurationInfo info = am.getDeviceConfigurationInfo();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (info.reqGlEsVersion &amp;amp;gt;= 0x20000);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;前面準備的動作都好了後,  接下來要做的就是產生一個GLSurfaceView以及Renderer來做OpenGESL繪圖, 大致介紹一下, class  GLSurfaceView是Android裡SurfaceView的一種實作, 用來給OpenGLES繪圖元件繪圖的View,  而Renderer是一個Interface用來處理OpenGLES的每個frame的繪圖, 可以分開來兩個另外實作,  也可以直接在同一個class中處理, 在這邊我在同一個class中處理.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;OpenGLES繪圖處理用的View&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;package com.GLDemo;

import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.view.MotionEvent;


//switch perspective and stereo-view by touch
public class GLStereoView extends GLSurfaceView implements Renderer
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; private Context context;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; public GLStereoView(Context context)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; super(context);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //如果Render是分開做的話, setRenderer要另外處理
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.setRenderer(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onDrawFrame(GL10 gl)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onSurfaceChanged(GL10 gl, int width, int height) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onSurfaceCreated(GL10 gl, EGLConfig config) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean onTouchEvent(final MotionEvent event)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; 
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;在這個class GLStereoView裡可以發現有幾個要自己實做的函式, 以下一步一步來講解其意義以及實作方式&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;.OpenGLES繪圖處理&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;首 先, 在繪圖之前我們必須要把整個場景的資料先處理好, 至少要有3D的點資料才有辦法繪圖, 以下大概簡單講一下我的作法,  這邊要注意的一點是Android SDK提供的Java層OPENGLES在使用都用Java的Buffer在處理, 也就是說, 不管哪種資料,  勢必得在java層複製一次, 多多少少會影響到效能, 以下是以Cube為例子的程式碼&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;建立3D Cube資料&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class Cube 
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; private float SIZE = 1.0F;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* The Cube constructor.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* Initiate the buffers.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Cube(float size)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE = size;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vertices = new float[]
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Vertices according to faces
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, SIZE, //v0
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, SIZE, &amp;nbsp;&amp;nbsp;&amp;nbsp; //v1
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, SIZE, &amp;nbsp;&amp;nbsp;&amp;nbsp; //v2
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, SIZE, &amp;nbsp;&amp;nbsp;&amp;nbsp; //v3

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, SIZE, &amp;nbsp;&amp;nbsp;&amp;nbsp; //...
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, -SIZE,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, -SIZE,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, SIZE,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, -SIZE, SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, -SIZE, SIZE,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -SIZE, SIZE, -SIZE,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SIZE, SIZE, -SIZE
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; texture = new float[]
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Mapping coordinates for the vertices
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f,

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0f, 1.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 0.0f,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0f, 1.0f
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indices = new byte[]
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Faces definition
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0, 1, 3, 0, 3, 2, &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Face front
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 4, 5, 7, 4, 7, 6, &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Face right
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 8, 9, 11, 8, 11, 10, &amp;nbsp;&amp;nbsp;&amp;nbsp; // ...
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 12, 13, 15, 12, 15, 14,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 16, 17, 19, 16, 19, 18,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 20, 21, 23, 20, 23, 22
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };


&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; byteBuf.order(ByteOrder.nativeOrder());
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vertexBuffer = byteBuf.asFloatBuffer();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vertexBuffer.put(vertices);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vertexBuffer.position(0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; byteBuf.order(ByteOrder.nativeOrder());
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textureBuffer = byteBuf.asFloatBuffer();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textureBuffer.put(texture);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textureBuffer.position(0);


&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indexBuffer = ByteBuffer.allocateDirect(indices.length);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indexBuffer.put(indices);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indexBuffer.position(0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;public void draw(GL10 gl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt; 處理Cube的點資料完後, 再來是繪圖的部分, 把這些點透過Android SDK提供的OpenGLES畫出來, 以下是程式碼&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;Cube繪圖處理&lt;/u&gt;&lt;/span&gt; &lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;public void draw(GL10 gl)
&amp;nbsp;&amp;nbsp; &amp;nbsp;{
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Bind the texture according to the set texture filter
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glBindTexture(GL10.GL_TEXTURE_2D, textures);

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Enable the vertex, texture and normal state
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glTranslatef(tranform.pos[0], tranform.pos[1], tranform.pos[2]);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glRotatef(tranform.rotationAngle[0], 1.0f, 0.0f, 0.0f);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glRotatef(tranform.rotationAngle[1], 0.0f, 1.0f, 0.0f);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glRotatef(tranform.rotationAngle[2], 0.0f, 0.0f, 1.0f);

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glScalef(tranform.scale[0], tranform.scale[1], tranform.scale[2]);//*/

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Point to our buffers
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Draw the vertices as triangles, based on the Index Buffer information
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_BYTE, indexBuffer);

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Disable the client state before leaving
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;基本的繪圖處理完後, 接下來回到GLStereoView開始處理整個場景的繪圖, 主要分為幾個步驟.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;建立場景物件&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;處理Stereo View空間轉換矩陣&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;利用Render to Texture畫出Stereo兩個View場景&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;建立場景物件&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如其名建立場景物件, 實做結果我建立2個Cube以及2個平面,  以下我以2個Cube為例子, 建立的時機在GLStereoView的onSurfaceCreated裡, 這邊說明一下,  onSurfaceCreated是重載自GLSurfaceView的一個函式, 呼叫時機也由GLSurfaceView自己處理,  可以在這個函式裡面作一些場景初始化的處理, 甚至場景不大不需要管理的, 在這裡讀入所有場景也沒關係, 以下是我的程式部份.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;建立場景物件&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onSurfaceCreated(GL10 gl, EGLConfig config) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the background color to black ( rgba ).
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable Smooth Shading, default not really needed.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glShadeModel(GL10.GL_SMOOTH);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Depth buffer setup.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //gl.glClearDepthf(1.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnable(GL10.GL_TEXTURE_2D);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Enables depth testing.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnable(GL10.GL_DEPTH_TEST);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // The type of depth testing to do.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glDepthFunc(GL10.GL_LEQUAL);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Really nice perspective calculations.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textureIDGroup = createTextures(gl, 2, new int[]
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; R.drawable.create, 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; R.drawable.ps_grid06});
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Cube []moveableObjs = new Cube[2];

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[0] = new Cube(1.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Load the texture for the cube once during Surface creation
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[0].setGLTexture(textureIDGroup[0]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[0].translateOffset(2.0f, 0.0f, 0.0f);


&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[1] = new Cube(1.0f);//0x10000);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Load the texture for the cube once during Surface creation
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[1].setGLTexture(textureIDGroup[0]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; moveableObjs[1].translateOffset(1.5f, 1.0f, 5.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;處理Stereo View空間轉換矩陣&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;  接下來為了要產生Stereo View, 需要先處理Camera, 也就是投影矩陣的參數, 此部份與我上一篇Stereoscopic 3D  in OpenGL處理是一樣的, 以下列出主要程式碼, 主要使用時機是想要切換成Stereo View的時候,  我是在onTouchEvent呼叫, 另外注意如果有切換多種View, 記得在onSurfaceChanged要作處理.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;Camera參數&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //near clipping plane &amp;amp;gt;0
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double mNearZ = 0.1f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //far clipping plane &amp;amp;gt;0
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double mFarZ = 1000.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //screen projection plane
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double mScreenZ = 50.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //intraocular distance
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double mIOD = 0.05f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double mFoxy = 45.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private double DTR = 0.0174532925; 
/*
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; IOD : intraocular distance, that decides offset distances in StereoView 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (opengl lookup the center of two-eyes, offset IOD/2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; fovy : view angle of eyes
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; aspect : screen aspect ratio, w/h, notice!! use Framebuffer w/h in FBO
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; nearZ,farZ : positive , z clip plane
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&amp;nbsp; clipPlaneRect : clip plane rect {left, right,bottom,top} will be setup based on DTR,foxy and nearZ,screenZ
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; private void setStereoFrustumParameter(double width, double height)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double aspect = width/height;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double foxy = mFoxy;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double nearZ =&amp;nbsp; mNearZ;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double screenZ = mScreenZ;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double IOD = mIOD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double top = nearZ*Math.tan(DTR*foxy/2.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double right = aspect*top;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double frustumShift = (IOD/2.0f)*nearZ/screenZ;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Left eye
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mLeftCam.mTopFrustum = top;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mLeftCam.mBottomFrustum = -top;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //center of two-eyes, offset IOD/2
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mLeftCam.mLeftFrustum = -right+frustumShift;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mLeftCam.mRightFrustum = right+frustumShift;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mLeftCam.mModelTranslation = IOD/2.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //right eye
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mRightCam.mTopFrustum = top;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mRightCam.mBottomFrustum = -top;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mRightCam.mLeftFrustum = -right-frustumShift;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mRightCam.mRightFrustum = right-frustumShift;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mRightCam.mModelTranslation = -IOD/2.0f;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; private float[] getFrustum(SIDEVIEW side)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float []frustum = new float[10];
  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(side == SIDEVIEW.RIGHT)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[0] = (float)mRightCam.mLeftFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[1] = (float)mRightCam.mRightFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[2] = (float)mRightCam.mBottomFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[3] = (float)mRightCam.mTopFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[6] = (float)mRightCam.mModelTranslation;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[7] = 0.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[8] = 0.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[0] = (float)mLeftCam.mLeftFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[1] = (float)mLeftCam.mRightFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[2] = (float)mLeftCam.mBottomFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[3] = (float)mLeftCam.mTopFrustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[6] = (float)mLeftCam.mModelTranslation;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[7] = 0.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[8] = 0.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[4] = (float)mNearZ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[5] = (float)mFarZ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frustum[9] = (float) mScreenZ;
  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return frustum;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;利用Render to Texture畫出Stereo兩個View場景&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最後, 剩下繪圖部份, 為了可以分別畫出兩個View, 這邊需要使用Render to Texture的方式, 由於實做比較複雜一點,大概列一下步驟&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;建立一個材質準備繪圖在上面&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;建立Frame Buffer Object(FBO), 並把他attach到材質上&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt; 繪圖&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;建立一個材質準備繪圖在上面&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] texture = new int[1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glGenTextures(1, texture, 0);&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //notice!!, use null in render, not null in bmp? 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, width, height, 0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, null);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_NEAREST);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTexParameterf(GL10.GL_TEXTURE_2D,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_TEXTURE_MAG_FILTER,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_LINEAR);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_REPEAT);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL10.GL_REPEAT);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt;建立Frame Buffer Object(FBO), 並把他attach到材質上&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  int mFramebuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int framebuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] framebuffers = new int[1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glGenFramebuffersOES(1, framebuffers, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; framebuffer = framebuffers[0];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, framebuffer);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int depthbuffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] renderbuffers = new int[1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glGenRenderbuffersOES(1, renderbuffers, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; depthbuffer = renderbuffers[0];

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glBindRenderbufferOES(GL11ExtensionPack.GL_RENDERBUFFER_OES, depthbuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glRenderbufferStorageOES(GL11ExtensionPack.GL_RENDERBUFFER_OES,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL11ExtensionPack.GL_DEPTH_COMPONENT16, width, height);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glFramebufferRenderbufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL11ExtensionPack.GL_DEPTH_ATTACHMENT_OES,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL11ExtensionPack.GL_RENDERBUFFER_OES, depthbuffer);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Attach 2D Texture to the FBO
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glFramebufferTexture2DOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL11ExtensionPack.GL_COLOR_ATTACHMENT0_OES, GL10.GL_TEXTURE_2D,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetTextureId, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int status = gl11ep.glCheckFramebufferStatusOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status != GL11ExtensionPack.GL_FRAMEBUFFER_COMPLETE_OES) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RuntimeException(&quot;Framebuffer is not complete: &quot; +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Integer.toHexString(status));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: small;&quot;&gt;繪 圖部份比較複雜, 這邊說明一下, Offscreen是繪圖到FBO, 也就是Texture上, 當在材質上畫完後, 再來只需要建個model,  把貼圖貼上畫出來就可以, drawOnscreen就是作這個, 我只畫了一個簡單的矩形貼上貼圖而已, 程式碼我就省略了.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;u&gt; 繪圖&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void drawFrame(GL10 gl, int width, int height,boolean ifFrustum, float []proj,float []look)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (mContextSupportsFrameBufferObject) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //debug
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //drawOffscreenImage(gl, mFramebufferWidth, mFramebufferHeight);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //設定繪圖到FBO中
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, mFramebuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //draw on &quot;FrameBuffer&quot;, all initial reset by FrameBuffer env
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drawOffscreenImage(gl, mFramebufferWidth, mFramebufferHeight,ifFrustum, proj,look);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //關閉FBO繪圖
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //draw on screen,&amp;nbsp; all initial reset by screen env
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drawOnscreen(gl, width, height);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Current context doesn&#39;t support frame buffer objects.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Indicate this by drawing a red background.
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClearColor(1,0,0,0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; private void drawOffscreenImage(GL10 gl, int width, int height, boolean ifFrustum, float []proj,float []look)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; long time = SystemClock.uptimeMillis()% 4000L;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float angle = 0.090f * ((int) time);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glViewport(0, 0, width, height);
      
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //framebuffer w/h, not screen
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float ratio = (float) width / height;
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glMatrixMode(GL10.GL_PROJECTION);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glLoadIdentity();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //notice!! gl.glFrustumf : model should locates in nearz~farz
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //gl.glFrustumf(-ratio, ratio, -1, 1, 3, 1000);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //GLU.gluPerspective(gl, 45.0f, ratio, 0.1f, 1000.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(ifFrustum == true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glFrustumf(proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //notice!! x offset, not concern y,z now
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTranslatef(proj[6], proj[7], proj[8]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GLU.gluPerspective(gl, proj[0], ratio,proj[1], proj[2]);
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Set the face rotation
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glFrontFace(GL10.GL_CCW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnable(GL10.GL_CULL_FACE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glCullFace(GL10.GL_BACK);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnable(GL10.GL_DEPTH_TEST);
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //notice!! unlike drawOnscreen, it&#39;s all right to clear buffer, because twice framebuffer are draw on individual texture
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //one texture is on left plane, the other is on right plane, so that clear is just clear buffer in individual texture 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClearColor(0.0f,0.0f,0.0f,0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glMatrixMode(GL10.GL_MODELVIEW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glLoadIdentity();
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //GLU.gluLookAt(gl, 0, 0, 40, 0, 0, 0, 0, 1, 0);
       &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GLU.gluLookAt(gl,look[0],look[1],look[2],look[3],look[4],look[5],look[6],look[7],look[8]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /*   gl.glTranslatef(0, 0, -3.0f);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glRotatef(angle,        0, 1, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glRotatef(angle*0.25f,  1, 0, 0);*/
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glPushMatrix();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(ifFrustum == true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //move to screenZ
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glTranslatef(0, 0, -proj[9]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; drawScene(gl,time);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glPopMatrix();
         
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glDisable(GL10.GL_CULL_FACE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glDisable(GL10.GL_DEPTH_TEST);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);        
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt; 最後, 把整個場景在GLStereoView畫一畫就大功告成了, 在onDrawFrame呼叫drawFrame.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;GLStereoView繪圖&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onDrawFrame(GL10 gl)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float []look = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float lapsetime = SystemClock.uptimeMillis()% 1000.0f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //smooth move
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float cameraDistX =&amp;nbsp;&amp;nbsp; mCameraSpeed * mMoveDistX * 0.0001f * lapsetime;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float cameraDistY =&amp;nbsp; 0.0f;//mCameraOffsetY * 0.0001f * lapsetime;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mCameraPosX += cameraDistX;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClearColor(0.0f,0,1.0f,0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(ifFrustum == true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float screenOffsetw = (float)mDrawWidth*0.5f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; float screenOffseth = (float)mDrawHeight*0.5f;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; look =&amp;nbsp; new float[]{ mCameraPosX, mCameraPosY, 0, mCameraPosX, mCameraPosY,(float) -mScreenZ,&amp;nbsp; 0, 1, 0};
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mPrjParameter = getFrustum(SIDEVIEW.RIGHT);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //right screen
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOSceneRight.setPosition(new float[]{-screenOffsetw,0.0f,0.0f});
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOSceneRight.drawFrame(gl, mWidth, mHeight,ifFrustum, mPrjParameter,look);

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //look =&amp;nbsp; new float[]{ mCameraPosX, mCameraPosY, 0, mCameraPosX, mCameraPosY,(float) -mScreenZ,&amp;nbsp; 0, 1, 0};
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mPrjParameter = getFrustum(SIDEVIEW.LEFT);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //left screen
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOSceneLeft.setPosition(new float[]{screenOffsetw,0.0f,0.0f});
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOSceneLeft.drawFrame(gl, mWidth, mHeight,ifFrustum, mPrjParameter,look);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; look = new float[]{ mCameraPosX, mCameraPosY, 40, mCameraPosX, mCameraPosY, 0, 0, 1, 0};
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mPrjParameter = new float[]{45.0f, 0.1f, 1000.0f};
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOScene.setPosition(new float[]{0.0f,0.0f,0.0f});
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mFBOScene.drawFrame(gl, mWidth, mHeight,ifFrustum, mPrjParameter,look);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;.實做結果&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDcT0xC5sXQczEWS82LovExttkCp1E4U8dPUKhQBbBpy4EeOh-pSYAGFzpszv1fH2jdOWL_2FCfU9_IPvJdvF05J6k66DNSl4n9jsD-YJ2YFTfnWqRu64RHjz41Bi_WuLs-rEe6Tlplc/s1600/DSC_0106.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDcT0xC5sXQczEWS82LovExttkCp1E4U8dPUKhQBbBpy4EeOh-pSYAGFzpszv1fH2jdOWL_2FCfU9_IPvJdvF05J6k66DNSl4n9jsD-YJ2YFTfnWqRu64RHjz41Bi_WuLs-rEe6Tlplc/s320/DSC_0106.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVqL0SqOjFYletL6WoR7dhUSp2yzP9rU8h8ZvCxTJB4ieQJudCFdebulpvGmkl99tgK28diftveP2ruHH12Qkot0ZJfqcNSu9Gbj28w4Tsp22VAjM_0COFqbM4nBrq8ZZyGWwPXnepgo/s1600/DSC_0101.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVqL0SqOjFYletL6WoR7dhUSp2yzP9rU8h8ZvCxTJB4ieQJudCFdebulpvGmkl99tgK28diftveP2ruHH12Qkot0ZJfqcNSu9Gbj28w4Tsp22VAjM_0COFqbM4nBrq8ZZyGWwPXnepgo/s320/DSC_0101.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;.原帖&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;a href=&quot;http://arkkk.blogspot.com/2011/10/stereoscopic-3d-in-opengl-es-android.html&quot;&gt;http://arkkk.blogspot.com/2011/10/stereoscopic-3d-in-opengl-es-android.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/6661484519763242687/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/stereoscopic-3d-on-android-opengl-es.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6661484519763242687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6661484519763242687'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/stereoscopic-3d-on-android-opengl-es.html' title='Stereoscopic 3D on Android ( OpenGL ES )'/><author><name>arkkk</name><uri>http://www.blogger.com/profile/09113024690552715485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoGTuvIHxhCSthnxesFHaVX0jJ5iIP9pxzoJhblXGoNK80srHiwC00jfj77A-MApAnQtZkyjeOK7NvY-0TSnNB-Cucwq5foXnt-KyNTOS6DPDkckI6_ZyzVZ1WZvNWJCQ/s220/head.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDcT0xC5sXQczEWS82LovExttkCp1E4U8dPUKhQBbBpy4EeOh-pSYAGFzpszv1fH2jdOWL_2FCfU9_IPvJdvF05J6k66DNSl4n9jsD-YJ2YFTfnWqRu64RHjz41Bi_WuLs-rEe6Tlplc/s72-c/DSC_0106.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-7050164299325659519</id><published>2011-10-11T10:54:00.000-07:00</published><updated>2011-10-11T10:54:25.496-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3D"/><category scheme="http://www.blogger.com/atom/ns#" term="電玩"/><title type='text'>Puzzle Game Implementation Using Cogl/ODE</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/BZxGymLaxcU?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
在開始之前, Cogl跟ODE可能沒什麼人聽過, 先大概介紹一下&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;1.Introduction&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Cogl:&lt;/u&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 網址: &lt;a href=&quot;http://wiki.clutter-project.org/wiki/Cogl&quot;&gt;http://wiki.clutter-project.org/wiki/Cogl&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cogl是一套處理3D幾何的函式庫, 數於Open Source專案ClutterProject裡的一部份,底層使用OpenGL, OpenGLES, 目前仍在開發中, 功能尚沒有很齊全(2011/05), 另外在使用上要很注意, 使用Clutter做開發的軟體, 由於底層也使用Cogl, 如果在其中自己直接使用Cogl, 有可能會對Clutter造成影響, 像是設定viewport等等都有可能會互相影響, 混用的時候要很注意.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;ODE:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 網址:&lt;a href=&quot;http://www.ode.org/&quot;&gt;http://www.ode.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ODE是一套知名的Open Source物理引擎, 跟市面上現有的物理引擎比較起來功能雖然不強大, 但基礎功能該有的都有, 沒有很要求物理處理的效能以及功能的話用起來還不錯.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;2.Implementation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 先來看結果的影片,處理拼圖塊的方式有很多種, 可以利用2d alpha map的方式, 產生無厚度的拼圖塊, 也可以直接做出3d model, 寫讀檔程式自己繪圖, 在這邊我用的是自己建3d model的方式, 以下做論述&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/BZxGymLaxcU?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;結果影片&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&amp;nbsp;.puzzle model/texture&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在puzzle的model部分, 我的方式是自己建模並輸出.obj檔案, 並在程式中寫讀檔以及繪圖, 在這邊有個重點是貼圖座標一定要處理好, 之後在程式中繪圖處理才比較不會太大的問題.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.建立3D模型&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; 如圖, 把3ds_max開起來, 乖乖的慢慢拉點線面, 建好後輸出obj檔案, 在這邊說明一下, 在選擇輸出格式時要注意選擇有含貼圖資訊的格式, 並不是所有格式都有含貼圖資訊..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNb07XAihsqZxRUyfmO6sXp9_fqydTOz_YHlvyIdBsIlt71xN2JG3z8vlo32JreoyDU8CiPdoV6RUSb2hDDsFCIjv3enJGuYX9G8IEfG2ydDgWLn5DjmN-mnVjcydU0hXDV7cEe96fao/s1600/puzzle_model_wire.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNb07XAihsqZxRUyfmO6sXp9_fqydTOz_YHlvyIdBsIlt71xN2JG3z8vlo32JreoyDU8CiPdoV6RUSb2hDDsFCIjv3enJGuYX9G8IEfG2ydDgWLn5DjmN-mnVjcydU0hXDV7cEe96fao/s320/puzzle_model_wire.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;建立3D模型-網格&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAntfCclEou21zfbDyXFwhwsvHA7hHuTZbCDV1ljs2Nd7LDgX1LFHcDJGkP7OWkJ3MvVS79mN-5ddLT6ELxNYvpY4CA3bvg4XXL08u24owy_s5ckOF8oUmFs0kyTuTlK4M_BvcyuDufvA/s1600/puzzle_model_texture.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAntfCclEou21zfbDyXFwhwsvHA7hHuTZbCDV1ljs2Nd7LDgX1LFHcDJGkP7OWkJ3MvVS79mN-5ddLT6ELxNYvpY4CA3bvg4XXL08u24owy_s5ckOF8oUmFs0kyTuTlK4M_BvcyuDufvA/s320/puzzle_model_texture.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;建立3D模型-貼圖&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNb07XAihsqZxRUyfmO6sXp9_fqydTOz_YHlvyIdBsIlt71xN2JG3z8vlo32JreoyDU8CiPdoV6RUSb2hDDsFCIjv3enJGuYX9G8IEfG2ydDgWLn5DjmN-mnVjcydU0hXDV7cEe96fao/s1600/puzzle_model_wire.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;u&gt;.軟體實作&lt;/u&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;初始化&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先, 第一步是初始化, 分為兩個部分, Cogl以及ODE環境的初始化. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 這邊為了方便, 使用clutter來處理介面, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;clutter初始化&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;ClutterActor *stage ;

//clutter初始化
clutter_init (&amp;amp;argc, &amp;amp;argv);

//創建clutter基礎元件, 後續基本元件(actor)會加在stage裡
stage = clutter_stage_new();&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
ODE初始化&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;//dInitODE舊版ode不需要使用, 新版有些功能需要先呼叫才能使用, 如joint, collision等等
dInitODE();

//ode基礎的元件, 所有的物件產生在world下面
mWorld = dWorldCreate();

//建立一個碰撞空間, ode有幾種空間, dSimpleSpaceCreate較適合小量物件的碰撞
mSpace = dSimpleSpaceCreate(0);

//建立儲存接觸點的群組
mContactgroup = dJointGroupCreate(0);


//為了不讓物體一直掉到下去, 建立個地板, 參數為ax+by+cz=d的a,b,c,d
dCreatePlane(mSpace, 0, -1, 0, -10);

//設定重力
dWorldSetGravity(mWorld, 0, 1.0, 0);

//設定error correcting及constraint force mixing
dWorldSetERP(mWorld, 0.2);
dWorldSetCFM(mWorld, 1e-5);

&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;註冊訊息事件&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 初始化完成後, 下一步是註冊我們所需要的訊息, 需要註冊的訊息分別為paint,destroy,key或者button事件&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
註冊訊息事件&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;//註冊繪圖事件, 最主要的處理都在這
g_signal_connect_after (actor, &quot;paint&quot;, G_CALLBACK (cogl_paint_cb), &amp;amp;gFrameData);

//destroy, 裡面處理釋放資源
g_signal_connect (actor, &quot;destroy&quot;, G_CALLBACK (actor_destroy), NULL);

//滑鼠事件
g_signal_connect (actor,
                    &quot;button-press-event&quot;,
                    G_CALLBACK (button_press_cb),
                    NULL);
g_signal_connect (actor,
                    &quot;button-release-event&quot;,
                    G_CALLBACK (button_release_cb),
                    NULL);
g_signal_connect (actor,
                    &quot;motion-event&quot;,
                    G_CALLBACK (mouse_cb),
                    NULL);
&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;繪圖與物理處理(paint事件)&lt;/li&gt;
&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下來處理最重要paint事件部分, 這個部分包含model的繪圖, ODE物理部分的碰撞, 以及raycast處理.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先處理Cogl的3d model繪圖, obj檔案的讀取部分可以在網路上找到現成的code, 由於是不是我自己寫的, 此部分就略掉不講, 假設目前已經把3d點座標與貼圖座標都讀取到陣列存放, 以下是主要的程式碼&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
Cogl Load 3d puzzle model&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;void PuzzleModel::LoadWithMesh(string modelFilePath,Vector3D position)
{
    float maxx,maxy,maxz;
    float minx,miny,minz;
    maxx=maxy=maxz= -999999;
    minx=miny=minz= 999999;

    mMesh = new ObjData(modelFilePath);
 ObjMesh *pMesh = mMesh-&amp;gt;mObjMesh;

#ifdef _DEBUG_MODEL_INFO
    printf(&quot;all point size : %d\n&quot;, pMesh-&amp;gt;m_iNumberOfVertices);
    printf(&quot;all texture point size : %d\n&quot;, pMesh-&amp;gt;m_iNumberOfTexCoords);
    printf(&quot;all normal point size : %d\n&quot;, pMesh-&amp;gt;m_iNumberOfNormals);   
    printf(&quot;faces size : %d\n&quot;, pMesh-&amp;gt;m_iNumberOfFaces);
#endif
 //1 face = 3 vertex = 3 texture = 3 normal..1面3點, 每點都有texture以及normal
    mDrawPointSize = pMesh-&amp;gt;m_iNumberOfFaces*3;//pMesh-&amp;gt;m_iNumberOfVertices;
    
    mTexturePointSize = pMesh-&amp;gt;m_iNumberOfFaces*3;//pMesh-&amp;gt;m_iNumberOfTexCoords;
    mNormalPointSize = pMesh-&amp;gt;m_iNumberOfFaces*3;//pMesh-&amp;gt;m_iNumberOfNormals;

    if( pMesh-&amp;gt;m_aNormalArray   != NULL &amp;amp;&amp;amp;
     pMesh-&amp;gt;m_aTexCoordArray != NULL )
    {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int iDraw = 0,iTexture = 0,iNormal=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mDrawPointGroup = new float[mDrawPointSize*3];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mTexturePointGroup = new float[mTexturePointSize*2];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mNormalPointGroup = new float[mNormalPointSize*3];

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;m_iNumberOfFaces;i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;{
                    unsigned int j;
      ObjFace *pf = &amp;amp;pMesh-&amp;gt;m_aFaces[i];

      /*
      ** Draw the polygons with normals &amp;amp; uv co-ordinates
      */
      for(j=0;j&amp;lt;3;j++)
      {
                float fx,fy,fz;

                fx=pMesh-&amp;gt;m_aTexCoordArray[ pf-&amp;gt;m_aTexCoordIndicies[j] ].u;
                fy=pMesh-&amp;gt;m_aTexCoordArray[ pf-&amp;gt;m_aTexCoordIndicies[j] ].v;
                mTexturePointGroup[iTexture++]=fx;
                mTexturePointGroup[iTexture++]=fy;
                
                fx=pMesh-&amp;gt;m_aNormalArray[ pf-&amp;gt;m_aNormalIndices[j] ].x;
                fy=pMesh-&amp;gt;m_aNormalArray[ pf-&amp;gt;m_aNormalIndices[j] ].y;
                fz=pMesh-&amp;gt;m_aNormalArray[ pf-&amp;gt;m_aNormalIndices[j] ].z;
                mNormalPointGroup[iNormal++] = fx;
                mNormalPointGroup[iNormal++] = fy;
                mNormalPointGroup[iNormal++] = fz;

                fx=pMesh-&amp;gt;m_aVertexArray[ pf-&amp;gt;m_aVertexIndices[j] ].x;
                fy=pMesh-&amp;gt;m_aVertexArray[ pf-&amp;gt;m_aVertexIndices[j] ].y;
                fz=pMesh-&amp;gt;m_aVertexArray[ pf-&amp;gt;m_aVertexIndices[j] ].z;
                mDrawPointGroup[iDraw++] = fx;
                mDrawPointGroup[iDraw++] = fy;
                mDrawPointGroup[iDraw++] = fz;
                if(fx&amp;gt;maxx)
                    maxx=fx;
                if(fy&amp;gt;maxy)
                    maxy=fy;              
                if(fz&amp;gt;maxz)
                    maxz=fz;
                if(fx&amp;lt;minx)
                    minx=fx;
                if(fy&amp;lt;miny)
                    miny=fy;              
                if(fz&amp;lt;minz)
                    minz=fz;
      }
     }
#ifdef _DEBUG_MODEL_INFO
        //設定bounding box, 左上為原點
        //右下
printf(&quot;max:%f,%f,%f\n&quot;,maxx,maxy,maxz);
printf(&quot;min:%f,%f,%f\n&quot;,minx,miny,minz);
#endif
        //為了設定物理物件的大小, 此處計算bounding box
        mBoundingBox[0] = Vector3D(minx,miny,minz);
        mBoundingBox[1] = Vector3D(maxx,maxy,maxz);
        
         //建立ode物理body, 後面說明
        CreatePhysicsBody(position);

        //Cogl繪圖需要先創建buffer,gl_Vertex畫點,&amp;nbsp;&amp;nbsp;
        //gl_Normal設定normal, 要繪圖至少要有gl_Vertex
        mVBO = cogl_vertex_buffer_new (mDrawPointSize);
        cogl_vertex_buffer_add (mVBO,
                              &quot;gl_Vertex&quot;,
                              3,
                              COGL_ATTRIBUTE_TYPE_FLOAT,
                              FALSE,
                              sizeof (float)*3,
                              mDrawPointGroup);

        cogl_vertex_buffer_add (mVBO,
                              &quot;gl_Normal&quot;,
                              3,
                              COGL_ATTRIBUTE_TYPE_FLOAT,
                              FALSE,
                              sizeof (float)*3,
                              mNormalPointGroup);

     
        //設定texture, 此處為了方便寫死texture.png, 真的實做請自己實做一個resource manager處理可能比較適當
        CoglTextureFlags flags = COGL_TEXTURE_NO_SLICING;
        
        CoglPixelFormat internalFormat = COGL_PIXEL_FORMAT_ANY;

        CoglHandle texture = cogl_texture_new_from_file (&quot;texture.png&quot;,OGL_TEXTURE_NO_SLICING,COGL_PIXEL_FORMAT_ANY, NULL);
        if(texture != NULL)
        {
            //同樣是為了繪圖需要的buffer, 此處是畫材質用的貼圖座標
            cogl_vertex_buffer_add (mVBO,
                          &quot;gl_MultiTexCoord0&quot;,
                          2,
                          COGL_ATTRIBUTE_TYPE_FLOAT,
                          FALSE,
                          sizeof (float)*2,
                          mTexturePointGroup);
            mModelTexture = cogl_material_new ();

            cogl_material_set_layer ((CoglMaterial*)mModelTexture, 0, texture);       
        }

    }
&lt;/pre&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 處理完model繪圖後, 接下來要替此物件建立一個物理body, 使之產生物理的效果&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
建立物理body&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;void PuzzleModel::CreatePhysicsBody(Vector3D position)
{

    float sizex = mBoundingBox[1].mx-mBoundingBox[0].mx;
    float sizey = mBoundingBox[1].my-mBoundingBox[0].my;
    float sizez = mBoundingBox[1].mz-mBoundingBox[0].mz;

    mPhyObj = PhysicsManager::Singleton()-&amp;gt;createBox(sizex,sizey,sizez);

    dMatrix3 R;
    VECTOR tempVect(0.0, 0.0, 0.0);
    dBodySetLinearVel(mPhyObj-&amp;gt;mBody, tempVect.x, tempVect.y, tempVect.z);
    dRFromAxisAndAngle(R, 0, 1, 0, 0);
    dBodySetRotation(mPhyObj-&amp;gt;mBody, R);
    dBodySetPosition(mPhyObj-&amp;gt;mBody,  position.mx, position.my, position.mz);

#ifdef _DEBUG_MODEL_INFO
//設定bounding box, 左上為原點
//右下
printf(&quot;GEOM(box) size:%f,%f,%f\n&quot;,sizex,sizey,sizez);
printf(&quot;GEOM(box) pos:%f,%f,%f\n&quot;,position.mx, position.my, position.mz);
#endif
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model的位移以及旋轉, 也就是其空間矩陣值由ODE來處理, 成功建立物理body後, 在paint重繪處理時一併更新ODE物理計算, 將ODE計算出來的空間矩陣設定給此物件, 透過Cogl繪出即可, 此處要注意的是ODE的空間矩陣與Cogl(同OpenGL)放置方式不一樣, 所以需要再多一個轉換步驟&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;Puzzle model的繪圖Update處理&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;void PuzzleModel::Update(float elasptime)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!mDrawPointGroup || mDrawPointSize &amp;lt;=0 ) return;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_push_matrix (); 

&amp;nbsp;&amp;nbsp;&amp;nbsp; //scale與translate順序會影響位移大小, scale先放則移動會乘上倍率
&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_scale (mScale.mx, mScale.my,&amp;nbsp; mScale.mz); 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //物理處理&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(mPhyObj)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
/*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0&amp;nbsp; 1&amp;nbsp; 2&amp;nbsp; 3&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0&amp;nbsp; 4&amp;nbsp; 8&amp;nbsp; 12 |
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |
&amp;nbsp;&amp;nbsp;&amp;nbsp; R = | 4&amp;nbsp; 5&amp;nbsp; 6&amp;nbsp; 7&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1&amp;nbsp; 5&amp;nbsp; 9&amp;nbsp; 13 |
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; M = |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 8&amp;nbsp; 9&amp;nbsp; 10 11 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 2&amp;nbsp; 6&amp;nbsp; 10 14 |
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |
&amp;nbsp;&amp;nbsp;&amp;nbsp; p = | 0&amp;nbsp; 1&amp;nbsp; 2 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 3&amp;nbsp; 7&amp;nbsp; 11 15 |
*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MATRIX geoMatrix;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; geoMatrix.LoadIdentity();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const dReal *pos = dGeomGetPosition(mPhyObj-&amp;gt;mGeom);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const dReal *R = dGeomGetRotation(mPhyObj-&amp;gt;mGeom);
#ifdef _DEBUG_MODEL_MATRIX
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n*************\n&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;{%f,%f,%f,%f}\n{%f,%f,%f,%f}\n{%f,%f,%f,%f}\n&quot;,R[0],R[1],R[2],R[3],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; R[4],R[5],R[6],R[7],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; R[8],R[9],R[10],R[11]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n(%f,%f,%f)\n&quot;, pos[0],pos[1],pos[2]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*************\n&quot;);
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //arkkk 這裡一定要注意ode的dReal define是否為double精度, 否則會出問題(看ode\common.h, dDOUBLE/dSINGLE)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; geoMatrix.ODEtoOGL((const float*)pos, (const float*)R);
#ifdef _DEBUG_MODEL_MATRIX
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n==============\n&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;{%f,%f,%f,%f}\n{%f,%f,%f,%f}\n{%f,%f,%f,%f}\n{%f,%f,%f,%f}\n&quot;,geoMatrix.Element[0],geoMatrix.Element[4],geoMatrix.Element[8],geoMatrix.Element[12],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; geoMatrix.Element[1],geoMatrix.Element[5],geoMatrix.Element[9],geoMatrix.Element[13],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; geoMatrix.Element[2],geoMatrix.Element[6],geoMatrix.Element[10],geoMatrix.Element[14],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; geoMatrix.Element[3],geoMatrix.Element[7],geoMatrix.Element[11],geoMatrix.Element[15]);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;===============\n\n&quot;);
#endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoglMatrix matrix_cogl,matrix_gl_ode,matrix_result;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //gl to cogl matrix
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_matrix_init_from_array(&amp;amp;matrix_gl_ode, geoMatrix.Element);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //取出現在matrix
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_get_modelview_matrix(&amp;amp;matrix_cogl);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_matrix_multiply(&amp;amp;matrix_result, &amp;amp;matrix_cogl, &amp;amp;matrix_gl_ode);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_set_modelview_matrix(&amp;amp;matrix_result);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else 
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_translate (mPosition.mx, mPosition.my,&amp;nbsp; mPosition.mz);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_rotate (mRotate.mx, 0, 0, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_rotate (mRotate.my, 0, 1, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_rotate (mRotate.mz, 1, 0, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_set_depth_test_enabled (TRUE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; if(mModelTexture)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_set_source (mModelTexture);

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_vertex_buffer_draw (mVBO,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COGL_VERTICES_MODE_TRIANGLES,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mDrawPointSize);

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_set_depth_test_enabled (FALSE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_pop_matrix ();
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;釋放資源也是很重要的&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;PuzzleModel::~PuzzleModel()
{
    if(mMesh)
    {
        cogl_vertex_buffer_submit(mVBO);
        delete mMesh;
        mMesh = NULL;
        cogl_vertex_buffer_delete(mVBO,&quot;gl_Vertex&quot;);
        cogl_vertex_buffer_delete(mVBO,&quot;gl_Normal&quot;);
    }

    if(mModelTexture)
    {
        cogl_vertex_buffer_submit(mVBO);
        cogl_vertex_buffer_delete(mVBO,&quot;gl_MultiTexCoord0&quot;);
        cogl_material_ref(mModelTexture);
        mModelTexture = NULL;
    }
}
&lt;/pre&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model的處理到此大部分完成了, 接下來把paint重繪的部分補上&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;paint繪圖處理&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;static void cogl_paint_cb (ClutterActor *actor, FrameData *data)
{

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_set_viewport (0, 0, data-&amp;gt;mFrameWidth, data-&amp;gt;mFrameHeight);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_perspective (60, /* field of view */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1, /* aspect ratio */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1, /* distance to near z plane */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100); /* distance to far z plane */

&amp;nbsp;&amp;nbsp;&amp;nbsp; setup_2d_device_coordinates_modelview (data-&amp;gt;mFrameWidth,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data-&amp;gt;mFrameHeight);

&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_clear (&amp;amp;gWhite, COGL_BUFFER_BIT_COLOR);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //center
&amp;nbsp;&amp;nbsp;&amp;nbsp; cogl_translate(gFrameData.mFrameWidth/2, gFrameData.mFrameHeight/2, 0.0f);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //注意, NearCallback函式關係到物理碰撞時的處理
&amp;nbsp;&amp;nbsp;&amp;nbsp; dSpaceCollide(mSpace, 0, NearCallback);

&amp;nbsp;&amp;nbsp;&amp;nbsp; dWorldQuickStep(mWorld, 0.05);

&amp;nbsp;&amp;nbsp;&amp;nbsp; dJointGroupEmpty(mContactgroup);

&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateAllModels();
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 到這一步執行下去應該還是會發現各個puzzle model的碰撞並無效果, 各位應該已經發現到dSpaceCollide的NearCallback尚未處理, 最後一步來看物理body碰撞時的處理&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;ODE body碰撞處理&lt;/div&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;static void NearCallback(void *data, dGeomID o1, dGeomID o2)
{
    int i;
    dBodyID b1 = dGeomGetBody(o1);
    dBodyID b2 = dGeomGetBody(o2);

    dContact contact[MAX_CONTACTS];   // up to MAX_CONTACTS contacts per box-box

    for (i = 0; i &amp;lt; MAX_CONTACTS; i++)
    {
        contact[i].surface.mode = dContactBounce | dContactSoftCFM;
        contact[i].surface.mu = dInfinity;
        contact[i].surface.mu2 = 0;
        //表面彈性, 0~1
        contact[i].surface.bounce = 0.5;//0.9;
        //反彈速度
        contact[i].surface.bounce_vel = 0.5;//0.1;
        contact[i].surface.soft_cfm = 0.01;
    }

    if (int numc = dCollide(o1, o2, MAX_CONTACTS, &amp;amp;contact[0].geom, sizeof(dContact)))
    {
        for (i = 0; i &amp;lt; numc; i++)
        {
            dJointID c = dJointCreateContact(mWorld, mContactgroup, contact + i);
            dJointAttach(c, b1, b2);
        }
    }
}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;3.後記&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 由於Cogl尚在開發中, 目前我並沒有在裡面發現有實做類似gluProject以及gluUnProject等函式, 我自己取其轉換矩陣下去計算發現滑鼠點選位置與3d空間會差一個位移, 原因我也不太確定, 導致用滑鼠點不太好讓ODE的raycast準確的打到物件, 後續有在實作再行補上點選拉動部分, 也許Cogl馬上就會有這功能, 或者其實有, 只是我沒發現吧, 另外, 以上程式碼為了只拿出重點部分, 所以是從原來架構精簡搬出來, 大錯誤應該是沒有, 不過可能會有小編譯錯誤, 以上~~&lt;br /&gt;
&lt;br /&gt;
原帖:&lt;br /&gt;
&lt;a href=&quot;http://arkkk.blogspot.com/2011/10/puzzle-game-implementation-using.html&quot;&gt;http://arkkk.blogspot.com/2011/10/puzzle-game-implementation-using.html &lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/7050164299325659519/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/puzzle-game-implementation-using.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7050164299325659519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7050164299325659519'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/10/puzzle-game-implementation-using.html' title='Puzzle Game Implementation Using Cogl/ODE'/><author><name>arkkk</name><uri>http://www.blogger.com/profile/09113024690552715485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoGTuvIHxhCSthnxesFHaVX0jJ5iIP9pxzoJhblXGoNK80srHiwC00jfj77A-MApAnQtZkyjeOK7NvY-0TSnNB-Cucwq5foXnt-KyNTOS6DPDkckI6_ZyzVZ1WZvNWJCQ/s220/head.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNb07XAihsqZxRUyfmO6sXp9_fqydTOz_YHlvyIdBsIlt71xN2JG3z8vlo32JreoyDU8CiPdoV6RUSb2hDDsFCIjv3enJGuYX9G8IEfG2ydDgWLn5DjmN-mnVjcydU0hXDV7cEe96fao/s72-c/puzzle_model_wire.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-1570659613664555436</id><published>2011-09-29T17:14:00.001-07:00</published><updated>2011-09-29T17:14:39.684-07:00</updated><title type='text'>陳綺貞 - 旅行的意義</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/LIxeYGCsPc4?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/LIxeYGCsPc4?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;280&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/1570659613664555436/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/blog-post_29.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1570659613664555436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1570659613664555436'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/blog-post_29.html' title='陳綺貞 - 旅行的意義'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5562770670035737656</id><published>2011-09-25T23:46:00.001-07:00</published><updated>2011-09-25T23:46:19.135-07:00</updated><title type='text'>Bob Acri - Linda Rose</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/BVZl9NiSHbU?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/BVZl9NiSHbU?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;280&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5562770670035737656/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bob-acri-linda-rose.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5562770670035737656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5562770670035737656'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bob-acri-linda-rose.html' title='Bob Acri - Linda Rose'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-6973232882736322946</id><published>2011-09-25T23:45:00.001-07:00</published><updated>2011-09-25T23:45:26.159-07:00</updated><title type='text'>Bob Acri - Sleep Away</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/I6PHgtdxFrY?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/I6PHgtdxFrY?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;280&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/6973232882736322946/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bob-acri-sleep-away.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6973232882736322946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6973232882736322946'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bob-acri-sleep-away.html' title='Bob Acri - Sleep Away'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-1586297088550802165</id><published>2011-09-22T07:58:00.000-07:00</published><updated>2011-09-22T08:13:13.348-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3D"/><category scheme="http://www.blogger.com/atom/ns#" term="S3D"/><title type='text'>Stereoscopic 3D in OpenGL</title><content type='html'>近年來Stereoscopic 3D在面板跟多媒體業界(的廠商,不包含使用者XD)間似乎很熱, 而在電腦影像處理中是如何處理多視角的3D影像呢,此篇用OpenGL來實際實作一個簡單的例子....&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
首先, 在開始前有些基本OpenGL功能必須要清楚, 像是一些基本的幾何知識,以及glFrustum的使用等等...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;1.glFrustum&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
OpenGL API中的glFrustum函式主要負責投影矩陣的處理, 可由圖一看出Camera在3D空間中的投影成像狀況,可以看出是投影的成像是透過一個六面體 , glFrustum負責處理投影成像的矩陣運算,另外,OpenGL程式設計常使用到的gluPerspective是glFrustum的一種常用例子,其六面體是對稱的且前後投影面是平行的(如圖一), 沒有特別需求的話一般可以使用gluPerspective處理即可...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWwlmcZvw2DX92QaSdj4kJl4hA0DRvoRLOWps2fnR8zGdXo97akBEIssnGl1iL5-PWGbwM1N3yU6F_e17Sxy_86UQHrMi9g-tsyn0mcAdzi72MPDZjzZ7rWtB3XNSjQKUuFtAwqERcf-8/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWwlmcZvw2DX92QaSdj4kJl4hA0DRvoRLOWps2fnR8zGdXo97akBEIssnGl1iL5-PWGbwM1N3yU6F_e17Sxy_86UQHrMi9g-tsyn0mcAdzi72MPDZjzZ7rWtB3XNSjQKUuFtAwqERcf-8/s320/1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;圖一,glFrustum Perspective View&lt;/div&gt;&lt;br /&gt;
詳細函式可以參考&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml&quot;&gt;http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;2.Stereo View的計算&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
詳細可以參考網址:&lt;br /&gt;
&lt;a href=&quot;http://www.binocularity.org/page26.php&quot;&gt;http://www.binocularity.org/page26.php&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.orthostereo.com/geometryopengl.html&quot;&gt;http://www.orthostereo.com/geometryopengl.html &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;左右眼在空間中的視角上視圖如圖二,實際單眼的視角在空間中會如圖一那樣,也就是說, 只要處理眼睛的移動以及投影的計算, 就可以產生出左右眼的影像.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ4DCUywgUp42ySi5BxGlRFFsABy5p8f8x72pPrxOU3PgzPydcAx4w4kqjuKCZ_0fIxVWDuvK-2Nfbsy8K0GNp53wNuNbZ2PDjbZLVTIdJaZ_NbHqfSlDD9P_zeOVaJhz9QMxdi6alH0/s1600/view.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ4DCUywgUp42ySi5BxGlRFFsABy5p8f8x72pPrxOU3PgzPydcAx4w4kqjuKCZ_0fIxVWDuvK-2Nfbsy8K0GNp53wNuNbZ2PDjbZLVTIdJaZ_NbHqfSlDD9P_zeOVaJhz9QMxdi6alH0/s320/view.png&quot; width=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;圖二, 左右眼視角上視圖&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
實際實做需要注意的重點有幾個地方&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.Frustum投影的計算&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.平移3D環境的Camera&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.重新計算Frustum投影&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;3.程式實做&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
從上面參考網址的程式碼來改, 基礎部分省略, 以下列出幾個重點部分&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;//這個是degrees to radians
#define DTR 0.0174532925

struct camera
{
 GLdouble leftfrustum;
 GLdouble rightfrustum;
 GLdouble bottomfrustum;
 GLdouble topfrustum;
 GLfloat modeltranslation;
} leftCam, rightCam;

double aspect = 1.0;
double nearZ = 0.1;                 //near clipping plane
//畫布(display plane)的z位置, Frustum效果平移的主要基準frame
double screenZ = 600.0;     
//眼(鏡頭)相距距離, 處理時由原點各左右移IOD/2處理左右眼影像, 值需要依狀況做調整, 
//另外, 有paper說最佳值為width的5%或2.5%, 不過沒試過我也不知道效果
double IOD = 5;   
&lt;/pre&gt;&lt;br /&gt;
以上參數有了, 再來是計算Frustum的參數, 注意雖然不做也沒關係, 不過依照比例下去計算各個投影參數, 出來的形狀比較不會變形太多, frustumshift也依照比例去算&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;void setFrustum()
{
 double top = nearZ*tan(DTR*fovy/2);                    //sets top of frustum based on fovy and near clipping plane
 double right = aspect*top;                             //sets right of frustum based on aspect ratio
 double frustumshift = (IOD/2)*nearZ/screenZ;

 leftCam.topfrustum = top;
 leftCam.bottomfrustum = -top;
 leftCam.leftfrustum = -right + frustumshift;
 leftCam.rightfrustum = right + frustumshift;
 leftCam.modeltranslation = IOD/2;

 rightCam.topfrustum = top;
 rightCam.bottomfrustum = -top;
 rightCam.leftfrustum = -right - frustumshift;
 rightCam.rightfrustum = right - frustumshift;
 rightCam.modeltranslation = -IOD/2;
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.處理左右影像繪圖&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
OpenGL基礎部分省略, 雖然畫幾個簡單幾何圖形表示就可以了, 不過感覺好像z值不夠變化, 所以找個DepthMap影像來畫一畫...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQFagW5TXhneu1XJWJisL96a7DRnTIyC4iiN941pbNnBn9GnUUJOD4GD-Y7bfl4Subd0MZksiq0rLl9bGGov8rsaw5d2b1JSKfKhZ3nikVOKgYYT4BR5-BFKXoiRW8DF12D7BpSCoqOHQ/s1600/test.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQFagW5TXhneu1XJWJisL96a7DRnTIyC4iiN941pbNnBn9GnUUJOD4GD-Y7bfl4Subd0MZksiq0rLl9bGGov8rsaw5d2b1JSKfKhZ3nikVOKgYYT4BR5-BFKXoiRW8DF12D7BpSCoqOHQ/s320/test.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&amp;nbsp;圖三, 材質&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9cZ65XaEuovk94GgG3z1GjbgQd8UmGby8I8j9C_DXdPQSHeVhQfA-qbJTnSYQ9ArMJsghEo3nA33HlY1u6MyS6Rosv6Vj7rph2OarnG_ZBnlGy9NO9jwnKpO2fQ32T1Wp6OUNcaQG7fg/s1600/test_depth.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9cZ65XaEuovk94GgG3z1GjbgQd8UmGby8I8j9C_DXdPQSHeVhQfA-qbJTnSYQ9ArMJsghEo3nA33HlY1u6MyS6Rosv6Vj7rph2OarnG_ZBnlGy9NO9jwnKpO2fQ32T1Wp6OUNcaQG7fg/s320/test_depth.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;圖四, DepthMap&lt;/div&gt;&lt;br /&gt;
(圖的來源應該是某個學術網站, 臨時忘了網址, 想起來之後會補上)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.簡單依照DepthMap畫出3D模型&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
畫完了之後可以開始準備處理左右眼影像了...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2OGZ4FQPihHFNIFXWKVLcA0Frf1dhBONZfcF4FmyfzG2ayP4NFVyyZdlj_LSN0IiSYz4PyBJPZ1kBm5rfKR-NTsaGOwJrSQMGfAfqrv_ODSKYxhF-kygHrb3KcTm5zqVTccjeE1b6z9Y/s1600/model_front.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;145&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2OGZ4FQPihHFNIFXWKVLcA0Frf1dhBONZfcF4FmyfzG2ayP4NFVyyZdlj_LSN0IiSYz4PyBJPZ1kBm5rfKR-NTsaGOwJrSQMGfAfqrv_ODSKYxhF-kygHrb3KcTm5zqVTccjeE1b6z9Y/s320/model_front.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;圖五, 前視圖&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVXlLidbgOBQDH7zuIRGS-59Y3rAg2mrF5Z2weqBlUv_8oIw2wx04ujLRacFgiuDkjG8qgO9OuNutIqpnx1BZoyZYMI6IWkFy27QH3B-XxOCkS7K9M5g9NIIn6xoTDnkqpLajvRaKg1z8/s1600/model_buttom.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVXlLidbgOBQDH7zuIRGS-59Y3rAg2mrF5Z2weqBlUv_8oIw2wx04ujLRacFgiuDkjG8qgO9OuNutIqpnx1BZoyZYMI6IWkFy27QH3B-XxOCkS7K9M5g9NIIn6xoTDnkqpLajvRaKg1z8/s320/model_buttom.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;圖六, 上視圖&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;u&gt;.左右眼影像繪圖處理&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;GLvoid drawFrustumView(GLvoid)
{
 glDrawBuffer(GL_BACK);                                   //draw into both back buffers
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      //clear color and depth buffers

 if(nChangeSideView%2 == 0)
 {
  glDrawBuffer(GL_BACK_LEFT);                              //draw into back left buffer
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();                                        //reset projection matrix
  glFrustum(leftCam.leftfrustum, leftCam.rightfrustum,     //set left view frustum
   leftCam.bottomfrustum, leftCam.topfrustum,
   nearZ, farZ);
  glTranslatef(leftCam.modeltranslation, 0.0, 0.0);        //translate to cancel parallax
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  gluLookAt(0, 0, 0,  0, 0, -1*screenZ, 0, 1, 0);
  glPushMatrix();
  {   
   glTranslated(xTranslation,yTranslation,-1*screenZ);//translate to screenplane
   RenderHeightMap(g_HeightMap);
  }
  glPopMatrix();
 }
 else if(nChangeSideView%2 == 1)
 {
  glDrawBuffer(GL_BACK_RIGHT);                             //draw into back right buffer
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();                                        //reset projection matrix
  glFrustum(rightCam.leftfrustum, rightCam.rightfrustum,   //set left view frustum
     rightCam.bottomfrustum, rightCam.topfrustum,
     nearZ, farZ);
  glTranslatef(rightCam.modeltranslation, 0.0, 0.0);       //translate to cancel parallax
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  gluLookAt(0, 0, 0,  0, 0, -1*screenZ, 0, 1, 0);
  glPushMatrix();
  {   glTranslated(xTranslation,yTranslation,-1*screenZ);
   RenderHeightMap(g_HeightMap);
  }
  glPopMatrix();
 } 
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;.實作結果&lt;/u&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbSps9E2tlgIoFpI7xnK7BgzNN7R946sqZf9f_js12u39JaHpEEX9jG6Qzcwk61QBk_M8GS9F42q7kPaLHiLvKXqlkEHz7mM0kfQWj7ZzcM8xjEvziixr0UMNhVlE510y1jd7-j36O1Og/s1600/Left.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbSps9E2tlgIoFpI7xnK7BgzNN7R946sqZf9f_js12u39JaHpEEX9jG6Qzcwk61QBk_M8GS9F42q7kPaLHiLvKXqlkEHz7mM0kfQWj7ZzcM8xjEvziixr0UMNhVlE510y1jd7-j36O1Og/s320/Left.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
圖七, 左眼影像&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7rSW2abZx7MyhD-8dB1camWP776FhTxYOzhw3ZgMgovJTF2_B8C9LogP7DRpaJVX9euQ7HTHEAngZKJpKPDnt6h4LfafeZWbayMYrPwR2XKZ-4jcqRH9TqdACtsi6Cu1RMnu_e1MvNDU/s1600/Right.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7rSW2abZx7MyhD-8dB1camWP776FhTxYOzhw3ZgMgovJTF2_B8C9LogP7DRpaJVX9euQ7HTHEAngZKJpKPDnt6h4LfafeZWbayMYrPwR2XKZ-4jcqRH9TqdACtsi6Cu1RMnu_e1MvNDU/s320/Right.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
圖八, 右眼影像&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
以上為用OpenGL實做左右眼影像, 如果要用DirectX處理的話, 不很確定作法, 網路大概找了一下, 有可能是&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;D3DXMATRIX* WINAPI D3DXMatrixLookAtLH ( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pEye, CONST D3DXVECTOR3 *pAt, CONST D3DXVECTOR3 *pUp )

 // Set up our view matrix. A view matrix can be defined given an eye point,
    // a point to lookat, and a direction for which way is up. Here, we set the
    // eye five units back along the z-axis and up three units, look at the
    // origin, and define &quot;up&quot; to be in the y-direction.
    D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &amp;amp;matView, &amp;amp;vEyePt, &amp;amp;vLookatPt, &amp;amp;vUpVec );
    g_pd3dDevice-&amp;gt;SetTransform( D3DTS_VIEW, &amp;amp;matView );

&lt;/pre&gt;&lt;br /&gt;
&lt;u&gt;4.後續 &lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
如果要利用左右影像做3D影像, 紅藍記得是alpha兩邊都設0.5, 顏色處理一下, 找個想要讓眼睛焦點對上的地方當對位點對好即可,如果是要處理交錯, 就比較麻煩了, X86上可以用render to texture然後從gpu取貼圖到pc做處理, 或者是比較有效率的直接在shader做處理, 後者在OpenGL ES也可以實作, 前者會比較受限於OpenGL ES實作上有困難(至少我做的時候是那樣....哈).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
原帖:&lt;br /&gt;
&lt;a href=&quot;http://arkkk.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html&quot;&gt;http://arkkk.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/1586297088550802165/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1586297088550802165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/1586297088550802165'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/stereoscopic-3d-in-opengl.html' title='Stereoscopic 3D in OpenGL'/><author><name>arkkk</name><uri>http://www.blogger.com/profile/09113024690552715485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoGTuvIHxhCSthnxesFHaVX0jJ5iIP9pxzoJhblXGoNK80srHiwC00jfj77A-MApAnQtZkyjeOK7NvY-0TSnNB-Cucwq5foXnt-KyNTOS6DPDkckI6_ZyzVZ1WZvNWJCQ/s220/head.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWwlmcZvw2DX92QaSdj4kJl4hA0DRvoRLOWps2fnR8zGdXo97akBEIssnGl1iL5-PWGbwM1N3yU6F_e17Sxy_86UQHrMi9g-tsyn0mcAdzi72MPDZjzZ7rWtB3XNSjQKUuFtAwqERcf-8/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-362420590203189987</id><published>2011-09-20T23:56:00.000-07:00</published><updated>2011-09-22T07:59:46.183-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blog"/><title type='text'>程式筆記 - 在Blogger中使用SyntaxHighlighter</title><content type='html'>&lt;div class=&quot;container&quot;&gt;&lt;br /&gt;
SyntaxHighlighter可以解析程式碼,加上行數以及對關鍵字加上顏色處理, 增加程式碼美觀及可讀性.&lt;br /&gt;
&lt;br /&gt;
網址:&lt;br /&gt;
http://alexgorbatchev.com/SyntaxHighlighter/&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
有在部落格貼程式碼的人可以考慮使用, 可以讓程式碼更整齊美觀一點, 下面是有使用跟沒使用的差別...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;使用SyntaxHighlighter&lt;/u&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;class Test : public Parents
{
public:
&amp;nbsp;&amp;nbsp;&amp;nbsp; Test();
&amp;nbsp;&amp;nbsp;&amp;nbsp; ~Test();
public:
&amp;nbsp;&amp;nbsp;&amp;nbsp; int mId;
};
int main()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; Test aa;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;無使用SyntaxHighlighter&lt;/u&gt;&lt;br /&gt;
class Test : public Parents&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
Test();&lt;br /&gt;
~Test();&lt;br /&gt;
public:&lt;br /&gt;
int mId;&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
Test aa;&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;安裝方法:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
官方提供了兩種安裝方法, 沒要特別做修改傳到自己空間的可以使用hosted version&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;1.開啟Blogger設定頁,點選設計-&amp;gt;修改HTML&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;2.找到&amp;lt;/head&amp;gt;, 在前面貼上&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js&#39; type=&#39;text/javascript&#39;/&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;u&gt;3.找到&amp;lt;/body&amp;gt;, 在前面貼上,並存檔跳出設定頁&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;script type=&#39;text/javascript&#39;&amp;gt;
SyntaxHighlighter.all()
&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;u&gt;4.測試,在Blogger文章貼上html&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;pre class=&quot;brush:cpp&quot;&amp;gt;
int main()
{
return 0;
}
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;5.網頁顯示最終結果&lt;/u&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;int main()
{
return 0;
}

&lt;/pre&gt;&lt;br /&gt;
原帖:&lt;br /&gt;
&lt;a href=&quot;http://arkkk.blogspot.com/2011/09/test.html&quot;&gt;http://arkkk.blogspot.com/2011/09/test.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/362420590203189987/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bloggersyntaxhighlighter.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/362420590203189987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/362420590203189987'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/bloggersyntaxhighlighter.html' title='程式筆記 - 在Blogger中使用SyntaxHighlighter'/><author><name>arkkk</name><uri>http://www.blogger.com/profile/09113024690552715485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoGTuvIHxhCSthnxesFHaVX0jJ5iIP9pxzoJhblXGoNK80srHiwC00jfj77A-MApAnQtZkyjeOK7NvY-0TSnNB-Cucwq5foXnt-KyNTOS6DPDkckI6_ZyzVZ1WZvNWJCQ/s220/head.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-5477983264306654603</id><published>2011-09-05T20:35:00.001-07:00</published><updated>2011-09-05T20:35:33.071-07:00</updated><title type='text'>9/6 周年慶</title><content type='html'>滿一年囉&lt;br /&gt;
&lt;br /&gt;
繼續朝目標邁進</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/5477983264306654603/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/96.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5477983264306654603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/5477983264306654603'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/09/96.html' title='9/6 周年慶'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-8116531095612384790</id><published>2011-08-17T08:02:00.001-07:00</published><updated>2011-08-18T19:02:25.559-07:00</updated><title type='text'>林俊傑 - 她說</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/4GjwLVS_W58?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/4GjwLVS_W58?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;320&quot;&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
她說(She Said)&lt;br /&gt;
&lt;br /&gt;
作詞：孫燕姿&lt;br /&gt;
作曲：林俊傑&lt;br /&gt;
&lt;br /&gt;
她靜悄悄地來過 她慢慢帶走沉默&lt;br /&gt;
只是最後的承諾 還是沒有帶走了寂寞&lt;br /&gt;
我們愛的沒有錯 只是美麗的獨秀太折磨&lt;br /&gt;
她說無所謂 只要能在夜裡翻來覆去的時候有寄託&lt;br /&gt;
等不到天黑 煙火不會太完美&lt;br /&gt;
回憶燒成灰 還是等不到結尾&lt;br /&gt;
她曾說的無所謂 我怕一天一天被摧毀&lt;br /&gt;
等不到天黑 不敢凋謝的花蕾&lt;br /&gt;
綠葉在跟隨 放開刺痛的滋味&lt;br /&gt;
今後不再怕天明 我想只是害怕清醒&lt;br /&gt;
&lt;br /&gt;
她靜悄悄地來過 她慢慢帶走沉默&lt;br /&gt;
只是最後的承諾 還是沒有帶走了寂寞&lt;br /&gt;
我們愛的沒有錯 只是美麗的獨秀太折磨&lt;br /&gt;
她說無所謂 只要能在夜裡翻來覆去的時候有寄託&lt;br /&gt;
等不到天黑 煙火不會太完美&lt;br /&gt;
回憶燒成灰 還是等不到結尾&lt;br /&gt;
轉載來自 ※Mojim.com　魔鏡歌詞網 &lt;br /&gt;
她曾說的無所謂 我怕一天一天被摧毀&lt;br /&gt;
等不到天黑 不敢凋謝的花蕾&lt;br /&gt;
綠葉在跟隨 放開刺痛的滋味&lt;br /&gt;
今後不再怕天明 我想只是害怕清醒&lt;br /&gt;
&lt;br /&gt;
等不到天黑 煙火不會太完美&lt;br /&gt;
回憶燒成灰 還是等不到結尾&lt;br /&gt;
她曾說的無所謂 我怕一天一天被摧毀&lt;br /&gt;
等不到天黑 不敢凋謝的花蕾&lt;br /&gt;
綠葉在跟隨 放開刺痛的滋味&lt;br /&gt;
今後不再怕天明 我想只是害怕清醒&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
不怕天明 我想只是害怕清醒</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/8116531095612384790/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/blog-post_17.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/8116531095612384790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/8116531095612384790'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/blog-post_17.html' title='林俊傑 - 她說'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-6494613208959905661</id><published>2011-08-15T18:56:00.001-07:00</published><updated>2011-08-15T18:56:55.324-07:00</updated><title type='text'>蕭煌奇 - 眷戀</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/4X5NGupKVYc?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/4X5NGupKVYc?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;320&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/6494613208959905661/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6494613208959905661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/6494613208959905661'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/blog-post.html' title='蕭煌奇 - 眷戀'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-7477392598223497490</id><published>2011-08-02T17:47:00.001-07:00</published><updated>2011-08-08T06:08:13.483-07:00</updated><title type='text'>TOX主題曲</title><content type='html'>&lt;iframe width=&quot;512&quot; height=&quot;320&quot; src=&quot;http://www.youtube.com/embed/FuOVxH0oLBQ&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;object style=&quot;height: 320px; width: 512px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/83nxPqkSEzE?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/83nxPqkSEzE?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;320&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/7477392598223497490/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/tox.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7477392598223497490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/7477392598223497490'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/08/tox.html' title='TOX主題曲'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/FuOVxH0oLBQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-8219398579516366409</id><published>2011-07-26T19:42:00.001-07:00</published><updated>2011-07-26T19:42:00.534-07:00</updated><title type='text'>小茹 - 愛你不是兩三天</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/7B7a7Av9KTM?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/7B7a7Av9KTM?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;320&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/8219398579516366409/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/07/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/8219398579516366409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/8219398579516366409'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/07/blog-post.html' title='小茹 - 愛你不是兩三天'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4330825877015615693.post-2284330260229272730</id><published>2011-07-20T19:18:00.000-07:00</published><updated>2011-07-20T19:18:43.504-07:00</updated><title type='text'>Diana Krall - the boy from Ipanema</title><content type='html'>&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/F5nrXZiHYbY?version=3&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/F5nrXZiHYbY?version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;512&quot; height=&quot;320&quot;&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdfc-koles.blogspot.com/feeds/2284330260229272730/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://rdfc-koles.blogspot.com/2011/07/diana-krall-boy-from-ipanema.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/2284330260229272730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4330825877015615693/posts/default/2284330260229272730'/><link rel='alternate' type='text/html' href='http://rdfc-koles.blogspot.com/2011/07/diana-krall-boy-from-ipanema.html' title='Diana Krall - the boy from Ipanema'/><author><name>koles</name><uri>http://www.blogger.com/profile/06865450670441798430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEMDxkBp3fsmCnpISBE3q-GQVkTqIAJS8gTFUHdrDeFSNIEJmxJMJXpcfwE8kP1ZAhSw_0yKxb8Uf1BXYRo4adG2IzUuhNDBVbuwOs0CdCNmv-fakYqyp1Yt697IZwqI/s220/DSC07705.JPG'/></author><thr:total>0</thr:total></entry></feed>