336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Blender 2.6 Smoke & Collision Object Tutorial

 

 

 

 

이번 시간에는 Smoking효과를 적용해보겠다.

형태가 없는 것을 만들려고하니 머리가 좀 복잡해질지도 모르겠다.

수치만 설정해준다면 Blender가 알아서 계산을 하니 걱정할 필요는 없다.

위의 정리한 내용을 토대로 하나하나씩 만들어보자.

 

Cube가 보이면 "S" "Z"를 눌러서 Z축 방향으로 Size를 조정한다.

 

"Z"를 한번더 누르면 Cube의 inside가 보이게 된다.

그리고 NumPad의 7번을 눌러서 Top-down-view Perspective (위에서 아래로 보는 시점) 으로 바꾼다.

 

Add >> Mesh >> Circle

 

Circle이 생기면 "S"를 click해서 Size를 줄인다.

잠깐 기본 단축기를 기억하고 넘어가자.

Tab = Edit Mode

E = Extrude

S = Size or Scale

처음 Circle이 선택되고나서 Tab>>E>>S를 순서대로 눌러주면, 아래 그림처럼 모양이 바뀐다.

 

지금 만들고 있는 형태가 와닿지 않는다면

Mouse Wheel을 click해서 드래그하면, 원하는 시점으로 바꿀 수 있다.

 

현재 상태는 Cube안에 다른 크기의 Circle두개가 같은 중심점을 공유하고 있는상태이다.

Now, two different sized-Circles sharing with same central point

                                          are in a Cube.

 

다시 NumPad 7을 눌러서 시점이동을 하고

Alt + M 을 누르고, At center

 

오른쪽 그림처럼 바뀐다. (중심으로 소실점이 생김)

 

A를 Double-click 해서 전체가 선택되게 만든다.

 

G = Grab

Z = Z-axis

G>>Z를 순서대로 누르고 mouse drag하면 객체가 Z축 방향으로 이동된다.

Cube의 아래쪽에 위치시킨다.

(Place yellow one buttom of the Cube.)

 

이상태에서

중심에 우클릭을하고

G >> Z를 순서대로 눌러주면

중심을 붙잡고 Z축 방향으로 끌어올릴 수 있다.

 

Corn 모양이 됬다. 병의 바닥으로 사용될 것이다.

 

 

 

 

이 상태에서

테두리를 Alt +  으로 선택한다.

(Select edge of Circle with Alt + Right_Clicking)

 

이제 E >> Z를 순서대로 눌러주면

객체를 Z축 방향으로 Extrude 할 수 있다.

 

병의 몸체가 만들어졌다.

병 목을 만들기 위해서는 circle의 size가 작아져야할 필요가 있다.

우선 병의 목을 z축 방향으로 한번더 연장해준다.

 

"S"를 click하고 mouse drag를 한다.

 

참 쉽죠~!

그럴싸한 병을 만들기 위해선 반복적 작업이 필요하다.

 

병의 기본 형태는 갖춰졌다.

이제 유선형으로 바꿔줄 차례이다.

 

빨간색으로 표시된곳을 클릭한다.

Object Modifier이다.

 

 

Subdivision Surface를 찾아간다.

 

View의 수치를 1에서 → 3으로 바꿔준다.

격자가 촘촘해진다.

(단, 높을 수록 속도가 느려질 수 있다.)

 

Ctrl + L을 눌러서 전체선택을 한다.

 

"T"를 click하면 생기는 왼쪽 ToolBar에서

Smooth를 선택한다.

Recalculate를 선택한다.

 

 

"A"를 눌러서 선택해제(=DeSelect)를 한다.

병을 중간에 Mouse Cursor를 두고,

Ctrl + R를 누르면 보라색 선이 생긴다.

각각 병의 바닥근처, 병의 어깨 근처로 올려준다.

 

 

"A" >> "Z" 를 누르면  Cube가 나타난다.

G (=Grab)을 눌러서 병을 Cube밖으로 빼낸다.

 

이제 병의 모양이 갖춰졌다.

이제 본격적인 Game이 시작되었다.

Smoke를 만들기 위해선 물리를 적용시켜야한다.

To make Smoke Effect, you need to apply physics to this work.

 

Ctrl + Shift + Alt + C

└ Geometry to Origin

"Z"를 눌러 내부를 볼수있도록 한다.

(Hit Z to see inside of them)

 

Add > Mesh >> Torus (=도너츠 모양)

 

"S"와 "G"을 이용해서

Size를 조정하고 병속으로 Torus를 넣는다.

(Place Torus you made in the Bottle.)

 

오른쪽 툴바의 Cube를 우클릭 >> Select를 하거나

혹은

Tab을 눌러서 Edit Mode 상태에서 Cube를 우클릭해도 된다.

 

Physics >> Smoke >> Domain을 차례로 설정해준다.

상자가 Domain이 되었다.

이제 꽃병을 연기가 뚫을 수 없는 객체로 지정해야할 차례다.

(It's time to make a object which is impossible to be panetrated by smoke.)

 

병을 선택하고

Phsics >> Smoke >> Collision

다시 위로 올라와서

Collision 을 택한다.

 

이제 마지막으로 Torus를 설정해주면 끝

Torus는 연기의 근원지가 된다.

 

Torus는 병과 한몸이 아니므로 위의 ToolBar에서 처럼 따로 분리가 되있어야한다.

Particles >> "+" 를 누르고 Options를 지정해보자.

▼Emission

◀Number : 500▶

◀End : 4▶

◀LifeTime : 250▶

 이부분 중요하다.

Gravity(=중력)을 0으로 설정해야 Smoke가 중력을 거슬러서 병 밖으로 나온다.

Pysics로 가서

Temp. Diff의 수치를 2로 올려준다.

온도를 높여줘서 연기의 확산속도를 빠르게 해준다.

 

다시 Cube를 클릭

위 그림처럼 설정을 바꿔주고

A를 더블클릭해서 DeSelect(=선택해제)

Alt + A를 눌러서 재생하면 끝!!!

지금 보이는 Torus를 병속으로 넣으면 어떻게 물리값들이 적용되는지 확인할 수 있다.

 

 

 

untitled.blend

Posted by ElectricShock
:
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

RS232 ↔ MX232 ↔ MicroController

연결관계

 

 

전체그림

 

'MiDi' 카테고리의 다른 글

Step7.Soldering pots & buttons  (0) 2012.12.06
Posted by ElectricShock
:

midi_send.asm

2012. 12. 8. 13:35
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
; File MIDISEND.ASM
; Assembly code for a 10MHz PIC16F84 microcontroller
;
; Description: Send a midi message once every second

;                보낸다. 미디 메세지를 ; Author: Ross Bencina ; Last Modified: 25 / 8 / 99 ; ; CPU configuration processor 16f84 include <p16f84.inc> __config _HS_OSC & _WDT_OFF & _PWRTE_ON ; variables temp equ H'1F' xmit equ H'1D' i equ H'1C' j equ H'1B' k equ H'1A' ; Program org 0 ; start at address 0 ....시작주소 start: movlw B'00000000' tris PORTA ; init port A as output bsf PORTA, 0x02 ; init midi out pin state

;포트A의 2번째 bit를 set시킨다.

 

 

 

mainloop:

call secdelay        ; 아래의 레이블 secdelay를 불러온다. (Return명령어를 만나면 다시 이자리로 돌아온다.) movlw 0x90 ; note on, channel 1 movwf xmit call sendmidi movlw 0x3C ; middle C movwf xmit call sendmidi movlw 0x7F ; velocity 127.....7F = 0111 1111 = 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 127 movwf xmit call sendmidi call secdelay movlw 0x80 ; note off, channel 1 movwf xmit call sendmidi movlw 0x3C ; middle C movwf xmit call sendmidi movlw 0x7F ; velocity 127 movwf xmit call sendmidi goto mainloop ; sendmidi transmits one midi byte on RA2 ;                 at 10mhz

; sendmidi는 전송한다. 하나의 midi바이트를 on RA2상에서

;                 at 10mhz의 속도로

;there are 80 instructions per midi bit

;          80개의 명령어들이있다. / 한 미디 비트당 ; xmit contains byte to send

; xmit은 포함한다. 바이트를 to 보내기위한 ; * this should be rewritten to support variable delays for ; * different clock speeds

 

sendmidi: startb: bcf PORTA, 0x02 ; start bit......포트A의 02번째 비트를 Clear시킨다. movlw D'24' ; delay 73 clocks: 2 + (23 * 3 + 1 * 2) movwf temp ; | loop1: decfsz temp,f ; | goto loop1 ; end delay                                      movlw D'8' movwf j                ;j에 8이 들어있다. sendloop: ; executes 5 instuctions before setting bit rrf xmit,f            ;Rotate Right File, xmit값을 회전시키고 f에 저장 btfsc STATUS, C        ;bit test file, STAUS의 Carry가 0이면 Skip한다. goto send1 ; remember midi bits are opposite from our representation send0: nop bcf PORTA, 0x02 ;send a 0 bit goto endloop send1: bsf PORTA, 0x02 ;send a 1 bit nop nop endloop: ; movlw D'23' ;delay 70 instructions 2 + (22 * 3 + 1 * 2) movwf temp ; | loop2: decfsz temp,f ; | goto loop2 ; end delay decfsz j,f ; goto sendloop stopb: nop nop nop nop nop bsf PORTA, 0x02 ; stop bit movlw D'26' ; delay 79 clocks: 2 + (25 * 3 + 1 * 2) movwf temp ; | loop3: decfsz temp,f ; | goto loop3 ; end delay return ; secdelay delays for one second ( 2500000 instructions ) ; kloop = (2 + 254 * 3 + 1 * 2) = 766 ; jloop = 2 + kloop * 255 + (3 * 254 + 1 * 2) = 196096 ; iloop = 2 + jloop * 13 + (3*254 + 1*2) = 2550014 = 1.02 seconds ; x = secdelay: movlw D'13'        ;여기서의 D는 Decimal movwf i            ;i=13 iloop: movlw D'255' movwf j            ;j=255 jloop: movlw D'255' movwf k            ;k=255 kloop: decfsz k,f          ;k값을 1씩 줄인다.결과를 f에 저장.(Skip한다. 만약 값이 Zero라면) goto kloop        ;k가 0이 아니라면 kloop 레이블로 향할것!!!......참고로 k값은 jloop에서 할당되었다. decfsz j,f          ;j값을 1씩 줄인다. 결과를 f에 저장. (Skip한다. 만약 값이 Zero라면) goto jloop decfsz i,f          ;i값을 1씩 줄인다. 결과를 f에 저장. (Skip한다. 마냥ㄱ 값이 Zero라면) goto iloop return                ; 위에서 Call했던 곳으로 돌아간다. end

Posted by ElectricShock
:

BLOG main image
잡동사니들(지극히 개인취향인...) (다른글에도 댓글 부탁해요♥) You May Leave English Messages on GuestBook. by ElectricShock

공지사항

카테고리

분류 전체보기 (782)
Programming(=프로그래밍) (3)
MiDi (2)
Animation (4)
Blender (3D Graphic Program.. (10)
Blendtuts.com (Series) (1)
Blender 기초 팁들 (2)
Processing (디지털미디어과) (2)
Music (1)
Books in the world (0)
Communication(CAN, UART, et.. (12)
MCU Examples (PIC 기반) (7)
Transistor (1)
Mikro C Pro (11)
Mikro Pascal (1)
Proton IDE (0)
Robot (0)
Swift 3D (1)
Dummies Series (1)
All about Hacking (0)
제2 외국어 (1)
PIC 해외서적들 (3)
AVR (25)
PIC (MikroC) (MPLAB) (4)
Assembly (2)
ARM (3)
Arduino (26)
PSpice (1)
Proteus ISIS (14)
CodeVision (2)
FPGA (15)
MPLAB (24)
PCB (the Procedure) (15)
3D Printer (5)
PICKIT3 (6)
Matlab (11)
RaspBerry PI (15)
BeagleBone (1)
Android Studio (17)
졸업작품 (172)
Korea History (0)
Issue(사회) (73)
Multimeter 리뷰 (1)
Oscilloscope (1)
A (34)
B (19)
J (6)
C (32)
P (12)
T (37)
H (12)
I (12)
M (44)
R (5)
E (5)
F (2)
D (9)
O (2)
L (7)
S (9)
W (2)
V (6)
G (14)
Visual C++ or Visual Studio (2)
Android App Development (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백