2014년 7월 9일 수요일

Cocos2d-x



Cocos2d-x 의 특징









Cocos2d-x 는 게임엔진이다.



모바일디바이스는, PC 에 비해서, 하드웨어 수행성능이 현저히 떨어진다.

이런 환경에서는, 앱의 크기, 랜더링 속도(FPS) 가 매우 제한적이다.


스마트폰에서 실행되는 게임엔진은 많지만, 대부분은 앱의 크기가 매우 커진다거나,
랜더링 속도가 매우 느리다는 특징이 있다.

Cocos2d-x 는 앱의 크기와 랜더링 속도에서 사용가능한 수행성능을 보여준다.




Cocos2d-x 의 특징은 다음과 같다.

1. 오픈소스이다. 상용앱을 만드는데 라이센스 문제가 없다.


2. C++ 로 개발가능하다. 안드로이드에서 Java 가 아닌 C++ 을 사용할수있다.


3. 문서, 튜토리얼, 커뮤니티가 활발하다. 즉, 학습하는데 충분한 문서를 구할수있다.
      예를들어, C++ 로 개발하면서 AdMob 같은 Java 라이브러리를 연동하는
      방법에대한 문서가 이미 존재한다.


4. C++ 이므로, 당연히 build target 에 대한 문제가 있다.
    Native code 이므로 CPU Architecture 에따라 따로따로 빌드해야한다. ( arm, x86, mips )
    이부분에 아픔이 있다.



5. Native code 이므로, Java 보다 코드의 복잡도가 높아진다.
    메모리 관리에대한 위험도가 높아진다.
    개발자는 머리가 좀더 아파진다.




6. Cocos3D 가 개발중이다. 출시 예정일은 2015 년. !!!!

    현재는 3D Extension 으로 2.5D 게임 개발이 가능하다.





















Cocos2d-x 의 cpp-test 를 Eclipse 에서 run 하는 방법


http://cocos2d-x.org/wiki/How_to_Build_an_Android_Project_with_Eclipse



Eclipse에서 Cocos2d-x Sample 을 build 하고, android phone 에서 실행시키는 과정.



<전제조건>
다음 항목이 설치되어 있어야한다.

Cocos2d-x
JDK/SDK 1.6+
NDK r9d+
Apache Ant
Python 2.7.5
Eclipse with ADT Bundle

Windows 콘솔에서 android-build.py 를 사용하여 Libcocos2dx 가 빌드되어있어야한다.



1. Eclipse 에서 proj.android 를 open 한다.

Eclipse 를 실행시킨다.

Package Explorer 에서 right click 한후, Import... 를 선택한다.

Existing Android Code Into Workspace 를 선택하고 Next 를 선택한다.






다음 폴더를 선택한다.

[cocos2d-x directory]\tests\cpp-tests\proj.android


Finish 를 선택한다.



2. Libcocos2dx project 를 import 한다.

위와 동일한 방법으로 다음 위치에 있는 프로젝트를 import 한다.

[cocos2d-x directory]\cocos\platform\android\java




3. build 하고 run 시켜본다.


Run as .. -> Android Application



















2014년 7월 7일 월요일

Cocos2d-x 의 cpp-test 를 android phone 에서 run 하는 방법


(http://cocos2d-x.org/wiki/How_to_run_cphttp://cocos2d-x.org/wiki/How_to_run_cpp-tests_on_Androidp-tests_on_Android)



윈도우 콘솔에서 Cocos2d-x Sample 을 build 하고, android phone 에 설치하는 과정.




<개발환경 전제조건>

아래 소프트웨어가 이미 설치되어 있어야 한다.

Cocos2d-x
Java JDK/SDK
Android SDK
Android NDK r9d+
Apache Ant
Python 2.7.5


<환경변수>
시스템 환경변수에 다음 변수가 설정되어 있어야 한다.

COCOS2D_CONSOLE_ROOT
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT

설정되어있지 않다면 Cocos2d-x 폴더에서 setup.py 를 실행시켜 설정한다.



<빌드>
Cocos2d-x Sample 을 build 하려면, android-build.py 를 사용한다.


android list targets

python android-build.py -p 19 cpp-tests



<설치>
빌드된 apk 파일을 android phone 에 설치하려면, adb 를 사용한다.

adb install CppTests-debug.apk











Windows 에서 Cocos2d-x 시작하기

<Windows 에서 Cocos2d-x 시작하기>


Cocos2d-x 설치후, sample 프로젝트를 실행해보는 과정.


1.Cocos2d-x 최신버전을 다운받는다.

2. build 폴더에 있는 cocos2d-win32.vc2012.sln 파일을 Visual studio 2012 에서 연다.

3. cpp-tests 프로젝트를 시작프로젝트로 설정(Set as StartUp Project)하고, build, run 해본다.









새 프로젝트 만드는 방법.


새 프로젝트를 만들때, Visual Studio 의 기존 Wizard 방식 ( File / New / Project... ) 은 아직 존재하지 않는것으로 보인다.
대신 cocos console 을 사용한다.
cocos console 은 Python 이 설치되어 있어야 한다.



1. Python 이 설치되어 있어야 한다.

2. 시스템 환경변수 Path 에 <cocos console> 경로를 넣어주어야 한다.

       "[cocos2d-x root]\tools\cocos2d-console\bin\"


경로 설정이 제대로 되었는지 윈도우 콘솔에서 다음 명령어로 확인해 본다.

cocos -h
cocos new -h


3. 새 프로젝트를 만드는 명령어는 다음과 같다.

"cocos new MyGame -p com.MyCompany.MyGame -l cpp -d F:/MyProject"



-p : package name
-l : language
-d : directory


4. 생성된 proj.win32 폴더에 있는 솔루션 파일( .sln )을 Visual Studio 에서 연다.

5. build, run 해본다.









2014년 4월 25일 금요일

Vertex Shader problem in Galaxy S Mali GPU


Google document 의 문제인가.
Galaxy S Mali GPU 의 문제인가.


http://developer.android.com/training/graphics/opengl/index.html


http://stackoverflow.com/questions/22384272/android-opengl-es-not-rasterizing-matrix-multiplication-switched




------- EDIT : SOLUTION FOUND -------
Okay, I found the error. The google document shows a "wrong" the multiplication of the matrices in the vertex shader:
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
   gl_Position = uMVPMatrix * vPosition;
}
This doesn't seem to be a problem for my old Galaxy S1 but somehow the S3 (or the Mali GPU) is picky about this. I changed the order of multiplication to this:
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
   gl_Position = vPosition * uMVPMatrix;
}
And it works (also on the S1). Still not sure why the S1 works fine with both versions but this solves the problem.




--------------------------------------------------------
Google document 는 문제가 없고,
Galaxy S Mali GPU 도 문제가 없다.


translate 까지 정확히 동작하려면 matrix 가 앞에오는 코드가 맞다.

uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
   gl_Position = uMVPMatrix * vPosition;
}



model matrix 에서 rotation, translation 까지 정상적으로 동작하게하려면,
 matrix 가 앞에오는 다음 코드가 맞다.


gl_Position = uMVPMatrix * vPosition;



viewport 설정.
view matrix 설정.
projection matrix 설정.
model matrix 설정.


gl_Position = vPosition * uMVPMatrix;

Samsung Galaxy note 8.0 SHW-M500W 에서 위 코드만 정상적으로 출력되고,  matrix 가 앞에 오는 맞는 코드는 출력되지 않는것처럼 보이는 현상은 projection matrix 가 잘못 설정되어 있거나, matrix 를 곱하는 순서가 잘못되었거나, 같은 matrix 를 입출력에 같이사용하거나 할때 나타난다.

matrix 가 뒤에 오는 위 코드를 사용하면 translate 가 되지 않는다.


model matrix 에서 rotation, translation 까지 정상적으로 동작하게하려면,
 matrix 가 앞에오는 다음 코드가 맞다.


gl_Position = uMVPMatrix * vPosition;



Eclipse hangs at the Android SDK Content Loader

eclipse -clean