블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

SaveFileDialog

Programming/C# / 2011. 3. 25. 17:08
반응형

'Programming > C#' 카테고리의 다른 글

Processing Global Mouse and Keyboard Hooks in C#  (0) 2011.05.13
Array -> String  (0) 2011.05.09
DataGridView to XML  (0) 2011.03.23
ToolTip 사용하기  (0) 2011.02.11
C# TAB, 방향키, Control, Alt, Shift Key 입력 처리  (2) 2011.01.20
Posted by blueasa
, |

cli::array<t>^<t>

Programming/C++/CLI / 2011. 3. 24. 15:50

 C++/CLI 에서 배열은 하나의 Data type 이다어떠한 배열이든 cli::array 클래스의 인스턴스(참조 타입)이다.

메모리는 동적으로 CLR(Common Language Runtime) Heap 에 생성된다메모리의 크기는 배열 생성시에 결정되며 그 이후에는 크기를 변경할 수 없다.

 

 

1. 만약 배열의 Data Type  Value Type 이라면 배열 생성 시 Boxing 되어 들어간다.

(Boxing 과정은 프로그램의 Performance 를 하향 시킨다.)

2. 배열의 인덱스(첨자 0 부터 시작한다.

3. 배열은 배열의 요소에 접근 및 다루기 위한 메소드를 가지고 있다.

4. 배열에서의 모든 동작은 체크된다배열의 범위를 넘어가는 동작에 대하여 “Index out of range”

예외가 발생하게 된다.

5. 배열은 CLR Heap 에 할당된다. Value Type 의 배열은 Heap  Boxing 된 다음 그 참조를 리턴받는다.

 

 



■ 사용 예



int 타입의 배열 a 를 선언 및 생성 하였다. 또한 배열의 개수를 명시적으로 선언하지 않고, 초기화 값을 선언하였으므로 묵시적으로 1, 2, 3 의 값을 갖는 크기 3의 배열이 생성된다.




위 예는 명시적으로 배열의 크기를 100으로 선언하였다. 따라서 100 개의 요소를 갖는 배열이다. 또한 1,2,3 으로 초기값을 적어주었으므로 배열의 처음 3번째 요소까지 초기화가 이루어 진다.




cli::array 클래스에는 배열을 조작하기 위한  메소드와 프로퍼티가 정의되어 있다. Length, index 등 이 있으며 foreach 문에서 사용할 수 있다.


 



위의 예는 다차원 배열의 선언 및 사용 예이다. array<type, 차원>^ 과 같이 사용한다. 위의 예는 3차원 배열로서 4*5*2 크기를 갖는 배열이다.




String 클래스의 배열 역시 사용할 수 있다. 인상적인 것은 <> 안에 String^ 이 들어간다.




위의 예는 String 클래스의 배열을 생성 후 루프를 돌면서 초기화 하는 예제 이다.





■ 가변인자 사용 예

C++ 과 마찬가지로 가변 인자 를 지원한다. 다음은 사용 예 이다.





※ 만약 배열에 요소를 추가 하거나 삭제 하려 한다면 ArrayList 클래스를 참조한다.


 



■ 참조

1. cli::array (MSDN)
2. C++/CLI Primer - Enter the World of .NET Power Programming (CodeProject)
3. Quick C++/CLI - Learn C++/CLI in less than 10 minutes (CodeProject)


반응형
Posted by blueasa
, |
설명

double형 나눗셈의 나머지를 구합니다. 변수형에 따라 아래와 같은 함수가 준비되어 있습니다.

변수 타입 함수 헤더파일

double

fmod( double x, double y) math.h
float fmodf( float x, float y) math.h
long double fmodl(long double x, long double y) math.h
헤더 math.h
형태 double fmod( double number, double denom);
인수 double number 피제수, 나누어 지는 수
double denom 제수, 나누는 수
반환 double 나머지
예제
#include <stdio.h>
#include <stdlib.h>

int main( void)
{
   printf( "%g / %g 의 나머지 %gn", 123.123, 12.12, fmod( 123.123, 12.12));

   return 0;
}

]$ ./a.out 123.123 / 12.12 의 나머지 1.923 ]$


반응형
Posted by blueasa
, |

maxscript편집을 지원하는 무료 에디터

크림슨에디터http://www.crimsoneditor.com/ 

아크로에디터http://www.acrosoft.pe.kr/

 

1장 스크립트(매크로준비

Maxscript에 관해서 한 번 정리를 해보겟습니다.

개인적으로는 Maxscript 3dsmax 2.0때부터 접해 왔지만..실무에서는 3.1때부터 적용을 햇습니다.

저 역시 국내에서는 이렇다 할 자료가 존재하지 않아 영문헬프를 참고를 많이 할 수 밖에 없엇습니다.

국내에서 관련서적이 1권 있는 걸로 알지만역시 영문입니다.

제가 쓴 글을 외우려고 하지 마시고.. 모르는 것은 그냥 넘어가시면서...부담없이 글을 읽어 내려 가세요...

 

1. 시작하기전 해보아야 될것들

기본적으로 프로그래밍적인 흐름은 알고 계셔야 합니다.

Basic이나 C나 Pascal도 무난합니다전혀 모른다고 생각되시는 분은

인터넷으로 검색하셔서 C언어에 관해서라도 한번 쭉 보셔도 될듯 합니다.

for, if, while같은 구문은 꼭 숙지하세요

Maxhelp파일에서는 언어를 몰라도 스크립트가 간결하게 되어 있어서 사용하는데 문제가 안된다고 하지만

약간 깊게 들어간다면 힘들어 지는게 현실이니깐요

 

2. 스크립트 작업시 염두해 두어야 될 사항

1.안정적 측면  

    - 작성한 스크립트가 주프로그램인 3dsmax다운 현상을 일으키면 안된다.

    - 자체 에러 발생

    무한 루프를 돈다든지..치명적 에러를 발생시킨다든지..메모리를 과다하게 낭비한다든지

    만약 이런 일이 발생한다면..사용하는 그래픽디자이너들한테 맞아죽을지도 모릅니다.

 

2.편의적 측면

    - 편리한 인터페이스

    - 처리속도

    일처리를 간단히 하거나 빨리 하려는게 목적이기 때문에 편리해야한다.

    사용하기 애매모호하거나 불편하다면 안쓰는 것만 못하게 된다.

 

3.관리적 측면

    - 간단한 설치 및 관리

    - 신속하고 용이한 수정이 가능해야한다.

    나중의 업데이트를 생각해서 항상 수정을 쉽게 하려고 생각해야한다.

    그러므로 파일이 여러개 일수록 관리가 힘들어진다.

 

3. Maxscript의 문제(SDK와 비교)

(주석:SDK는 실제 맥스 plugin을 만드는데 사용되는 Visual C 라이브러리이다.)

1. Debug하기 어렵다.

        -그래픽을 전담하는 사람으로서 제일 부담가는 말일듯 싶다.

          어디에서 에러가 났는지 찾기가 힘들때가 있다.

        -디버거가 없다.script 1000줄 넘어 갔을 경우, code가 길어질수록 관리하기 훨씬 힘들어진다.

        -스크립트 함수명이 sdk와 일치 하지는 않는다.

2. SDK만큼 lowlevel에서 제어가 힘들다.

        -매크로가 주목적인 언어이다.

        -바로 최종 TM 정보 익스포트 하기 어렵다.

        -아스키파일제어는 쉽지만..이진파일제어는 라이브러리를 만들어야 가능하다.

        -상위 모디파이어를 유지한 채로 수정이 불가한 경우가 대부분이다.

3. Script 자체 버그도 있다.

        -스크립트 자체 오류도 있어서 사용자 오류인지 스크립트 오류인지 구분이 힘든 경우도 발생하다.

4. 3dsmax의 대부분의 기능을 지원하나모든 기능을 지원하는 것은 아니다.

        -예로 physique의 지원은 3.1때까진 지원, 4.2이후론 기능을 닫았다. video post도 부족하다.

 

그래픽은 몰라도 상관없는 분야이지만..

이것을 굳이 비교하는 것은 스크립트가 쉽게 풀리지 않는 경우가 발생할때 대부분 이런 경우 때문이다.

 

회사에서 프로그래머가 sdk보다 스크립트를 쉽게 생각하고,

덤벼들려고 한다면 항상 이것을 숙지 시켜주시기 바랍니다.

나중에 자기가 판 수렁에 빠져서 헤어나오지 못하게 될테니깐요

 

4. 여러가지 스크립트들과 비교

스크립트는 맥스에서 제공하는 매크로(macro) 기능 입니다.

워낙 3D분야가 복잡하고 수치가 가변적으로 바뀌는게 많아서

단순 녹음하고 플레이하는 방식으로 실행이 어려우므로..언어로써 제공합니다.

 

매크로는 쉽게 말해서 단순 반복을 컴퓨터가 해주는 것입니다.

스크립트 방식이 일반 매크로(hwp 매크로포토삽 액션)에 비해 손이 많이 가지만

그만큼 유연성이 있어서 다양하게 쓸 수가 있습니다.

 

방식도 프로그램마다 많이 비슷하지만,

0,1,-3같은 정수       Maya 경우       int,

                             Max 경우         integer 라고 하고,

$ 기호는                  Maya 에선        변수 를 의미하지만,

                             Max 에선          현재 오브젝트 을 가리킨다.

 

각 프로그램별 스크립트 스타일

Softimage = Visual basic, Javascript

Photoshop = Visual basic, Javascript

3dsmax = Maxscript(C와 비슷)

Maya = Mel(C와 비슷)

LW3D = Python

대충 스크립트에 관해 정리햇습니다..다음장부터는 직접 작성을 하면서 스크립트를 만들어 봅니다.

그럼1장을 마칩니다.

-----------------2장--------------------------

제2장 스크립트 에디터 사용법

가장 많이 쓰이는 스크립트 리스너의 사용법을 배워야 되겟죠.

이걸 사용하지 않으면 작성할때 힘들어집니다.

1. 스크립트 에디터 띄우기

 

메인 메뉴의 MAXscript/MAXScript Listner를 실행 합니다. 또는 F11을 누르면 바로 실행됩니다.

 

2. 맥스 스크립트 리스너를 작동해 보자.

위쪽 분홍색 창( Macro Recorder 창 )은 명령을 실행하는 곳이고,

밑쪽 흰색 창( output 창 )은 결과가 나오는 창입니다.

만약 계산을 분홍색 창에서 하면 흰색 창에서 결과가 나옵니다.

3. 맥스 스크립트 리스너로 계산을 해보자.

이제 리스너를 계산기처럼 이용해서 가지고 놀아 볼까요?

분홍색창안에서 2+2를 입력하고 Crtl + Enter키를 눌러서 커서가 밑줄로 가게 합니다.

Enter를 치지 마세요. (실수햇다면 창의 글을 모두 지우고 다시 해보세요)

(설명: 마지막 줄에서 Crtl + Enter는 줄(행)을 새로 만들때 씁니다. 그냥 Enter는 실행(계산)입니다.)

계속 5-2를 입력하고 Crtl + Enter키를 눌러서 커서가 밑줄로 가게 합니다.

계속 4*2를 입력하고 Crtl + Enter키를 눌러서 커서가 밑줄로 가게 합니다.

계속 5/0를 입력하고 Crtl + Enter키를 눌러서 커서가 밑줄로 가게 합니다.

제대로 되었다면 밑의 그림처럼 분홍창엔 글자만 있고 밑흰창은 깨끗하게 되었을 겁니다.

그럼 2+2줄을 계산해서 결과를 보려고 합니다.

이제 커서를 2+2줄로 이동합니다. shift + Enter키를 눌러서 실행해봅니다. 흰색창에 4가 출력이 됩니다.

이 방법은 1줄을 실행해서 결과를 볼때 사용됩니다.

그 다음행도 계속 해봅니다. 흰색창에 3이 출력이 됩니다. 나머지 행까지 계속 반복하세요

그러면 결과창에 다음과 같이 출력이 되어 나온다는 걸 보게 됩니다.

마지막 줄에서 에러가 나왔죠. 자! 이제 에러를 잡아볼까요?

마지막 줄의 5/0의 나눗셈이 0으로 나누면 안됩니다.

산수와 마찬가지로 스크립트도 똑같이 적용됩니다....ㅡ.ㅡ;

그래서 5/1로 수정해주세요.

자! 이제 4개의 행을 한번에 실행하려고 합니다. 그림처럼 Ctrl + a를 눌러서 전체 명령어를 선택합니다.

shift + Enter 키를 눌러서 실행해봅니다. 이 방법은 여러줄을 실행해서 결과를 볼때 사용됩니다.

이제 명령어들을 한줄로도 실행이 되게 합니다. 2+2 ; 5-2 ; 4*2 ; 5/1 로 편집을 해보세요.

여기서 띄여쓰기는 안해도 무방합니다.

자! 이제 1개의 행을 한번에 실행하려고 합니다. 그림처럼 Ctrl + a를 눌러서 전체 명령어를 선택합니다.

shift + Enter 키를 눌러서 실행해봅니다.

지금까지 리스너에서 한줄 실행과 여러줄 실행을 연습했습니다.

스크립트 작성시 빈번하게, 아니 지겹게 쓰는 것이므로 숙지하시기 바랍니다.

이제 다양하게 계산을 해보시기 바랍니다.

sin 90 ; cos 45 ;  3^2 을 계산해보세요

결과는 밑처럼 나옵니다.

1.0

0.707107

9

알맞는 결과들이 창에 출력이 될것입니다.

10 / 3 ;  10.0 / 3 도 계산을 해보세요

역시 밑처럼 결과가 나오죠

3

3.33333

서로 결과가 다를 것입니다.

맥스스크립트는 정수와 소수을 구별하므로 원하는 계산에 따라서 소수점을 해주셔야 합니다.

(10 as float) / 3

이 명령어는 맥스한테 10을 소수점으로 계산해달라는 명령어입니다.

2. 맥스 스크립트 리스너 사용법 정리

1. 마지막 줄에서 Ctrl + Enter 줄(행)을 새로 만들때 씁니다. 그냥 Enter 실행(계산)입니다.

    Ctrl + Enter는 여러줄의 명령어를 계속 쳐야 할 경우 자주 사용됩니다.

2. Ctrl + a -- 이 키는 전체 선택할때 많이 사용합니다.

3. shift + Enter -- 이 키은 여러줄을 실행해서 결과를 볼때 사용됩니다.(가장 많이 쓰이는 키입니다.)

이상 3가지 사항은 가장 빈번히 쓰는 것이므로 꼭 알아 두십시요.

그럼, 제2장을 마칩니다.

------------------------3장------------------------

제3장 인터페이스 띄우는 법

 원칙적으로 스크립트 내부 구조부터 나열하다 보면 너무 프로그래머적인 접근일것 같고 ....

엄청 분량이 많아서 금방 질려 버릴겁니다. 저두 시간이 넉넉치 않은 편이라...ㅡ.ㅡ;

이런 이유로 흥미를 많이 떨어뜨릴것 같아서 그래서 눈에 띄는 interface를 먼저하려고 합니다.

겉 포장(interface)을 제가 만들어 드릴 것입니다.

안에 들어갈 내용을 여러분이 넣어서 실행하게 끔 할 예정이고,

이것 역시 간단히 연습도 할 것입니다.

 

1. 맥스에서 지원하는 인터페이스

일반적으로 형태 분류는

1. 인터페이스가 없는 실행돼는 형태,

2. 유틸리티팬널 형태(Utility panel),

3. 플로터 형태(Rollout Floater Windows)으로 나누어 집니다.

정확히 말하면 맥스에서 사용하는 모든 메뉴를 다 쓸 수 있습니다....일반 플러그인처럼요...

머터리얼, 모디파이어에도 등록이 돼고

실행 아이콘은 쿼드메뉴(Quad Menu), 메인메뉴(Main Menu)등 어디든 다 집어넣을수 있습니다.

지금은 일반적인 형태을 구성하려고 합니다.

 

처음 1의 경우는 전 장에서 했던 계산기처럼 사용할 경우에 해당이 됩니다.

2와 3의 경우는 그림과 같습니다.

Floater인 경우는 3dsmax3 이후에 지원되는 것으로 알고 있습니다.

요즘은 Floater인터페이스를 사용되는 추세입니다.

작업을 할때 버튼을 항상 누를 수 있는 장점이 있습니다.

Utility panel인 경우 팬널 메뉴를 건드리면(박스를 만든다든지)

다른 메뉴로 이동해 버리기 때문에 어려운 경우가 많죠

 

2. 인터페이스 띄우기

아무리 멋진 스크립트더라도 맥스를 너무 과하게 건드리면 다운 돼버리기 때문에..

욕심은 삼가하셔야 됩니다.

스크립트에게 주어지는 메모리는 기본이 5MB 이고, Max5.0에서는 7.5MB입니다.

늘릴 수도 있지만 바람직하진 않습니다.

될 수 있는 한 아껴서 써야겟죠. 이제 그림처럼 맥스에 창에 띄워 봐야겟죠.

그럼 리스너에 다음을 입력하고 실행해보세요

( 실행 방법을 모르시는 분은 제2장에 나와 있습니다 )

rollout test " <<Test>> "

(

--여기는 우선 비워 둡니다.

--내용이 들어갈 부분이죠

)

createdialog test 200 200

 

복사해서 붙여도 실행 잘 됩니다...ㅡ.ㅡ;

입력하고 실행한 다음 입력한 글을 전부 삭제하고 다시 밑의 코드을 입력합니다.

밑의 예제까지 실행하면 2개 윈도우가 max 화면 상에 떠 있을겁니다.

rollout test "--test--"

(

--여기는 우선 비워 둡니다.

--내용이 들어갈 부분이죠

)

rof=newrolloutfloater "<<test>>" 200 200 --플로터를 만든 다음

addrollout test rof --플로터에 롤아웃을 추가 (여러개를 추가 할수 있습니다.)

 

설명: 코드중에 마이너스 2개(--)를 사용한 문장을 볼 수 있을텐데

이 부분은 주석으로 맥스가 무시하고 넘어 갑니다.

max5.0 부터 추가된 주석은 밑처럼 이렇게 2가지가 있으니 편한 걸 쓰시면 됩니다.

/*

여기는 우선 비워 둡니다.

내용이 들어갈 부분이죠

*/

 

그림의 2개의 창중에서 왼쪽 창 createdialog 은 크기조절이 자유롭게 안 되게 할 경우 사용되고

오른쪽 창 newrolloutfloater 은 크기조절이 수직으로 자유롭게 된다는 걸 알 겁니다.

그래서 좀더 자유롭게 쓰는 newrolloutfloater 를 활용할 겁니다.

 

3. 인터페이스에 버튼 추가하기

이제 플로터에 버튼을 넣어 보자구요. 사용할 명령어는

button bt1 "누를테면 눌러바" 을 설명 하면

-->button 버튼을 만드는 명령 입니다.

-->bt1 버튼의 이름 즉 고유ID역할을 합니다. 눈에 보이지 않고 내부적으로 처리할때 쓰임

-->"누를테면 눌러바" 버튼의 외부형태로 보이는 이름입니다. 이걸 바꾸면 버튼의 이름두 바뀌죠

자 그러면 코드를 입력하고 실행을 해보세요

rollout test "--test--"

(

button bt1 "   누를테면 눌러바   "

)

rof=newrolloutfloater "<<test>>" 200 200

addrollout test rof

이렇게 해서 인터페이스가 완성돼버렷네요....별로 어렵지 않죠...

그럼, 제3장을 마칩니다.

----------------------4장----------------------------

제4장 인터페이스 작동

이제 기본 플로터가 떠있으니까 인터페이스를 붙여서 그럴듯한 모양을 갖추어봐야겟죠

1. 버튼 - Box 생성

이제 스크립트로서 기능을 부여합니다. 버튼을 누르면 박스가 생성이 되도록 할 겁니다.

그럼 제3장에서 했던 코드에 다음처럼 몇줄을 추가를 해보자.

플로터의 버튼을 누르면 화면 중앙에 박스1개가 가 만들어질 것이다.

rollout test "--test--"

(

        button bt1 "   박스를 생성한다.   "

        on bt1 pressed do (

            box()

        )

)

rof=newrolloutfloater "<<test>>" 200 200

addrollout test rof

 

2. Box의 속성 제어

맥스에서 함수는 변수가 없을때는 box() 라고 명령하고

변수가 있을때는 box name:"라면박스" 이렇게 괄호가 없어지면서 변수가 붙는다.

그러면 박스의 여러가지 속성을 살펴보자

length:20  ====================> 박스의 길이를 20으로한다

width:20    ===================>  박스의 폭을 20으로 한다

height:20  ====================> 박스의 높이를 20으로 한다

pos:[100,100,100]   ============> 박스의 x,y,z 위치를 각각 100,100,100으로 한다.

name:"샘플박스"    ============>  박스의 이름을 샘플박스라고 칭한다.

wirecolor:yellow  =============>  박스의 와이어프레임 상태의 색상을 노랑색으로 지정한다.

밑의 코드를 실행해보자. 박스의 속성이 바뀌엇다는 것을 알 것이다.

rollout test "--test--"

(

        button bt1 "   박스를 생성한다.   "

        on bt1 pressed do (

            box length:20 width:20 height:20 pos:[100,100,100] name:"샘플박스" wirecolor:yellow

        )

)

rof=newrolloutfloater "<<test>>" 200 200

addrollout test rof

 

3. for문을 이용한 Box의 생성

이제 for문을 사용해서 기능을 추가해보자.

직접 실행를 해보면 결과를 알수가 있다. 마지막 k의 값을 알고 싶으면 print k 해보면 된다.

for i=1 to 10 do ( print "haha" ) --> haha를 10번 프린트를 한다는 것이다.

k=0;  for i=1 to 10 do ( k = k + i ) --> k를 1부터 10까지 더하기를 한다. 루프를 다 돌면 k=55 가 된다.

k=0;  for i in 1 to 10 do ( k = k + i ) -->이것 역시 결과는 같다.

이제 for문을 이용해서 25개의 박스를 배치해 보자

길이 length를 계속 20을 곱해 주면서, 위치는 x축으로 20씩 이동하면서 박스를 생성한다.

결국 피라미드처럼 커지는 형상으로 배치 된다.

rollout test "--test--"

(

        button bt1 "   박스를 생성한다.   "

        on bt1 pressed do (

                for i=1 to 25 do ( box length:(i*20) width:20 height:20 pos:[i*20,0,0] name:"샘플박스" wirecolor:yellow )

        )

)

rof=newrolloutfloater "<<test>>" 200 200

addrollout test rof

 

버튼을 하나 더 추가하고  이제 sin함수를 이용해서 곡선으로 배치를 해보자

코드를 보면 버튼에 이름이 다르다는 것을 알것입니다. 버튼마다 고유의 이름을 가져야 합니다.

만약 같게 한다면 에러가 발생합니다.

rollout test "--test--"

(

        button bt1 "  박스생성(피라미드)  "

        button bt2 "  박스생성(사인파)  "

        on bt1 pressed do (

                for i=1 to 25 do ( box length:(i*20) width:20 height:20 pos:[i*-20,0,0] name:"피라미드" wirecolor:yellow )

        )

        on bt2 pressed do (

                for i=1 to 72 do ( box length:20 width:20 height:20 pos:[(i*20),sin(i*10)*200,0] name:"사인파" wirecolor:yellow )

        )

)

rof=newrolloutfloater "<<test>>" 200 200

addrollout test rof

 

이제 버튼을 활용하고 for문을 통한 방법을 사용했습니다.

금방 끝나서 아쉬울수도 있겟지만, 프로그래밍 언어를 안 하신 분은 좀 생소하실 거라 생각듭니다.

그럼, 제4장을 마칩니다.

-----------------5장----------------------------

제5장 인터페이스 작동2

이제 기본적인 작동은 이해를 하셨을 겁니다.

다양한 인터페이스들을 나열해보고....과연 맥스가 얼마나 지원하는지를 검토해봐야겟지요.

여기서는 우선 OLE와 ActiveX 분야는 제외합니다....windows프로그래밍 분야이다 보니..

맥스기능도 배우기 급급한 세상에..ㅡ.ㅡ;

기본 인터페이스라고 해도 종류가 다양합니다. 그래서 모든 종류를 전부 설명하는 것은 힘들고

사용하고자 하는 것들을 골라서 사용하시면 됩니다. 각각의 사용법은 헬프파일을 참고하셔야 됩니다..

그리고 기쁜 소식은 헬프파일이 6.0에서 재대로 만들어졌습니다.

3.1까진 정상이었는데, 4.2, 5.1까지 엉망이다가..이제 좀 도움말 같이 작성햇더군요.

 

1. 다양한 인터페이스

이제  한번 직접 실행을 해서 어느정도 다양한 지를 보자구요.

실행하고 나서 굳이 다 알 필요는 없습니다.

자신을 사용하고자 하는 것들만 습득하시면 됍니다.

rollout test1 "맥스 3.x에서 지원하는 인터페이스"

(

bitmap a1 bitmap:(bitmap 50 50)

button a2 "button"

checkbox a3 "checkbox"

checkbutton a4 "checkbutton"

colorpicker a5 "colorpicker: "

combobox a6 "combobox:" items:#("1/2", "1/4", "1/8") height:5

dropdownlist a7 "dropdownlist:" items:#("1/2", "1/4", "1/8")

edittext a8 "edittext: "

label a9 "label"

listbox a10 "listbox: " items:#("1/2", "1/4", "1/8" ) height:3

mapbutton a11 "mapButton"

materialbutton a12 "materialbutton"

pickbutton a13 "pickbutton"

progressbar a14

radiobuttons a15 "radiobuttons: " labels:#("lbl 1", "lbl 2", "lbl 3")

spinner a16 "spinner: "

slider a17 "slider: "

timer a18

)

rollout test2 "맥스 5.x에서 지원하는 인터페이스"

(

Angle ang2 "Angle" diameter:40 align:#center range:[-180,270,45] startdegrees:270 dir:#cw

HyperLink update "야후로 가는 링크" color:(color 100 100 100) hoverColor:(color 255 0 255) address:"http://www.yahoo.com" align:#center

ImgTag ImgTag01 "imagetag" bitmap:(bitmap 32 32 color:white) style:#bmp_stretch  opacity:1 --??

MultiListBox MultiList01 "MultiListBox" items:#("A","B","C","d","e","f") height:4 selection:#(1,3)

timer time01 "test timer" interval:400

label test "1"

button b1 "visible1"

button b2 "visible2"

--각각 인터페이스에 대한 작동 부분

on ImgTag01 dblclick do (messagebox "이미지 정보." title:"Info")

on MultiList01 selected val do format "selected: % - %\n" val MultiList01.selection[val]

on MultiList01 doubleclicked val do format "doubleclicked: % - %\n" val MultiList01.selection[val]

on MultiList01 selectionEnd do format "selectionEnd: %\n" MultiList01.selection

 

on time01 tick do (

        valUp = (test.text as integer)+1

        test.text = valUp as string )

on b2 pressed do b1.visible = not b1.visible

) --roll

rof=newrolloutfloater "<<test>>" 300 500

 

addrollout test1 rof rolledUp:on

addrollout test2 rof rolledUp:on

 

2. cylinder의 속성 제어

위의 인터페이스에서 이제 몇개를 사용해서 작성해 보자

버튼으로 실린더를 만들고,

슬라이더를 이용해 길이와 반지름을 조절하고,

앵글을 이용해 각도를 조절해보자.

global cylinder_1

rollout test1 "인터페이스"

(

button a2 "button"

edittext a8 "이름: "

slider a17 "반지름: "  range:[0,100,1]

slider a18 "높이: "  range:[0,100,1]

Angle ang2 "Angle" diameter:40 color:gray align:#center range:[0,360,45] startdegrees:90 dir:#ccw

on a2 pressed do ( cylinder_1=Cylinder() )

on a8 entered text do (cylinder_1.name=text)

on a17 changed val do (cylinder_1.radius=val)

on a18 changed val do (cylinder_1.height=val)      

on ang2  changed val do (

cylinder_1.Slice_On =1 -- 슬라이스 모드를 켠다

cylinder_1.sliceFrom =0.0

cylinder_1.sliceTo =val

)

) --roll

rof=newrolloutfloater "<<test>>" 150 300

addrollout test1 rof

마우스 작동에 따라 스크립트가 오브젝트를 변형한다는 것을 알았을 것이다.

다양한 오브젝트를 직접 넣어보고 실행을 해보세요. 오류도 발견 되면 고쳐 가면서 직접해 봐야 합니다.

처음에는 조금씩 변형을 해보면서 경험해 보는 것이 좋습니다.

그럼, 제5장을 마칩니다.


 
[출처] 맥스스크립트 Maxscript 기초 강좌|작성자 naivelab

반응형
Posted by blueasa
, |

DataGridView to XML

Programming/C# / 2011. 3. 23. 17:37


음..테스트 안해봤지만 심플함. 해봐야지..
반응형
Posted by blueasa
, |

게임브리오 파티클 시스템 예제

programmatic particle systems.zip

출처 : http://freewill.egloos.com/867049
반응형

'Gamebryo > Effect' 카테고리의 다른 글

[펌] 체인라이트닝 이펙트 만들기  (1) 2011.06.11
[펌] 이펙트 에니메이션 방법  (1) 2011.05.20
Setup about Effect Dumy…  (0) 2011.03.21
파티클 컨트롤 해보기  (0) 2011.02.24
이펙트 출력  (0) 2011.02.08
Posted by blueasa
, |

추출할때 Dummy사 사라지지 않더록

에서 NiOptimizeKeep 선언한다.

그리고 추출후 어썰트 뷰로 재대로 되어있는지확인하자.

NiNode * pbackNode = (NiNode*)m_BackGraund->GetObjectByName("Dummy01");

반응형
Posted by blueasa
, |
http://search.naver.com/search.naver?ie=UTF-8&query=%EB%A7%A5%EC%8A%A4%EC%97%90%EC%84%9C+%EB%8D%94%EB%AF%B8%EB%85%B8%EB%93%9C+%EC%9D%B5%EC%8A%A4%ED%8F%AC%ED%8A%B8+%EC%8B%9C+NiOptimizeKeep
위 링크로 가셔서 카페 카테고리에서 [맥스에서 더미노드 익스포트 시 NiOptimizeKeep]을 찾아서 클릭하세요.
카페라서 바로 링크로 못가네요..

충돌을 위해 긴 시간동안 맥스와 씨름하고 있는(뭔가 아이러니..) 중에

오늘 빛과 같은 발견을 해서(나한테만이야 -_-)

알려주기 위하여 글쓰기를 눌렀어

 

 

주제 : 맥스 작업 후 익스포트 시 노드 생성 관련

스샷과 함께 설명해 주겠어

 

 

1. 아래와 같은 구조로 되어있는(ST-Soldier는 모델링과 스킨들이 하나로) 맥스파일을 익스포트 해서 nif파일을 뷰어로 보면,

 

 

 

2. 아래와 같은 구조로 노드가 구성되어 있어. 빨간줄 쳐논걸 잘봐

 

 

3. 그래서 우리 더미로 같은 구조로 해보면,

 

 

4. 아래처럼 모델링들의 메쉬들이 노드 없이 되버려. 이러면 안돼

 

 

5. 내가 대충 만들어본 우리 게임의 맵 더미를 아래와 같이 구성해놓고 뷰어로 돌려봐도,

 

 

6. 컬리젼 부분만 노드가 생겨있고 스타트 지점이나 오브젝트들은 노드없이 되버리지. 역시 이러면 안되는거야

 

 

7. 해결방법은 바로 아래와 같은거야. 오브젝트 프로퍼티 들어가서 유저 디파인드에다가 "NiOptimizeKeep" 이라고 적어줘야해

   (아니면 적용할 것들을 선택해놓고 왼쪽 브리오 툴바에서 KEEP이라고 되어있는걸 켜서 체크하는거 하나 있는데 체크하고

    Apply to Selection을 한번 눌러주면 돼)

 

 

8. 캔츄씨?

 

 

9. 아하? 알겠지?

 

 

 

 

이거 꼭 해줘야 하니까 맥스 만지는 사람들은 꼭 참고해서 작업시에 적용을 해줘 나중에 대량 수정작업 안하게 ㅋㅋ

그럼 난 이만 퇴근~

반응형
Posted by blueasa
, |

더미,포인트등은 그냥 export되지 않는다.

 

3d Max

 

helpers의 object type에서 dummy, point등등 을 선택 우클릭

object properties 에서 User Defined -> User Defined Properties 여기에

NiOptimizeKeep <- 이걸 써넣으면 NiNode로 뽑힌다.

 

Customize User Interface에 Gamebryo Tools내에

 NiOptimization Helper를 사용 할 수도 있다.

Do Not Optimize This check

Apply to Selection click <- 이건 선택한 것만

or Select Matching Objects click <- 이건 전부?

 

NiOptimizeKeep이 추가 되지 않으면

Scene Root(NiNode)에 메쉬들은 NiMesh로 뽑힌다.

메쉬들을 NiNode로 뽑을려면 추가해줘야한다.


 
[출처] 3dMax의 Helpers-Object Type를 NiNode로 Export 하기|작성자 cry

반응형
Posted by blueasa
, |

gamebryotip

Gamebryo / 2011. 3. 21. 20:14
맵 처리

* 그라운드 매쉬 * 지형높이 : 아바타 좌표에서 높은 높이에서 Picking 함. (테스트 완료)

* 오브젝트 충돌 : 겜브리오 충돌시스템 사용함. MAX에서 충돌박스 심기

* 지형위 오브젝트로 이동 Issue : Picking 기법 체크

* 정적오브젝트

  • 애니메이션 오브젝트 테스트 완료

* 동적맵구성

  • Issue : 레벨 에디팅
아바타

* 충돌박스

  • 큐브타입으로 심어서 테스트 완료

* 애니메이션

  • Max에서 Gamebryo Animation Manager를 통한 텍스트키 심기
    • Gamebryo Tools에서 Animation Manager아이콘을 클릭한다.
    • Sequence Tags란에 속해있는 Extra Info Tags란에서 설정하면 된다.
    • Key Text에서 텍스트 키 이름을 입력하고 Tag Time에서 원하는 시간을 입력한 후 Add Info Tag버튼을 누르면 텍스트키가 등록된다.

* 파츠

* 도구장착

익스포트

* Max의 dummy는 플러그인에서 성능 향상 쪽을 확인해서 Off해줄것 ( 자식없는것 없애는 게 있음 )

  • Scene Graph Optimization 더블클릭 할것

* Max hierarchy와 똑같은 구조의 Scene graph Export하기

  • Scene Graph Optimization에서 Remove childless nodes, Remove single-child nodes, Merge sibling nodes, Merge sibling NiTriShape objects 4개의 항목을 off한다.

메뉴얼_위치_artist_s_guide_-_gamebryo_3ds_max_plug-in_-_3ds_max_plug-in_tutorials_-_changing_optimization_setting_in_3ds_max}

* 애니메이션 매니저 사용하기 ⇒ .kf .kfm 파일을 뽑기 위해선 애니메이션 매니저를 반드시 써야한다. 메뉴얼_위치_artist_s_guide_-_gamebryo_3ds_max_plug-in_-_3ds_max_plug-in_tutorials_-_simple_animation_sequence}

* Gamebryo에서 캐릭터가 정면( X축 양의방향 )을 향하게 하려면 Max에선 캐릭터가 Y축 음의 방향을 바라보게 한 후 익스포트 해야한다.

* File Export Script관련( .nif .kf .kfm )

  • Controller Extractor
    • Plug-in 중에 Controller Extractor를 찾아 더블클릭하면 관련 옵션을 수정할 수 있다.
    • 메뉴얼을 보면 시퀀스 추출 방법 선택, KF file naming convention, KFM file 생성 유무, 시퀀스간 트랜지션 셋팅 등을 설정할 수 있다.
    • @ Root같은 .kf 파일이름에 Actor Roots Name(character name)을 집어 넣지 않으려면 KF File Naming Convention란에서 Use character name 항목을 비활성화 시키면 된다.

메뉴얼_위치_reference_-_toollibs_-_tool_plug-ins_-_controller_extractor}

* Hidden object 제거하고 Export하는 방법

  • Process Script에서 Edit버튼을 누르고 Remove Hidden Object Plug-in을 추가
  • Move up 버튼을 눌러 최상위로 올림
  • Plug-in 중에 Scene Graph Optimization을 더블클릭해서 에디트창을 오픈
  • Remove childless nodes 체크( Remove Hidden Object Plug-in을 추가 함으로써 Hidden Object의 Geometry는 모두 Export되지 않는다. Node의 자식이 없다는 건 Geometry가 없다는 것과 상통하므로 자식이 없는 불필요한 Node들은 제거해서 Export한다. 단, Leaf Node나 단일 Node가 필요한 Dummy일 경우에는 이 옵션을 체크 안 하거나 유저지정속성을 통해 Node가 유지되도록 해야한다. )

* Optimization을 통해 제거 될 수 있는 Node들을 보존하는 방법

  • Scene Graph Optimization 내 Remove childless nodes나 Remove single-child nodes 항목을 체크하면 필요 없는 Node들을 제거하게 된다. 그러나 특정 문자열을 통해 노드가 제거하지 못하게 보존하는 방법이 있다.
  • 해당 오브젝트 속성( Object Properties )을 열면 4번째 탭에 User Defined라는 항목이 있다. 항목을 선택해 공란에 “NiOptimizeKeep”라는 특수 문자열을 넣으면 된다.

* 파츠 아이템( 옷, 안경등 신체의 직접적으로 접촉되는 것들, 스킨정보 必 ) Export

  • 캐릭터에 아이템을 장착한 상태에서 Export하면 된다.
  • 장착한 아이템 빼놓고 나머지 것들은 모두 Hidden Object로 설정한다.
  • 캐릭터에 biped정보도 함께 Export한다.
  • 캐릭터와 아이템은 따로 링크를 시키지 않는다.

* 파츠 아이템( 손에 붙이는 무기나 오브젝트, 현재는 스킨정보 無 ) Export

  • 캐릭터 biped정보는 필요 없고 순수 아이템 정보만 Export하면 된다.
  • 캐릭터 본( 예시: 손, 발 )과 연결될 아이템 부위에 Dummy를 하나 만들어 아이템에 링크 시킨다.
  • 원점에 위치하여 Export한다.

* 파츠 관련 이슈

  • 예를들어 손에 주전자를 Attach한다고 할 때, 현 시점(2008.09.24)에서는 본에 직접적으로 Attach를 하지만 차후에는 손에 Dummy를 만들어 붙일 수 있게 변경 할 것이다.
  • 손 <ATTACH> Dummy - 주전자 ==============⇒ 손 - Dummy <ATTACH> Dummy - 주전자
  • 현재 손에 붙이는 무기나 오브젝트는 스키닝 정보가 없는 것들만 가능하지만 차후에는 스키닝 정보가 있는 것들도 지원해야 할 것이다.

* 각 애니메이션 별 Loop속성 설정 방법

  • 캐릭터 애니메이션(kfm)
    • Animation Manager에서 Loop Sequence란에 박스 체크
  • 텍스처 좌표 애니메이션( ifl파일을 이용했을 경우 )
    • Material Editor에서 맵핑 된 텍스처(ifl파일)를 선택
    • 선택된 맵 에디터에서 Time란 안에 End Condition란에서 선택한 후 체크
  • 오브젝트 트랜스폼 애니메이션
    • Max 메인메뉴에서 Graph Editors → Track View - Curve Editor 선택하면 에디터 창이 열림
    • 메뉴에서 Controller → Out-of-Range Types 선택하면 에디터 창이 열림
    • Loop 그래프 밑에 버튼 2개를 모두 활성화 시킴
    • 파티클 애니메이션
    • 파티클 오브젝트를 선택하고 Max 기본 툴바에서 Modify를 선택
    • 여러가지 파티클에 관련된 파라미터란들이 나오는데 스크롤을 쭈욱내리면 제일 밑에 Gamebryo Export Params란이 있다. 거기 안에 Simulation Options란에서 선택한 후 체크
  • Loop속성이 잘 적용됐는지 확인 하는 방법
  • Max에서 애니메이션 작업을 한 후 Asset Viewer에서 애니메이션을 돌려보면 보통 Loop를 하게 된다. 그러나 이걸 100% 신뢰해서는 안 된다. Asset Viewer가 내부적으로 Loop를 돌리기 때문이다( 추측 -_-;;; ) 그러므로 정작 App에서는 Loop가 안 될수 있다. Loop속성이 On이 되었는지 정확히 판단하려면 Time Controller를 뒤져봐야 한다.
  • Asset Viewer의 Scene Graph Tree에서 해당하는 Geometry를 선택하면 노드에 관한 정보가 나온다. 보통 부모노드에 트랜스폼 정보가 있으므로 부모노드의 Time Controller 정보를 보면 된다.
  • 해당 하는 Controller를 더블클릭 해서 Basic Info란의 Cycle Type을 확인해서 LOOP( Max에서 Loop를 On했을 경우)라고 써 있으면 정상적으로 익스포팅 된 것이다. 참고로 텍스처 좌표 애니메이션은 Max에서 키를 안 잡기 때문에 Time Controller에 아무 정보도 기입되어 있지 않다.

카메라

* Gamebryo좌표계랑 Max좌표계는 같은 오른손 좌표계를 쓰지만 방향을 나타내는 카메라 뷰 벡터들( Up, Direction, Right )은 서로 다르다.

  • Gamebryo( Up : 양의 Y축, Dir : 양의 X축, Right : 양의 Z축 )
  • Max( UP : 양의 Z축, Dir : 양의 Y축, Right : 양의 X축 )
  • 그러므로 맥스에서 익스포터한 오브젝트들이 정상적으로 보이게 하려면 카메라를 X축으로 -90도 Z축으로 90도 회전해야 한다.

메뉴얼_위치_programmers_s_guide_-_general_topics_-_programming_for_scene_rendering_-_viewing_geometry_-_cameras}

이펙트

* 빌보드 * 파티클

  • Issue : Max 기반의 Effect 작업방식 확인 필요 .
물리
리소스 관리
게임로직


출처 :  
http://joygram.org/wiki/doku.php?id=gamebryotip
반응형

'Gamebryo' 카테고리의 다른 글

[펌] 게임브리오 관련..  (0) 2011.07.25
Gamebryo Default Coordinate  (0) 2011.06.17
[Link] 게임브리오 강의  (0) 2011.03.28
Posted by blueasa
, |