<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>perl &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/perl/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sun, 24 Jul 2022 03:44:10 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>perl &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</title>
		<link>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/</link>
					<comments>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 10 Dec 2014 03:25:50 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[.obj]]></category>
		<category><![CDATA[3d Model]]></category>
		<category><![CDATA[banana]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[obj2opengl]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[NDK]]></category>
		<category><![CDATA[Qualcomm]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[JNI]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3403</guid>

					<description><![CDATA[<p>終於來到 Vuforia 記錄的最後一篇了，這篇參考到網路上神人的做法，怎麼把一個 3D model 轉換成 Vuforia 可以使用的 .h 檔，這邊之後都直接使用 Android NDK (JNI&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>終於來到 Vuforia 記錄的最後一篇了，這篇參考到網路上神人的做法，怎麼把一個 3D model 轉換成 Vuforia 可以使用的 .h 檔，這邊之後都直接使用 Android NDK (JNI) 版本來實作，原因在<a rel="noreferrer noopener" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" data-wpel-link="internal">這篇文章</a>。 </p>



<span id="more-3403"></span>



<p><strong>2016-07-07 更新：本篇為 3.x 版本，目前 Vuforia 以更新到 5.5.9，新版本使用方式請參考</strong></p>



<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>


<p>之前小蛙卡了很久，不知道怎麼把 3D model 轉換成 OpenGL 可以繪圖的座標，找到 <a href="http://heikobehrens.net/2009/08/27/obj2opengl/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 的資料後，卻因為一開始使用&nbsp;<a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a>，在編譯上出現「<span style="color: #ff0000;"><strong>The code of method xxx is exceeding the 65535 bytes limit</strong></span>」一直無法解決，直到 &#8230; 改成用&nbsp;<a title="Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 才能正常運作。<br>花了一個下午的時間，看看 <span style="color: #0000ff;"><strong>Blender</strong> </span>是怎麼進行 3D 塑模的動作，發現這似乎需要非常強大的天分才能夠駕馭 &#8230; 不過至少知道透過 <span style="color: #0000ff;"><strong>Blender</strong> </span>可以把其他檔案格式匯入後，再轉出我們需要的<strong><span style="color: #ff0000;"> .obj</span> </strong>格式，雖然可能有些資訊會無法正常呈現，或者一些奇奇怪怪的問題，不過小蛙對這種軟體不是很了解，在這邊遇到問題的捧由只能自己 Google 了。<br>講一下大概的運作方式，首先必須先有 3D model (廢話)，這個 3D model 格式只要是一般常見的 blender, unity, 3dmax &#8230; 等格式，或是你使用的塑模軟體有辦法吃進去並且轉出 .obj 格式都可以，有一點要<strong><span style="color: #ff0000;">特別特別特別注意</span></strong>，Vuforia 繪圖只能<strong><span style="color: #0000ff;">使用一張材質</span></strong>，也就是說如果一個房子有屋頂、牆壁、門、窗戶、地板、煙囪 &#8230; 等等材質，這些材質必須最後轉出成一個檔案，這部份可能要專業的 3D 塑模師才能做到 (小蛙摸了半天，結果令人失望)，如果網路上下載來的專案檔包含了很多不同圖檔，就會發現 Vuforia 只會貼一張圖檔，其他的會變成殘缺樣，解套方案除了上面提到的將多材質轉製成一個影像檔，另一個比較麻煩，實作上也比較困難，就是把模型裡的每個不同貼圖的部份拆出來 (光聽就覺得超麻煩 &#8230;)<br>整個運作流程為：<br>1. 從網路上<span style="color: #0000ff;"><strong>找免費的 3D 模型測試</strong></span> (google <strong><span style="color: #ff00ff;">free 3d model</span></strong> 有很多，不過大多是要註冊會員)，如果自己會建模就可以省掉這麻煩，小蛙用的是 <strong><span style="color: #0000ff;">Blender</span></strong>，根據 <a href="https://zh.wikipedia.org/wiki/Blender" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參3<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;支援匯入的檔案格式有</p>
<div>
<div id="highlighter_196934" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">Collada (.dae)</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Motion Capture (.bvh)</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Scalable Vector Graphics (.svg)</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Stanford (.ply)</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Stl (.stl)</code></div>
<div class="line number6 index5 alt1"><code class="text plain">Autodesk 3ds Max (.3ds)</code></div>
<div class="line number7 index6 alt2"><code class="text plain">Autodesk FBX (.fbx)</code></div>
<div class="line number8 index7 alt1"><code class="text plain">Wavefront (.obj)</code></div>
<div class="line number9 index8 alt2"><code class="text plain">X3D Extensible 3D (.x3d)</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>2. 匯出 (Export) 成 Object <span style="color: #ff0000;"><strong>(.obj)</strong></span> 格式，以 Blender 為例，匯出時必須勾選以下選項</p>
<div>
<div id="highlighter_935560" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">apply Modifiers</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Include Edges</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Write Normals</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Include UVs</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Write Materials</code></div>
<div class="line number6 index5 alt1"><code class="text plain">Object as OBJ Objects</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>3. 下載&nbsp;<a href="http://heikobehrens.net/2009/08/27/obj2opengl/" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參1<span class="wpel-icon wpel-image wpel-icon-6"></span></a>&nbsp;中的轉換程式與範例：<a href="https://github.com/HBehrens/obj2opengl/zipball/master" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">OBJ2OPENGL.ZIP<span class="wpel-icon wpel-image wpel-icon-6"></span></a>，並解壓縮到 <strong><span style="color: #0000ff;">obj2opengl</span> </strong>資料夾，裡面主程式是 <span style="color: #ff0000;"><strong>obj2opengl.pl</strong></span> 以及，banana 跟 cube 兩種範例。<br>4.&nbsp;由於 obj2opengl 是以 <span style="color: #0000ff;"><strong>perl</strong> </span>執行，點選 <a href="http://www.activestate.com/activeperl/downloads" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">參4<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 下載並安裝，安裝過程一直下一步即可，安裝完成後開啟 cmd 輸入 <span style="color: #ff0000;"><strong>perl -v</strong></span> 如果成功安裝可以在這邊看到 perl 的版本細節<br>5. 使用 <span style="color: #0000ff;"><strong>cmd</strong> </span>進入 obj2opengl 資料夾後，輸入「<span style="color: #ff0000;"><strong>perl obj2opengl.pl banana.obj</strong></span>」(如果是用&nbsp;<a title="Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本" href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a> 的話，產出的 .h 檔會因為資料量太大無法把資訊放入 MeshObject.java 中，所以要使用 <a title="Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測" href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a> 才可以進行)，如果訊息如下並且沒看到任何 error 會產生出一個新的 banana.h 並把原本的覆蓋掉</p>
<div>
<div id="highlighter_649985" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">Input file : .\banana.obj</code></div>
<div class="line number2 index1 alt1"><code class="text plain">Output file : .\banana.h</code></div>
<div class="line number3 index2 alt2"><code class="text plain">Object name : banana</code></div>
<div class="line number4 index3 alt1"><code class="text plain">Center : &lt;2289.89534195908, 599.62239347371, -8421.71066976487&gt;</code></div>
<div class="line number5 index4 alt2"><code class="text plain">Scale by : 0.000175074008952644</code></div>
<div class="line number6 index5 alt1"><code class="text plain">----------------</code></div>
<div class="line number7 index6 alt2"><code class="text plain">Vertices : 4032</code></div>
<div class="line number8 index7 alt1"><code class="text plain">Faces : 8056</code></div>
<div class="line number9 index8 alt2"><code class="text plain">Texture Coords : 4420</code></div>
<div class="line number10 index9 alt1"><code class="text plain">Normals : 4032</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>6. 接著參考&nbsp;<a title="Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本" href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a> 中的步驟，banana.h 放到<strong><span style="color: #ff0000;"> jni</span> </strong>目錄下，banana.jpg 放在<span style="color: #ff0000;"><strong> assets</strong> </span>目錄下。<br>7. 修改&nbsp;<span style="color: #0000ff;"><strong>ImageTargets.java</strong></span></p>
<div>
<div id="highlighter_789661" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">loadTextures()</code></div>
<div class="line number2 index1 alt1"><code class="java plain">{</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">//mTextures.add(Texture.loadTextureFromApk("TextureTeapotBrass.png", getAssets()));</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"TextureTeapotBlue.png"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"banana.jpg"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"TextureTeapotRed.png"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mTextures.add(Texture.loadTextureFromApk(</code><code class="java string">"Buildings.jpeg"</code><code class="java plain">, getAssets()));</code></div>
<div class="line number8 index7 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>8. 修改 jni 下的<span style="color: #0000ff;">&nbsp;<strong>ImageTargets.cpp</strong></span></p>
<div>
<div id="highlighter_489019" class="syntaxhighlighter  cpp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="cpp comments">// 在上方加入</code></div>
<div class="line number2 index1 alt1"><code class="cpp preprocessor">#include "banana.h"</code></div>
<div class="line number3 index2 alt2"><code class="cpp comments">// glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotVertices[0]);</code></div>
<div class="line number4 index3 alt1"><code class="cpp comments">// 改成</code></div>
<div class="line number5 index4 alt2"><code class="cpp plain">glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaVerts[0]);</code></div>
<div class="line number6 index5 alt1"><code class="cpp comments">// glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotNormals[0]);</code></div>
<div class="line number7 index6 alt2"><code class="cpp comments">// 改成</code></div>
<div class="line number8 index7 alt1"><code class="cpp plain">glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaNormals[0]);</code></div>
<div class="line number9 index8 alt2"><code class="cpp comments">// glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &amp;teapotTexCoords[0]);</code></div>
<div class="line number10 index9 alt1"><code class="cpp comments">// 改成</code></div>
<div class="line number11 index10 alt2"><code class="cpp plain">glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (</code><code class="cpp keyword bold">const</code> <code class="cpp plain">GLvoid*) &amp;bananaTexCoords[0]);</code></div>
<div class="line number12 index11 alt1"><code class="cpp comments">// glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*) &amp;teapotIndices[0]);</code></div>
<div class="line number13 index12 alt2"><code class="cpp comments">// 改成</code></div>
<div class="line number14 index13 alt1"><code class="cpp plain">glDrawArrays(GL_TRIANGLES, 0, cubeNumVerts);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>9. 開啟 <strong><span style="color: #0000ff;">cmd</span> </strong>到 <span style="color: #ff0000;"><strong>jni</strong> </span>目錄下執行<strong><span style="color: #ff0000;"> ndk-build</span></strong>，沒有任何錯誤的話，重新整理專案後執行即可，上個範例我們把茶壺換成方塊，現在可以換成香蕉了。<br><a title="023.png" href="http://lh6.ggpht.com/-5f6IQkJnRls/VIe6DVSRRQI/AAAAAAAAKnE/5-FVuwLwDKk/s0/023.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img fetchpriority="high" decoding="async" class="pe2-photo aligncenter" title="023.png" src="//lh6.ggpht.com/-5f6IQkJnRls/VIe6DVSRRQI/AAAAAAAAKnE/5-FVuwLwDKk/w500-o/023.png" alt="023.png" width="180" height="320"></a><br><a title="024.png" href="http://lh6.ggpht.com/-9kXLdrvwdKI/VIe6DTlRIBI/AAAAAAAAKnA/BKtUrGsLvOs/s0/024.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="024.png" src="//lh6.ggpht.com/-9kXLdrvwdKI/VIe6DTlRIBI/AAAAAAAAKnA/BKtUrGsLvOs/w500-o/024.png" alt="024.png" width="180" height="320"></a><br>經過這系列的文章，應該都可以把 Qualcomm Vuforia 運行起來，並且支援多重偵測，也有辦法自行把茶壺更換掉、更換貼圖、產出必須的 .h 檔案，下面貼幾張有趣的例子，這是網路上找到的免費 3D model，左上為模型的樣子-一間木屋，看到門開開的，走進去看看，右上為站在門口往裡看的樣子，左下是走進房子往天花板看的樣子，右下是從房子裡面往窗戶外面看的樣子，讓人不禁覺得 Qualcomm Vuforia 好強大啊！</p>
<p style="text-align: center;"><a title="019.png" href="http://lh6.ggpht.com/-ZJhSIoICKS4/VIbKKhRRLtI/AAAAAAAAKmY/40JY93-TkHk/s0/019.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="019.png" src="//lh6.ggpht.com/-ZJhSIoICKS4/VIbKKhRRLtI/AAAAAAAAKmY/40JY93-TkHk/w500-o/019.png" alt="019.png" width="180" height="320"></a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a title="020.png" href="http://lh5.ggpht.com/-1dqBka8tCy4/VIbKKvx8iEI/AAAAAAAAKmU/Qp_vqYQsvCE/s0/020.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="020.png" src="//lh5.ggpht.com/-1dqBka8tCy4/VIbKKvx8iEI/AAAAAAAAKmU/Qp_vqYQsvCE/w500-o/020.png" alt="020.png" width="180" height="320"></a></p>
<p style="text-align: center;"><a title="021.png" href="http://lh3.ggpht.com/-BO2SPVEWOQE/VIbKKkECqyI/AAAAAAAAKmc/3d_RZO7Vh1k/s0/021.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="021.png" src="//lh3.ggpht.com/-BO2SPVEWOQE/VIbKKkECqyI/AAAAAAAAKmc/3d_RZO7Vh1k/w500-o/021.png" alt="021.png" width="180" height="320"></a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a title="022.png" href="http://lh6.ggpht.com/-NqjMOdic-Gg/VIbKLxWUNmI/AAAAAAAAKmk/cxCcd-gHDpU/s0/022.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="022.png" src="//lh6.ggpht.com/-NqjMOdic-Gg/VIbKLxWUNmI/AAAAAAAAKmk/cxCcd-gHDpU/w500-o/022.png" alt="022.png" width="180" height="320"></a></p>


<p><strong>Qualcomm Vuforia&nbsp;</strong><strong>系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a></li><li><a href="https://noter.tw/3347/qualcomm-vuforia-%e6%95%99%e5%ad%b8-2-create-image-target/" data-wpel-link="internal">Qualcomm Vuforia 教學 (2) – Create Image Target</a></li><li><a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a></li><li><a href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a></li><li><a href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a></li><li><a href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li>obj2opengl: convert obj 3D models to arrays compatible with iPhone OpenGL ES @ Heiko Behrens<br>http://heikobehrens.net/2009/08/27/obj2opengl/   (<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">連結已失效</mark>)</li><li><a aria-label=" (在新分頁中開啟)" href="http://www.blender.org/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">blender.org<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a aria-label=" (在新分頁中開啟)" href="https://zh.wikipedia.org/wiki/Blender" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Blender @ 維基百科<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a aria-label=" (在新分頁中開啟)" href="http://www.activestate.com/activeperl/downloads" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">ActivePerl Downloads<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&#062; .obj -&#062; .h</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
