본문 바로가기

Software/Processing

서보모터를 3D Builder를 통해 3D 도면의 좌표 중심을 변경하고 Processing에서 3D 도면을 표현하기

서보모터의 3D 도면을 어찌어찌 구해서 유니티(Unity)에서 잘 가지고 놀았었는데요[바로가기]^^. 그런데 이 때, 서보모터의 도면의 좌표 중심이 실제 모델의 중심과 달라서 약간 고생을 했었는데요^^. 이번에는 윈도우 10을 쓰는 유저라면 아주 편하게 도면 자체의 좌표 중심을 옮겨서 쉽게 다룰 수 있도록 하는 것을 이야기할려고 합니니다. 이 글에서는

  • 먼저 3D 도면 파일을 3D Builder라는 프로그램을 통해 좌표축을 변환하고
  • 이를 이용해서 Processing에서 표현하는 기초적인 방법과
  • 실제 서보모터의 도면 파일을 Processing에서 불러서 화면에 표현해보는 것이

목적입니다.^^ 일단 윈도우 10 사용자라면, 아마 뭐 모르실 수도 있는데 3D Builder라는 프로그램이 기본으로 설치되어 있을 겁니다. MS에서 3D 프린터를 겨냥해서 탑재했다고 하는데.. 꽤 유용합니다.^^ 지난번에 이야기한 유니티 글[바로가기]에서 다루는 서보모터 혼(horn) 도면파일을 3D Builder로 열어 봅니다.

보기 좋게 저렇게 열리네요~~

그러면 화면 제일 상단 왼쪽의 체크 모양의 확인 버튼을 누르면 오른쪽 상단에 저장하기 버튼이 만들어 지는데 이를 눌러서....

형식을 OBJ로 변경해서 저장합니다.

그리고 그걸 Processing에서 읽어 보면 (아참 읽는건 나중에 코드를 보면 되고 지금은 설명이 약간 필요해서요^^) 위 그림처럼 한 쪽 구석에 이상한 모양으로 보입니다.

저렇게 되어 있네요... 기본적으로 세워진 모양으로 로딩이 되었습니다. 근데 이는 지난번에 서보모터를 다룬 유니티 글에서도 마찬가지여서 90도로 돌렸었지요.^^

아~ OBJ 파일은 위와 같은 코드로 쉽게 읽어 올 수 있습니다. 위에 modelX/Y/Z는 최근 프로세싱 글[바로가기]에서 이야기를 했습니다.^^

이제 다시 윈도우의 3D Builder로 가서 위 그림에 보이는 회전 마크를 클릭합니다. 그리고,

위의 연두색 화살표를 클릭한 다음....

위에 표시된 0 도를 클릭해서 90을 입력합니다.^^

그러면 이렇게 되지요^^. 이제 다시 Processing에서 읽어서 표현을 해보겠습니다.

응? 딱 가운데가 아니라 약간 한쪽으로 흘러가 있죠? 3D 모델의 좌상단이 0,0으로 잡혀있는 것입니다. 그러니~~ 위 그림의 16번 줄의 주석을 풀어서 Z축으로 회전시켜보면

이렇게 회전 중심이 원하는 곳이 아니게 됩니다.ㅠㅠ.

또 다시 3D Builder로 가서 이번에는 위의 이동 버튼을 누르고, 각 방향의 화살표를 눌러가며, 0mm로 죄다 입력해 줍니다.

그러면 위 그림처럼 살짝 어디로 이동해 있겠죠^^

이제 다시 Processing에서 불러 보면 정 중앙에 위치해 있다는 것을 알 수 있습니다. 그리고, 

Horn의 가운데서 잘 회전도 하구요^^

이제 다시 3D Builder에서 재료를 선택해서 색상을 변경해 줄 수 있습니다.^^

ㅎㅎ 느낌이 좋네요~~~

이제 나머지 body(도면파일은 글 제일 하단에 첨부해 두겠습니다.^^. 아니면 이전 유니티 글[바로가기]에서 받으셔도 되구요^^)도 3D Builder에서 불러서

90도 회전하고, 색상도 변경해 둡니다.

저렇게 body.obj로 저장하구요~~ 이제 저 둘을 불러오는 Processing 코드를 한 번 보죠~~

PShape horn, body;
float rotX, rotY;

void setup() {
  size(600,600, P3D);
  smooth();
  
  body = loadShape("body.obj");
  horn = loadShape("tmp.obj");
}

void draw() {
  lights();
  background(32);
  
  translate(width/2, height/2, -100);
  
  rotateX(rotX);
  rotateY(-rotY);
  
  scale(4);
  shape(body);
  
  translate(0, 10, 20);
  rotateZ(radians(frameCount));
  
  shape(horn);
}

void mouseDragged(){
    rotY -= (mouseX - pmouseX) * 0.01;
    rotX -= (mouseY - pmouseY) * 0.01;
}

위 코드처럼 작성해 줍니다. 너무나 심플하죠 ~~ 그게 프로세싱(Processing)의 장점이니까요... 

해당 코드를 돌려보면 저렇게 아름답게(^^) 서보모터를 구현한 것이 확인됩니다. 다음 글은 Processing에서 위 그림을 가지고 실제 서보모터를 아두이노와 연결해서 구동하는 걸 해볼려구요^^ 아무튼.... 그럼 이만~~~~

ex3DRotationCenter.zip


반응형