<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>hellz's Blog &amp;&amp; Workshop</title>
	<link>http://hellzblog.egloos.com</link>
	<description>hellz's Blog 2</description>
	<language>ko</language>
	<pubDate>Mon, 26 Oct 2009 16:51:32 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>hellz's Blog &amp;&amp; Workshop</title>
		<url>http://md.egloos.com/img/samplelogo2.gif</url>
		<link>http://hellzblog.egloos.com</link>
		<width>80</width>
		<height>80</height>
		<description>hellz's Blog 2</description>
	</image>
  	<item>
		<title><![CDATA[ [3D][DirectX] Xi5 소스  ]]> </title>
		<link>http://hellzblog.egloos.com/2726972</link>
		<guid>http://hellzblog.egloos.com/2726972</guid>
		<description>
			<![CDATA[ 
  <div style="text-align: center;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200910/27/99/e0052299_4ae5d0bb962a2.jpg" width="500" height="389.095415118" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200910/27/99/e0052299_4ae5d0bb962a2.jpg');" /></div> <a href="http://pds17.egloos.com/pds/200910/27/99/Xi5.zip">Xi5.zip</a><br />
<br />
XI5의 움직임을 구현했던 프로그램의 소스입니다. <br />
<br />
DXUT를 기반으로 작성되어 있습니다. <br />
소스파일들(DXUT포함)과 이미지만 첨부했습니다. <br />
컴파일 하고 싶으시면 프로젝트 만들어서 넣어주세요. <br />
<br />
3D 처음배울 때 짠 습작이라, 여러모로 엉성합니다 --;;<br />
</div><br />
<br />
<div style="text-align: center;">구현방법에 대한 것은 예전에 아래 페이지에 설명한 것을 참고바랍니다. <br />
<a href="http://hellzblog.egloos.com/2343794">[3D][DirectX] 평면위에 굴러가는 주사위</a><br />
<br />
<br />
 </div><br/><br/>tag : <a href="/tag/XI5" rel="tag">XI5</a>,&nbsp;<a href="/tag/DirectX" rel="tag">DirectX</a>,&nbsp;<a href="/tag/DXUT" rel="tag">DXUT</a>,&nbsp;<a href="/tag/소스" rel="tag">소스</a>,&nbsp;<a href="/tag/Source" rel="tag">Source</a>,&nbsp;<a href="/tag/주사위" rel="tag">주사위</a>			 ]]> 
		</description>
		<category>Workshop</category>
		<category>XI5</category>
		<category>DirectX</category>
		<category>DXUT</category>
		<category>소스</category>
		<category>Source</category>
		<category>주사위</category>

		<comments>http://hellzblog.egloos.com/2726972#comments</comments>
		<pubDate>Mon, 26 Oct 2009 16:49:21 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Direct3D] ID3DXSprite로 BillBoard 사용하기 ]]> </title>
		<link>http://hellzblog.egloos.com/2722637</link>
		<guid>http://hellzblog.egloos.com/2722637</guid>
		<description>
			<![CDATA[ 
  몇년전 DX가지고 이런말 하는 것도 우습지만, DX가 버전업하면서 <br />
단순한 스크린평면에 텍스쳐를 뿌리는 것뿐이었던 ID3DXSprite가 여러가지 기능을 탑재하게 되었습니다. <br />
<br />
그중 빌보드를 구현할 수 있다는 내용도 포함되어 있죠. <br />
예전에는 기능이 있다는 것만 알고 넘어갔는데<br />
얼마 전 수업에서 언급되었길래 한번 사용법을 찾아봤습니다... <br />
<br />
<br />
당연히 3D상에서 빌보드효과를 위해선 월드좌표상에서 텍스쳐를 뿌려야겠죠...<br />
(g_SP가 ID3DXSprite 객체입니다. D3DXCreateSprite로 생성합니다.)<br />
<br />
g_SP-&gt;Begin(D3DXSPRITE_BILLBOARD | D3DXSPRITE_OBJECTSPACE);<br />
<br />
그리고 출력을 합니다. <br />
 <br />
g_SP-&gt;Draw(g_pTxFloor, NULL, NULL, NULL, 0xffffffff);<br />
<br />
<br />
당연히 제대로 출력될 리가 없죠...<br />
BillBoard는 항상 카메라를 향하며 회전하므로, 그에 대한 정보를 넣어줘야 하니깐요. <br />
카메라 정보를 전달해 주는 것은 SetWorldViewLH메소드가 맡고 있습니다. <br />
<br />
 g_SP-&gt;SetWorldViewLH(NULL, &amp;mxView);<br />
<br />
<br />
문제는 SetWorldViewLH의 호출 위치입니다!!!<br />
이 함수는 Begin과 End내에서 호출하면 실패하게 됩니다. <br />
반드시 <span style="font-weight: bold; color: rgb(255, 0, 0);">Begin 앞</span>에서 호출해줘야 합니다!!!<br />
<br />
이것때문에 좀 해맸네요...<br />
빌어먹을... MSDN에도 명시되어 있지 않습니다... <br />
<br />
<br />
<br />
몇가지 유추한 것들을 적자면<br />
<br />
SetWorldView의 WorldMatrix는 BillBoard에선 사용하지 않는 듯 싶습니다. 값변화가 적용되지 않습니다. <br />
대신 위치를 지정할땐, Draw의 Position Vector로 입력해주면 됩니다. <br />
또한 빌보드의 회전축은 기본적으로 이미지의 좌하단입니다. (Draw시 NULL 입력할때)<br />
<br />
정상적인 빌보드로 사용할려면 이미지의 중심을 센터로 잡아줘야 하는데,<br />
이때의 좌표값은 텍스쳐의 물리적 위치입니다. (일반적으로 1.0으로 맵핑되는 방식이 아닙니다.)<br />
예를 들어 512x512이미지라면 256, 256를 넣어줘야 중심으로 지정됩니다. <br />
<br />
그리고 월드스페이스상의 메쉬의 크기는 별도의 지정하는 게 안보이고<br />
상대적으로 매우 커지는 것으로 봐선, 이미지의 크기만큼 메쉬를 생성하는게 아닐까 싶네요. <br />
적당히 스케일해줘야겠죠... 자세한건 실험해보거나 문서를 찾아보면 되겠죠... <br />
<br />
<br />
써 본 감상으로는.... <br />
그냥 빌보드 오브젝트 따로 만들어서 쓰고 말겠습니다.... <br />
만드는 것도 간단하고, 다른 메쉬들과 호환성도 유지할 수 있고 말이죠... 커스텀도 가능하고...<br />
<br />
외국쪽에서도 그렇고, 자료 정말 없네요.....<br />
하긴 그다지 필요 없어보이긴 하죠 --;;;<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br/><br/>tag : <a href="/tag/ID3DXSprite" rel="tag">ID3DXSprite</a>,&nbsp;<a href="/tag/SetWorldViewLH" rel="tag">SetWorldViewLH</a>,&nbsp;<a href="/tag/D3DXSPRITE_BILLBOARD" rel="tag">D3DXSPRITE_BILLBOARD</a>,&nbsp;<a href="/tag/D3DXSPRITE_OBJECTSPACE" rel="tag">D3DXSPRITE_OBJECTSPACE</a>			 ]]> 
		</description>
		<category>Programming</category>
		<category>ID3DXSprite</category>
		<category>SetWorldViewLH</category>
		<category>D3DXSPRITE_BILLBOARD</category>
		<category>D3DXSPRITE_OBJECTSPACE</category>

		<comments>http://hellzblog.egloos.com/2722637#comments</comments>
		<pubDate>Fri, 23 Oct 2009 14:59:47 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [COMPUTER] PC에서 위모트를 쓰자(Wii remote with WIDCOMM Stack] ]]> </title>
		<link>http://hellzblog.egloos.com/2488187</link>
		<guid>http://hellzblog.egloos.com/2488187</guid>
		<description>
			<![CDATA[ 
  위드컴 스택(WIDCOMM Stack]을 사용하는 블루투스 동글과 PC를 페어링 하는 방법입니다. <br />
<br />
많은 글들이 블루소레일이나 도시바스택을 이용하던데, 위드컴스택도 잘 작동하더군요. <br />
위키에서 호환성을 살펴보면 같은 칩셋/스택을 쓰더라도, <br />
인식여부가 틀린 경우도 있는듯 합니다. <br />
<br />
제조사마다 제공되는 스택이 다르기는 하나 <br />
동글의 VID와 PID를 이용해서 강제로 인식시킬 수 있으니 스택은 원하는데로 설치하는게 좋겠죠. <br />
<br />
제가 구입한 동글은 유니콘의 BW-200U입니다. (사진은 다른 포스팅을 참조)<br />
브로드컴의 2045 칩을 사용했으며, 스택버전은 4.0.1.2900입니다. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200909/14/99/e0052299_4aad29d0ad26c.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200909/14/99/e0052299_4aad29d0ad26c.jpg');" /></div>우선 작업표시줄 우측의 아이콘을 클릭하여 블루투스 환경을 띄웁니다. <br />
페어링을 위해선 좌측의&nbsp; 'Bluetooth 설정 마법사'를 클릭해 줍니다. <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2a16186c0.jpg" width="500" height="319.112627986" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2a16186c0.jpg');" /></div>그러면 다음과 같은 창이 뜹니다. <br />
간단하게 설정하기 위해 2번째항목을 선택한 후 다음으로 넘어갑니다. <br />
다음을 누루기전에 위모트의 1번과 2번버튼을 동시에 눌러 페어링을 준비하는 것을 추천합니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2ae4a256c.jpg" width="500" height="319.112627986" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2ae4a256c.jpg');" /></div>다음과 같이 닌텐도 어쩌구하면서 위모트가 검색된걸 알 수 있습니다. <br />
만약에 위모트가 검색되지 않으면, 위모트의 1번과 2번버튼을 누른체 다시 검색을 해줍니다. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2a3967ec4.jpg" width="500" height="319.112627986" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2a3967ec4.jpg');" /></div>위모트를 선택한 뒤, 다음으로 넘어가면 PIN코드 생성하는 창으로 넘어가게 됩니다. <br />
이 부분이 중요한데,<span style="font-weight: bold; text-decoration: underline;"> "쌍 생성 건너 뛰기"</span>를 클릭해서, PIN체크를 건너 뜁니다. <br />
위모트에는 PIN코드가 없다고 하네요. <br />
그러니 임의로 PIN를 입력해서 생성하면 페어링이 실패하게 됩니다. <br />
다른 스택들에서도 PIN코드를 설정하는 부분이 나오면, 입력하지 말고 건너뛰시기 바랍니다. <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200909/14/99/e0052299_4aad2bcd0aa0b.jpg" width="500" height="319.112627986" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200909/14/99/e0052299_4aad2bcd0aa0b.jpg');" /></div>이제 사용할 서비스를 검색하는 화면이 나옵니다. <br />
여기서도 하나 중요한건 마침버튼이 활성화 되었다고 클릭하면 안됩니다. <br />
그대로 놔둡니다. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2c15b98f0.jpg" width="500" height="319.112627986" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/14/99/e0052299_4aad2c15b98f0.jpg');" /></div>조금 기다리면 다음과 같이 인터페이스 서비스가 뜨게 됩니다. <br />
이제 이 항목을 선택한 뒤, 마침을 클릭하면 페어링에 성공하게 됩니다. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/14/99/e0052299_4aad2c0c4ff6e.jpg" width="406" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/14/99/e0052299_4aad2c0c4ff6e.jpg');" /></div>다음과 같에 페이링에 성공하였습니다. <br />
사용한 블루투스 동글은 수신거리가 상당히 길더군요. <br />
집밖의 블루투스 장비로 찾아내고, 문 밖에 위모트를 놔두더라도 연결이 끊기짆 않습니다. <br />
그러나 위치를 이동하면 신호세기가 일시적으로 약해지더군요. <br />
물론 사용하는데 지장은 없습니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/14/99/e0052299_4aad2ca67ab1e.jpg" width="357" height="322" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/14/99/e0052299_4aad2ca67ab1e.jpg');" /></div>WiiInRemote화면입니다. <br />
순조롭게 수신이 되는것을 알수 있습니다. <br />
<br />
<br />
<br />
나중에 시간내서 LED로 IR바를 만들어봐야겠네요. <br />
<br />
<br/><br/>tag : <a href="/tag/위모트" rel="tag">위모트</a>,&nbsp;<a href="/tag/PC" rel="tag">PC</a>,&nbsp;<a href="/tag/wii" rel="tag">wii</a>,&nbsp;<a href="/tag/remote" rel="tag">remote</a>,&nbsp;<a href="/tag/bluetooth" rel="tag">bluetooth</a>,&nbsp;<a href="/tag/BW-200U" rel="tag">BW-200U</a>,&nbsp;<a href="/tag/페어링" rel="tag">페어링</a>			 ]]> 
		</description>
		<category>etc Infomation</category>
		<category>위모트</category>
		<category>PC</category>
		<category>wii</category>
		<category>remote</category>
		<category>bluetooth</category>
		<category>BW-200U</category>
		<category>페어링</category>

		<comments>http://hellzblog.egloos.com/2488187#comments</comments>
		<pubDate>Sun, 13 Sep 2009 17:35:30 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [COMPUTER] XP에서 블루투스 싱크[ ActiveSync with WIDCOMM Stack] ]]> </title>
		<link>http://hellzblog.egloos.com/2487646</link>
		<guid>http://hellzblog.egloos.com/2487646</guid>
		<description>
			<![CDATA[ 
  비스타 상에선 블루투스로 엑티브 싱크하는게 쉬운듯 합니다만<br />
XP, 정확히는 엑티브싱크 4.5에서 싱크하는건 조금 손이 가는 듯합니다. <br />
(엑티브싱크에는 블루투스로 싱크한다는 메뉴가 없죠.)<br />
<br />
일단 대략적인 기본틀은 맞다고 생각하지만, 끝내고 쓰는거라 빼먹은게 있을지도 모르겠네요. <br />
<br />
<br />
많이 쓰는 블루투스 스택(PC에서 블루투스기기의 접속을 관리하는 프로그램)은 3가지 정도 있는 듯합니다. <br />
도시바스택, 블루소레일, 위드컴. <br />
제 동글에서 기본으로 제공한 프로그램은 위드컴이므로, 여기서 접속법을 써볼려고 합니다. <br />
다른 스택들의 접속법은 검색하면 자세한 글을 찾을 수 있을겁니다. <br />
<br />
사실 기본원리는 비슷하다고 볼수 있죠. <br />
<br />
기본적으로 싱크요청은 PC상이 아니라, 모바일 기기에서 해야 합니다. <br />
왜냐하면 엑티브싱크에선 블루투스로 싱크하라는 설정 및 메뉴가 없기때문이죠. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8d8e9fd5f.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8d8e9fd5f.jpg');" /></div>우선 블루투스창을 띄웁니다.<br />
보통 작업표시줄의 오른쪽에 블루투스 아이콘을 더블클릭하면 뜨죠. <br />
블루소레일이나 도시바스택과는 퍽 다르죠?<br />
여기서 좌측의 구성보기 또는 수정을 클릭합니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8dd7b07ac.jpg" width="500" height="379.213483146" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8dd7b07ac.jpg');" /></div>화면과 같은 블루투스 설정창이 뜹니다. <br />
이걸보면 알수 있듯이 위드컴의 스택은 다른 스택들과 틀리게 독자적인 UI를 쓰지 않고 <br />
위도우의 기본프로그램들과 비슷한 모습을 하고 있는 걸 알수 있죠. <br />
여기서 로컬서비스탭을 클릭합니다. <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8e302c527.jpg" width="500" height="379.213483146" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8e302c527.jpg');" /></div>항목들을 보시면 엑티브싱크가 있는 것을 알 수 있습니다. <br />
여기 우측에 있는 COM포트를 잘 기역해 둡시다. <br />
만약 포트를 변경하고 싶으면 등록정보에 들어가서 원하는 포트로 변경할 수 있습니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8e865c1da.jpg" width="366" height="321" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/13/99/e0052299_4aac8e865c1da.jpg');" /></div>다음은 엑티브싱크를 엽니다. <br />
파일메뉴의 연결설정을 클릭합니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200909/13/99/e0052299_4aac8ea7148f3.jpg" width="381" height="325" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200909/13/99/e0052299_4aac8ea7148f3.jpg');" /></div>연결설정 창이 뜨면 <br />
'다음 중 한가지 연결 허용'에 체크해 준뒤, <br />
스택에서 알아낸 포트를 설정해 줍니다. <br />
<br />
<br />
여기까지 설정하면 PC에서 할 일은 없습니다. <br />
나머지는 모바일 기기에서 설정해주는 것뿐입니다. 제 경우는 블랙잭(M620)입니다. <br />
<br />
모바일 기기에서 블루투스를 활성화 시키고, PC와 페어링을 시킵니다.(이 과정은 묘사하지 않겠습니다)<br />
중요한건 페어링과정중 사용할 서비스를 선택하는 것입니다.<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8fa05fa70.jpg" width="500" height="507.26744186" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8fa05fa70.jpg');" /></div>PC에서 제대로 설정했다면 위와 같이 엑티브싱크가 서비스에 뜹니다. <br />
만약에 뜨지 않으면 메뉴를 눌러 새로고침을 해보고, 그러고도 뜨지 않으면 PC설정을 다시 해봐야합니다. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200909/13/99/e0052299_4aac8f92b2b38.jpg" width="500" height="565.485362096" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200909/13/99/e0052299_4aac8f92b2b38.jpg');" /></div><br />
이 화면은 PC에서 제대로 설정하지 않았을때 입니다. <br />
보시는것과 같이 엑티브싱크가 직렬포트로 표시되죠. 이 상태에선 엑티브싱크가 되지 않습니다. <br />
<br />
<br />
<br />
이런식으로 페어링 설정을 마친후 모바일기기에서 엑티브싱크를 띄웁니다. <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8f883a2e8.jpg" width="500" height="516.961651917" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac8f883a2e8.jpg');" /></div>메뉴를 눌러 Bluetooth를 통해 연결을 눌러주면 됩니다. <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac904c4305d.jpg" width="500" height="496.307237814" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/13/99/e0052299_4aac904c4305d.jpg');" /></div>다음과 같이 엑티브싱크가 성공했습니다. <br />
만약 파트너관계가 어쩌구 나오면 페어링을 다시 해줍니다. <br />
<br />
페어링에 관한 자세한 묘사는 제외하였습니다. <br />
당연히 페어링중에는 PC에서 해당 연결에 대해 접속승인을 해주어야 합니다. <br />
이것은 작업표시줄 우측에서 알림창으로 접근상황을 알려주니, <br />
블루투스 아이콘을 클릭후 승인해주면 됩니다. <br />
<br />
이건 짐작이지만 엑티브싱크에선 블루투스로의 직접적인 연결을 하지 못하고 <br />
USB나 직열포트로만 싱크가 가능하기때문에, 스택에서 페어링후, 해당포트로 포팅해주는게 아닐까 싶습니다. <br />
그러므로 싱크요청은 반드시 모바일기기를 통해서만 가능한 듯 한네요. <br />
<br />
그리고 블루투스 페어링을 위해선 USB로 싱크해야 한다는 글도 있는데, <br />
확실한지는 모르겠네요. 이미 USB로 싱크해본 상태에서 시도했기때문에 확인이 불가능합니다. <br />
그리고 위의 짐작이 맞다면 USB로 싱크하는 것과는 별로 상관이 없어보이네요. <br />
<br />
<br />
사실 블랙잭을 쓴지 1년 가까이 되가지만 아직까지 엑티브싱크를 사용하진 않았습니다. <br />
예전 3850를 쓴땐 뉴스나 날씨, 백업을 위해 자주 싱크했는데 말이죠.<br />
지금은 백업은 Sprite Backup를 통해 가능하고, outlook를 관리하는 것도 귀찮고, <br />
뉴스같은건 무선랜으로 볼수 있으니, 그다지 필요성을 못느끼겠더군요. <br />
<br />
이번에 싱크에 도전한건 단순히 메모리카드를 빼지 않고 파일전송을 위해서였지만 <br />
이게 상당히 느리네요. 그렇다고 OBEX FTP는 대용량 파일은 전송이 안되는 듯하고요. <br />
저용량이나 한가할땐만 쓰고, 바쁠땐 메모리카드에 직접 조작해야 할듯 합니다.<br />
<br/><br/>tag : <a href="/tag/M620" rel="tag">M620</a>,&nbsp;<a href="/tag/ActiveSync" rel="tag">ActiveSync</a>,&nbsp;<a href="/tag/엑티브싱크" rel="tag">엑티브싱크</a>,&nbsp;<a href="/tag/블랙잭" rel="tag">블랙잭</a>,&nbsp;<a href="/tag/WIDCOMM" rel="tag">WIDCOMM</a>,&nbsp;<a href="/tag/Stack" rel="tag">Stack</a>,&nbsp;<a href="/tag/페어링" rel="tag">페어링</a>,&nbsp;<a href="/tag/싱크" rel="tag">싱크</a>			 ]]> 
		</description>
		<category>etc Infomation</category>
		<category>M620</category>
		<category>ActiveSync</category>
		<category>엑티브싱크</category>
		<category>블랙잭</category>
		<category>WIDCOMM</category>
		<category>Stack</category>
		<category>페어링</category>
		<category>싱크</category>

		<comments>http://hellzblog.egloos.com/2487646#comments</comments>
		<pubDate>Sun, 13 Sep 2009 06:38:51 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [BUY] 블루투스 동글/위모트 구입 + a ]]> </title>
		<link>http://hellzblog.egloos.com/2486920</link>
		<guid>http://hellzblog.egloos.com/2486920</guid>
		<description>
			<![CDATA[ 
  <br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds17.egloos.com/pds/200909/12/99/e0052299_4aab1f2f46471.jpg" width="500" height="502.923976608" onclick="Control.Modal.openDialog(this, event, 'http://pds17.egloos.com/pds/200909/12/99/e0052299_4aab1f2f46471.jpg');" /></div><br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/12/99/e0052299_4aab1f7d3946b.jpg" width="500" height="334.545454545" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/12/99/e0052299_4aab1f7d3946b.jpg');" /></div>블루투스 어댑터입니다. 보통 동글이라고도 하죠. <br />
일단 위모트를 PC에서 쓰기 위해서 몇몇 제품을 찾아봤는데, <br />
외국의 위키에 있는 호환리스트에서 국내에 시판중인 제품을 찾을 수 없더군요. <br />
<br />
처음엔 빌리x트 class1을 구입할까 했는데, 외국본사홈페이지에서 정보를 찾을 수 없었습니다. <br />
class1 이란 제품명으로 판매되는 제품도 있긴 한데, 국내에서 풀리는 것과 형태가 전혀 달랐죠.<br />
이런저런 이유로 꺼려져서 제외... (참고로 외국제품은 형태도 틀리고 외부 안태나가 있음)<br />
<br />
그 다음에 찾게 된 제품이 이 제품입니다. 유니콘에서 나온 BW-200U... <br />
가격도 소형 동글(아주 작은 동글들)에 비해 별 차이가 안나는데다가 <br />
class1 성능을 자랑합니다. 크기도 초소형 USB메모리와 비슷하므로 이동성도 크게 다르지 않죠. <br />
일단 잠시 써봤는데 괜찮은거 같네요.. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds16.egloos.com/pds/200909/12/99/e0052299_4aab21bac5480.jpg" width="500" height="564.439140811" onclick="Control.Modal.openDialog(this, event, 'http://pds16.egloos.com/pds/200909/12/99/e0052299_4aab21bac5480.jpg');" /></div>위모트와 눈차크입니다. <br />
블루투스 동글로 PC에서 쓰기 위해 구입했습니다. 물론 Wii는 보유하고 있지 않죠 --;<br />
애들은 저번달에 있던 인터파크 이벤트로 시세보다 싸게 구입했습니다. <br />
매일 추첨으로 포인트를 지급해주는 이벤트였죠.. <br />
처음에 5000포인트. 매일 추첨으로 100~ 포인트를 받을 수 있었습니다. <br />
매일 한번씩 찍으니, 구입 전까지 12200포인트를 받을 수 있었습니다. <br />
그래서 쿠폰 할인을 포함해서 위모트는 21280원(정가 28000) 눈차크 11400(정가 15000)에 구입.. .<br />
남은 포인트로는 여신전생FES3 를 구입했죠. <br />
<br />
<br />
결과만 쓰자면 위모트 인식은 비교적 쉽게 성공했습니다. <br />
동글에 제공된 WIDCOMM 블루투스 스택만으로 쉽게 인식되더군요. <br />
이것에 대해선 나중에 쓰죠.. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200909/12/99/e0052299_4aab23ba8a090.jpg" width="410" height="588" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200909/12/99/e0052299_4aab23ba8a090.jpg');" /></div>동글과 같은 시기에 구입한 4G 메모리입니다. <br />
음악과 강의녹음으로 쓰던 mp3를 잊어먹어서, 블랙잭으로 대용하기 위해 큰 메모리를 주문했습니다. <br />
LG브렌드가 그다지 믿음직스럽지는 않지만, class6에 가격도 저렴한 편이어서 그냥 주문했습니다. <br />
원래는 샌디스크껄 살려고 했는데, 남은 인터파크 포인트를 샌디스크 코리아 제품에선 쓸 수 없더군요 --;;<br />
<br />
<br />
<br />
이제 몇일은 그동안 방치한 블로그에  집중적으로 포스팅이나 해야겠네요.. <br />
이건 몇일이나 갈려나 --;<br />
<br/><br/>tag : <a href="/tag/BW-200U" rel="tag">BW-200U</a>,&nbsp;<a href="/tag/4G" rel="tag">4G</a>,&nbsp;<a href="/tag/SDHC" rel="tag">SDHC</a>,&nbsp;<a href="/tag/위모트" rel="tag">위모트</a>,&nbsp;<a href="/tag/wii" rel="tag">wii</a>			 ]]> 
		</description>
		<category>Talk</category>
		<category>BW-200U</category>
		<category>4G</category>
		<category>SDHC</category>
		<category>위모트</category>
		<category>wii</category>

		<comments>http://hellzblog.egloos.com/2486920#comments</comments>
		<pubDate>Sat, 12 Sep 2009 04:34:12 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Irrlicht] 3D Cube 구현 ]]> </title>
		<link>http://hellzblog.egloos.com/2432173</link>
		<guid>http://hellzblog.egloos.com/2432173</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b49bb116f.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b49bb116f.jpg');" /></div><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b4ace8680.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b4ace8680.jpg');" /></div><br />
<br />
이전글에 이어서 3D Cube의 구현에 대해 써보자 합니다. <br />
<br />
이전글을 보시면 아시겠지만, 큐브의 조작은 마우스로만 이루어집니다. <br />
즉, 마우스 입력을 큐브회전으로 변환하는 것이 핵심이죠. <br />
그러므로 잡다한 자료구조나, 구조는 제외하고 이것에 대해서만 포스팅하겠습니다. <br />
<br />
<br />
<br />
우선 하나의 면을 클릭해보죠. <br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b569d103b.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54b569d103b.jpg');" /></div>스샷에서 하얀색으로 표시된 부분이 클릭한 면입니다. <br />
그리고 이때&nbsp; 마우스로 조작할 수 있는 회전은 3가지입니다. (반대방향은 제외)<br />
하늘색면을 회전, 녹색면을 회전, 분홍색면을 회전이죠. <br />
<br />
<br />
하늘색면의 회전에 대해서 생각해 보도록 합시다. <br />
아까의 위치를 클릭하였을 때, 4개의 벡터를 얻을 수 있습니다. <br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200907/09/99/e0052299_4a54b6ce220ea.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200907/09/99/e0052299_4a54b6ce220ea.jpg');" /></div>이 4개의 벡터중 하나를 이용해서 회전하고자 하는 면을 선별하는 것입니다.<br />
이 벡터들은 클릭한 조각의 각각 면의 법선을 의미합니다. <br />
<br />
<br />
그리고 조각을 선택한 상태에서 왼쪽으로 마우스를 움직여보죠.&nbsp; <br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200907/09/99/e0052299_4a54b76a6cb4f.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200907/09/99/e0052299_4a54b76a6cb4f.jpg');" /></div>그러면 처음에 마우스를 클릭한 지점부터, 마우스를 땐 지점까지 <br />
붉은색 화살표와 같은 벡터를 얻을 수 있습니다. <br />
그리고 이 벡터를 기초로, 아까구한 4개의 벡터 중, 가장 유사한 하나의 벡터를 선별합니다. <br />
[선별하는건 일반적인 피킹과정과 유사합니다. 붉은 화살표는 카메라좌표계의 벡터이므로 <br />
&nbsp;이것을 선택한 조각의 로컬좌표계로 이동시킨후, 가장 가까운 벡터를 찾는 것이죠. ]<br />
[가장 가까운 벡터를 찾는 것도 간단합니다. 각각의 노멀벡터를 하나의 위치로서 사용하여<br />
&nbsp;변환한 붉은 벡터의 노멀(이것또한 위치로 사용)과 가장 가까운 벡터를 찾으면 됩니다.)<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200907/09/99/e0052299_4a54b9cf4a3a3.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200907/09/99/e0052299_4a54b9cf4a3a3.jpg');" /></div>선별된 벡터와 클릭지점의 노멀벡터를 사용하면 회전하고자 하는 면들을 구합니다.<br />
상단에 검은 사각형들이 바로 이번 입력에 의해 회전될 사각형들입니다. <br />
<br />
<br />
그렇다면 회전축을 찾아야겠죠?<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54ba136088d.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200907/09/99/e0052299_4a54ba136088d.jpg');" /></div>회전축 찾은 것또한 간단하죠. <br />
단순히 위에서 구한 벡터 2개의 외적으로 구해지는 범선벡터를 사용하는 것입니다. <br />
외적으로 회전축을 구하는 것은 또 하나의 이득이 있습니다. <br />
반대로 드래그했다면 파랑색벡터는 반대방향이 되어있을 것입니다. <br />
이들의 외적은 녹색벡터와 반대방향이 되어있겠죠. <br />
당연히 녹색벡터의 반대방향 벡터로 회전을 하면 반대로 회전하게 됩니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200907/09/99/e0052299_4a54baf42bcff.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200907/09/99/e0052299_4a54baf42bcff.jpg');" /></div>이러식으로 구해진 큐브조각을 정해진 회전축으로 회전시키면 큐브가 회전하게 됩니다. <br />
이렇게 만든 루틴은 녹색을 회전할때도 같은 방법으로 회전이 가능합니다. <br />
<br />
<br />
이러한 방식이 통하지 않는 건 분홍색면을 회전할 때가 됩니다. <br />
일반적으로 분홍색면을 클릭하고 분홍색을 회전한다면, 마우스로 원을 그리는게 타당하겠죠. <br />
만약 이 기능을 넣는다면 마우스의 회전을 감지하고, 클릭한 면의 노멀로 회전. <br />
그리고 다른 면의 노멀로, 회전할 조각을 검색하는것으로 구현이 가능하겠죠. <br />
<br />
그러나 분홍색과 녹색을 포함한 조각을 밑으로 내리는게 마우스 동선이 더 짧기도 합니다. <br />
또 별개의 마우스 움직임을 추가하면, 움직임 판정이 미묘해 질 가능성도 있겠죠. <br />
그래서 이러한 회전은 구현에서 제외하였습니다. (슬슬 다음계획으로 넘어가고 싶었고;;)<br />
<br />
<br />
이렇게 회전처리를 하면 카메라 위치와 관계없이, 동일한 룰로 회전을 처리할 수 있습니다. <br />
카메라의 위치와 관계없이 직관적으로 큐브를 조각할 수 있는 것이죠. <br />
<br />
<br />
<br />
<a href="http://pds11.egloos.com/pds/200907/09/99/3DCubeSource.zip">3DCubeSource.zip</a> 소스입니다. <br />
일리히트 엔진을 이용하였습니다. 일리히트엔진을 알아보는 김에 한번 작업해봤습니다.<br />
처음 써본거라 조작에 미숙한 점이 있더라도 향해바랍니다 ^^;<br />
<br />
참고로 만약에 DirectX나 OPEN GL등의 과제로 쓴다면 거의 다 뜯어고쳐야 할겁니다.<br />
(보통 3D수업은 API레벨일테니, 과제용으로 써먹기 힘들거 같아서 공개하는거죠 ㅎㅎ)<br />
<br />
<br />
<br />
학기말 텀프로젝트때, 큐브만든다는 친구가 있었는데, 재미있어보여서 한번 짜봤습니다. <br />
혹시 다음학기때, 인공지능땜에 써먹을 수 있을지 모르겠네요;;<br />
<br/><br/>tag : <a href="/tag/3D" rel="tag">3D</a>,&nbsp;<a href="/tag/Cube" rel="tag">Cube</a>,&nbsp;<a href="/tag/Irrlicht" rel="tag">Irrlicht</a>,&nbsp;<a href="/tag/알고리즘" rel="tag">알고리즘</a>,&nbsp;<a href="/tag/회전" rel="tag">회전</a>			 ]]> 
		</description>
		<category>Workshop</category>
		<category>3D</category>
		<category>Cube</category>
		<category>Irrlicht</category>
		<category>알고리즘</category>
		<category>회전</category>

		<comments>http://hellzblog.egloos.com/2432173#comments</comments>
		<pubDate>Wed, 08 Jul 2009 16:04:51 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Irrlicht] 3D Cube ]]> </title>
		<link>http://hellzblog.egloos.com/2432090</link>
		<guid>http://hellzblog.egloos.com/2432090</guid>
		<description>
			<![CDATA[ 
  <div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200907/08/99/e0052299_4a54b2b5391dd.jpg" width="500" height="396.284829721" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200907/08/99/e0052299_4a54b2b5391dd.jpg');" /></div><div style="text-align: center;"><a href="http://pds10.egloos.com/pds/200907/08/99/3DCube.zip">3DCube.zip</a><br />
 3D 큐브입니다. <br />
마우스로 원하는 면을 드레그하면 회전하도록 되어있습니다. <br />
오른쪽클릭으로 큐브를 회전할 수 있습니다. <br />
<br />
제목 그대로 큐브의 움직임만 재현한 프로그램입니다. <br />
목표가 움직임 재현이어서, 큐브를 섞거나, 푸는 등의 부가기능은 넣지 않았습니다. <br />
사실 남은 부가기능은 잔 작업이니 말이죠 --; ( 푸는 법은 좀 연구해야겠지만;;)<br />
</div><br />
<div style="text-align: center;">구현에 관한 사항은 별도로 올릴 생각입니다. <br />
</div><br />
<br />
<br/><br/>tag : <a href="/tag/큐브" rel="tag">큐브</a>,&nbsp;<a href="/tag/Irrlicht" rel="tag">Irrlicht</a>,&nbsp;<a href="/tag/3D" rel="tag">3D</a>			 ]]> 
		</description>
		<category>Workshop</category>
		<category>큐브</category>
		<category>Irrlicht</category>
		<category>3D</category>

		<comments>http://hellzblog.egloos.com/2432090#comments</comments>
		<pubDate>Wed, 08 Jul 2009 14:59:01 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [3D][DirectX] Picking ]]> </title>
		<link>http://hellzblog.egloos.com/2421787</link>
		<guid>http://hellzblog.egloos.com/2421787</guid>
		<description>
			<![CDATA[ 
  과제로 작성한 피킹입니다. 상당히 예전에 작성한거죠.. <br />
<br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200906/27/99/e0052299_4a4626111771b.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200906/27/99/e0052299_4a4626111771b.jpg');" /></div><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200906/27/99/e0052299_4a46262312805.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200906/27/99/e0052299_4a46262312805.jpg');" /></div><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/27/99/e0052299_4a46262d638b5.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/27/99/e0052299_4a46262d638b5.jpg');" /></div><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/27/99/e0052299_4a462639aa9b9.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/27/99/e0052299_4a462639aa9b9.jpg');" /></div><br />
<br />
<br />
<a href="http://pds12.egloos.com/pds/200906/27/99/LabProject.exe">LabProject.exe</a><br />
<br />
클릭하면 카메라가 해당오브젝트의 뒤로 이동하게 되어, 제어할 수 있습니다. <br />
피킹방법이야 여러 책에서 단골로 등장하니깐요. <br />
간단히 요약해 놓자면 <br />
스크린좌표를  카메라좌표계로 변환하여 카메라에서 해당방향으로 뻗어나가는 Ray를 <br />
생성하고 이것을 필요에 따라 월드좌표계 -&gt; 로컬좌표계로 변환시켜서 사용하게 됩니다. <br />
<br />
DX샘플보면 오브젝트의 전체 폴리곤에 대해 피킹하는 예제를 볼 수 있습니다. <br />
<br />
D3DX에서 제공하는 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CH3%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:WordDocument>  <w:View>Normal</w:View>  <w:Zoom>0</w:Zoom>  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>  <w:ValidateAgainstSchemas/>  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>  <w:Compatibility>   <w:SpaceForUL/>   <w:BalanceSingleByteDoubleByteWidth/>   <w:DoNotLeaveBackslashAlone/>   <w:ULTrailSpace/>   <w:DoNotExpandShiftReturn/>   <w:AdjustLineHeightInTable/>   <w:BreakWrappedTables/>   <w:SnapToGridInCell/>   <w:WrapTextWithPunct/>   <w:UseAsianBreakRules/>   <w:DontGrowAutofit/>   <w:UseFELayout/>  </w:Compatibility>  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles></xml><![endif]--><style><!-- /* Font Definitions */ @font-face	{font-family:바탕;	panose-1:2 3 6 0 0 1 1 1 1 1;	mso-font-alt:Batang;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:variable;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}@font-face	{font-family:바탕체;	panose-1:2 3 6 9 0 1 1 1 1 1;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:fixed;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}@font-face	{font-family:"\@바탕체";	panose-1:2 3 6 9 0 1 1 1 1 1;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:fixed;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}@font-face	{font-family:"\@바탕";	panose-1:2 3 6 0 0 1 1 1 1 1;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:variable;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{mso-style-parent:"";	margin:0cm;	margin-bottom:.0001pt;	text-align:justify;	text-justify:inter-ideograph;	mso-pagination:none;	text-autospace:none;	word-break:break-hangul;	font-size:10.0pt;	mso-bidi-font-size:12.0pt;	font-family:바탕;	mso-hansi-font-family:"Times New Roman";	mso-bidi-font-family:"Times New Roman";	mso-font-kerning:1.0pt;} /* Page Definitions */ @page	{mso-page-border-surround-header:no;	mso-page-border-surround-footer:no;}@page Section1	{size:612.0pt 792.0pt;	margin:99.25pt 3.0cm 3.0cm 3.0cm;	mso-header-margin:36.0pt;	mso-footer-margin:36.0pt;	mso-paper-source:0;}div.Section1	{page:Section1;}--></style><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable	{mso-style-name:"표준 표";	mso-tstyle-rowband-size:0;	mso-tstyle-colband-size:0;	mso-style-noshow:yes;	mso-style-parent:"";	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;	mso-para-margin:0cm;	mso-para-margin-bottom:.0001pt;	mso-pagination:widow-orphan;	font-size:10.0pt;	font-family:"Times New Roman";	mso-fareast-font-family:"Times New Roman";	mso-ansi-language:#0400;	mso-fareast-language:#0400;	mso-bidi-language:#0400;}</style><![endif]--><span style="font-size: 10pt; font-family: 바탕체;" lang="EN-US">D3DXIntersectTri함수를 사용하면 쉽게 구현이 가능합니다. </span><br />
<br />
<br />
아무래도 각각의 폴리곤에 대해서 검사하는건 비용문제가 클꺼라고 생각해서<br />
오브젝트를 감싸는 바운드 박스를 계산하고 바운드박스로 피킹검사를 했습니다. <br />
<br/><br/>tag : <a href="/tag/Picking" rel="tag">Picking</a>,&nbsp;<a href="/tag/피킹" rel="tag">피킹</a>			 ]]> 
		</description>
		<category>Picking</category>
		<category>피킹</category>

		<comments>http://hellzblog.egloos.com/2421787#comments</comments>
		<pubDate>Sat, 27 Jun 2009 14:12:02 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [3D][DirectX] 물에 잠기는 알파오브젝트 ]]> </title>
		<link>http://hellzblog.egloos.com/2420965</link>
		<guid>http://hellzblog.egloos.com/2420965</guid>
		<description>
			<![CDATA[ 
  드디어 한학기가 끝났습니다. <br />
시험이다 과제때문에 한동안 포스팅이 없었네요. (정기방문보다 검색방문이 많겠지만 ;;;)<br />
기말고사는 저번주에 끝났지만, 늦게 내는 텀이 남아서 방학(!)이&nbsp; 한주 더 걸렸네요. <br />
이제 남은건 성적공개뿐이군요....<br />
<br />
<br />
<br />
알파오브젝트는 일반적인 오브젝트를 그린 후, <br />
알파 오브젝트끼리 카메라에서의 거리로 먼곳부터 그려줘야 합니다. <br />
<br />
문제는 지형에 커다란 사각형으로 물을 씌울때 발생합니다. <br />
물도 알파오브젝트인데, 다른 작은 알파오브젝트와 비교해 언제 그려줘야 할까요?<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200906/26/99/e0052299_4a44d8ab4b078.jpg" width="500" height="412.037037037" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200906/26/99/e0052299_4a44d8ab4b078.jpg');" /></div>빌보드로 알파값을 가진 나무입니다. <br />
나무를 먼저 그려주고, 물을 그려준 상태입니다. <br />
보시다시피 빌보드의 투명부분에 물이 그려지지 않았습니다. <br />
나무의 Z버퍼가 물보다 앞에 있기때문에 그려지지 않는것이죠. <br />
</div><br />
<br />
<br />
<div style="text-align: center;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds12.egloos.com/pds/200906/26/99/e0052299_4a44d95396b8b.jpg" width="500" height="412.037037037" onclick="Control.Modal.openDialog(this, event, 'http://pds12.egloos.com/pds/200906/26/99/e0052299_4a44d95396b8b.jpg');" /></div>이번엔 반대로 물을 그려주고, 나무를 그려줬습니다. <br />
얼핏보면 제대로 그져진듯 하지만, 물에 잠긴 나무밑둥이 그려지지 않습니다. <br />
아까와 반대로 물의 Z버퍼가 잠긴 나무앞에 있기 때문에 그려질 수 없는것이죠. <br />
만약 물이 투명하지 않는 거라면 이정도로도 충분할 겁니다. <br />
하지만 투명히 비추는 물에 잠긴 오브젝트를 원한다면 불충분하죠.<br />
</div><br />
<br />
<br />
해결법은 나무를 2번 그리고, Z버퍼쓰기 상태를 이용하는 겁니다. <br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44da3dbd8ce.jpg" width="500" height="412.037037037" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44da3dbd8ce.jpg');" /></div>먼저 나무를 그려줍니다. <br />
중요 포인트는 Z버퍼쓰기를 꺼주는 겁니다. <br />
<span style="font-weight: bold;">SetRenderState(D3DRS_ZWRITEENABLE, FALSE);</span><br />
이렇게하면 출력은 되지만, Z버퍼에는 반영이 되지 않죠. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44da881ee38.jpg" width="500" height="412.037037037" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44da881ee38.jpg');" /></div>다시 Z버퍼쓰기를 활성화한 후,&nbsp; 물을 그려줍니다. <br />
물 위쪽에 그려진 나무가 물과 알파블렌딩되서 흐려진것을 알 수 있습니다. <br />
당연히 물에 잠긴 밑둥은 물과 블렌딩된 상태입니다. <br />
<br />
<br />
<div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44db0fa793c.jpg" width="500" height="412.037037037" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/26/99/e0052299_4a44db0fa793c.jpg');" /></div>마지막으로 나무를 다시 그려줍니다. <br />
물을 그릴때 Z버퍼가 변하여, 밑둥이 다시 그려지지 않고, <br />
잠긴 효과 그대로 유지되는것을 알 수 있습니다. <br />
물 위 가지부분은&nbsp; 물보다 카메라에 가까우므로, 덮어 써지는것을 알 수 있습니다. <br />
<br />
<br />
정리하면 다음과 같습니다. <br />
<ol><li>Z버퍼쓰기를 끄고 알파 오브젝트를 그린다. <span style="text-decoration: underline;">(Z버퍼 사용[D3DRS_ZENABLE])이 아님.)</span></li><li>Z버퍼쓰기를 다시 키고 물을 그린다. <br />
</li><li>알파 오브젝트를 다시 그린다. <br />
</li></ol><br />
<br />
이걸 생각해내기 전에는 요상하게 작성해봤었죠. <br />
Z버퍼쓰기를 끄고, 물을 그리고, Z버퍼쓰기 키고 오브젝트를 그리고 알파블렌딩을 <br />
D3DBLENDOP_MIN로 지정한뒤 물을 다시 출력했었습니다. <br />
이렇게하면 오브젝트의 알파부분과 물과 약간의 색차가 존재합니다.<br />
그래도 멀리서 보면, 어느정도 그럴듯 했었죠;;;;<br />
<br />
원래 과제에 덤으로 넣은 물효과인데, 그냥 초안대로 작성해서 빨리 내버렸습니다. <br />
근데 제출한 다음날에 이방법이 떠올랐다죠 orz...<br />
다행히 기말 실기시험에서 이 소스를 사용해서, 기말고사는 수정된 버전으로 제출~<br />
<br />
<br />
<br />
<br />
<br/><br/>tag : <a href="/tag/3D" rel="tag">3D</a>,&nbsp;<a href="/tag/DirectX" rel="tag">DirectX</a>,&nbsp;<a href="/tag/물" rel="tag">물</a>,&nbsp;<a href="/tag/Water" rel="tag">Water</a>,&nbsp;<a href="/tag/그리기" rel="tag">그리기</a>,&nbsp;<a href="/tag/알파오브젝트" rel="tag">알파오브젝트</a>			 ]]> 
		</description>
		<category>Programming</category>
		<category>3D</category>
		<category>DirectX</category>
		<category>물</category>
		<category>Water</category>
		<category>그리기</category>
		<category>알파오브젝트</category>

		<comments>http://hellzblog.egloos.com/2420965#comments</comments>
		<pubDate>Fri, 26 Jun 2009 14:51:45 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [3D][DirectX] Solar System ]]> </title>
		<link>http://hellzblog.egloos.com/2389881</link>
		<guid>http://hellzblog.egloos.com/2389881</guid>
		<description>
			<![CDATA[ 
  과제로 나온 태양계입니다. 과제한지는 꽤 됐는데, 그다지 시간여유가 없었습니다 --;<br />
<br />
<br />
우선 태양계를 살펴보면 항성인 태양. 지구같은 행성. 달과 같은 위성이 있습니다. <br />
지구는 태양주위를 공전하며, 달은 지구 주위를 공전하죠. <br />
또한 자신조차도 스스로 공전을 합니다. <br />
<br />
즉, 혹성은 부모주위를 공전하며, 자전을 하죠. <br />
이것을 정리하여 항성과 행성과 위성을 나타내는 혹성클레스를 정의합니다. <br />
혹성안에는 공전과 자전을 위한 자료. 그리고 자식들의 리스트를 가지고 있습니다. <br />
그리고 혹성의 움직임, 그리기등의 작업은 부모를 통해 자식에게 전해지게 됩니다. <br />
<br />
그리기 코드는 다음과 같습니다. <br />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CH3%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:WordDocument>  <w:View>Normal</w:View>  <w:Zoom>0</w:Zoom>  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>  <w:ValidateAgainstSchemas/>  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>  <w:Compatibility>   <w:SpaceForUL/>   <w:BalanceSingleByteDoubleByteWidth/>   <w:DoNotLeaveBackslashAlone/>   <w:ULTrailSpace/>   <w:DoNotExpandShiftReturn/>   <w:AdjustLineHeightInTable/>   <w:BreakWrappedTables/>   <w:SnapToGridInCell/>   <w:WrapTextWithPunct/>   <w:UseAsianBreakRules/>   <w:DontGrowAutofit/>   <w:UseFELayout/>  </w:Compatibility>  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles></xml><![endif]--><style><!-- /* Font Definitions */ @font-face	{font-family:바탕;	panose-1:2 3 6 0 0 1 1 1 1 1;	mso-font-alt:Batang;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:variable;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}@font-face	{font-family:"\@바탕";	panose-1:2 3 6 0 0 1 1 1 1 1;	mso-font-charset:129;	mso-generic-font-family:roman;	mso-font-pitch:variable;	mso-font-signature:-1342176593 1775729915 48 0 524447 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{mso-style-parent:"";	margin:0cm;	margin-bottom:.0001pt;	text-align:justify;	text-justify:inter-ideograph;	mso-pagination:none;	text-autospace:none;	word-break:break-hangul;	font-size:10.0pt;	mso-bidi-font-size:12.0pt;	font-family:바탕;	mso-hansi-font-family:"Times New Roman";	mso-bidi-font-family:"Times New Roman";	mso-font-kerning:1.0pt;} /* Page Definitions */ @page	{mso-page-border-surround-header:no;	mso-page-border-surround-footer:no;}@page Section1	{size:612.0pt 792.0pt;	margin:99.25pt 3.0cm 3.0cm 3.0cm;	mso-header-margin:36.0pt;	mso-footer-margin:36.0pt;	mso-paper-source:0;}div.Section1	{page:Section1;}--></style><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable	{mso-style-name:"표준 표";	mso-tstyle-rowband-size:0;	mso-tstyle-colband-size:0;	mso-style-noshow:yes;	mso-style-parent:"";	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;	mso-para-margin:0cm;	mso-para-margin-bottom:.0001pt;	mso-pagination:widow-orphan;	font-size:10.0pt;	font-family:"Times New Roman";	mso-fareast-font-family:"Times New Roman";	mso-ansi-language:#0400;	mso-fareast-language:#0400;	mso-bidi-language:#0400;}</style><![endif]--><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt; color: blue;" lang="EN-US">bool</span><span style="font-size: 8pt;" lang="EN-US"> CPlanet::Draw(LPDIRECT3DDEVICE9 pD3DDevice, D3DXMATRIXMotherTranslation) {<o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pD3DDevice-&gt;SetTransform(D3DTS_WORLD,<o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 80pt; text-align: left; text-indent: 40pt;" align="left"><span style="font-size: 8pt;" lang="EN-US"><span style="">&nbsp;</span>&amp;(SelfRotation* MotherRotation * MotherTranslation));<o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">this</span>-&gt;m_pMesh-&gt;Render(pD3DDevice);<o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">for</span>(<span style="color: blue;">int</span> Count = 0;Count &lt; Child.size(); Count++)<o:p></o:p></span></p><p class="MsoNormal" style="margin-left: 40pt; text-align: left; text-indent: 40pt;" align="left"><span style="font-size: 8pt;" lang="EN-US">Child[Count]-&gt;Draw(pD3DDevice, <span style="color: blue;">this</span>-&gt;MotherRotation * MotherTranslation);<span style="">&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p><p class="MsoNormal" style="text-align: left; text-indent: 40pt;" align="left"><span style="font-size: 8pt; color: blue;" lang="EN-US">return</span><span style="font-size: 8pt;" lang="EN-US"> <span style="color: blue;">true</span>;<o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 8pt;" lang="EN-US">}</span></p><p class="MsoNormal" style="text-align: left;" align="left">부모의 위치좌표를 넘겨 받습니다. <br />
</p><p class="MsoNormal" style="text-align: left;" align="left">그리고 자전회전 * 공전회전 * 부모위치을 차례로 곱해서 혹성의 위치를 구합니다. <br />
</p><p class="MsoNormal" style="text-align: left;" align="left">자신을 그리면 자전을 제외한 위치행열을 자식에게 전달합니다. <br />
</p><p class="MsoNormal" style="text-align: left;" align="left"><br />
</p><p class="MsoNormal" style="text-align: left;" align="left">이렇게하면 모든 혹성을 루프를 통해 일괄적으로 넣을수도 있죠. <br />
</p><p class="MsoNormal" style="text-align: left;" align="left"><br />
<span style="font-size: 8pt;" lang="EN-US"><o:p></o:p></span></p><br />
<br />
<div style="text-align: center;"><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200905/25/99/e0052299_4a1962a7e8a53.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200905/25/99/e0052299_4a1962a7e8a53.jpg');" /></div><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200905/25/99/e0052299_4a1962b680cfe.jpg" width="500" height="375" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200905/25/99/e0052299_4a1962b680cfe.jpg');" /></div>실행파일 (<a href="http://pds10.egloos.com/pds/200905/25/99/LabProject.exe">LabProject.exe</a>)<br />
</div><br />
숫자키 1~8을 누르면 각 행성으로 카메라가 이동되며<br />
9번은 상단카메라. 0번은 위에서 비스듬하게 내려다 보는 카메라입니다. <br />
구는 버텍스와 인덱스를 실린더 공식을 이용해서 직접 만들어 주었는데, <br />
회전을 명확히 보기 위해 색상에 노이즈를 넣어봤습니다. <br />
<br />
<br />
원래는 구 코드도 올릴까 했는데, 이건 나중에 시간되면 올리죠 --;<br />
일단 다음과제 올리는건 건너뛰고(제공된 소스를 활용한 수준이라)<br />
다음에 올릴건 피킹이 되겠군요.. 일단 구현은 완료된 상태...<br />
<br/><br/>tag : <a href="/tag/태양계" rel="tag">태양계</a>,&nbsp;<a href="/tag/DirectX" rel="tag">DirectX</a>,&nbsp;<a href="/tag/3D" rel="tag">3D</a>,&nbsp;<a href="/tag/Solar" rel="tag">Solar</a>			 ]]> 
		</description>
		<category>Workshop</category>
		<category>태양계</category>
		<category>DirectX</category>
		<category>3D</category>
		<category>Solar</category>

		<comments>http://hellzblog.egloos.com/2389881#comments</comments>
		<pubDate>Sun, 24 May 2009 15:16:57 GMT</pubDate>
		<dc:creator>hellz</dc:creator>
	</item>
</channel>
</rss>
