2020년 2월 23일 일요일

tiled map ( .tmx ) 사용할때 타일에서 공간이 생기는 버그


cocos2d에서 .tmx 파일을 불러와 사용할때 아래 그림과 같이 공간이 생기는 버그를 볼 경우가 있다.


이때는 tiled map editor의 버전이나 cocos2d-x의 버전을 바꿔도 해결이 안된다.

\cocos2d\cocos\base 폴더에 보면 ccConfig.h 파일이 있다.
여기에 아래 부분을 변경해 주면 된다.

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
#endif

위 값이 0으로 되어 있는것을 1로 바꿔 주면 된다.
이 방법으로 하면 계산 방식이 바뀌면서 문제는 해결되지만 프레임 드롭이 약간 생기는것을 발견했다 ( 2~3 정도로 미미하지만 찜찜한 수준 ^^ )

근본적인 해결책은 아래 URL에 나와있는대로 이미지 생성 자체를 바꿔야한다.
https://discuss.cocos2d-x.org/t/avoiding-artifacts/19733/7

아래는 사이트에서 발췌한 내용
  1. Download Texture Packer if your haven’t already. Do it! It’s free and it’s a great tool for creating 2d sprite sheets. Also we need it’s border padding and shape padding features. Download here: https://www.codeandweb.com/texturepacker/download 10
  2. Open Texture Packer.
  3. Under the texture section, change png opt level to 0, unless you’re using the pro version. Also, unless you’re using the pro version, click show advanced under the layout section and uncheck detect identical sprites.
  4. Under the layout section, change the algorithm to basic, and sort by to name. This will arrange your tiles by alphabetical order, allowing you to choose . Here’s an example as to how to name your sprites: “01_whole_block.png, 02_half_block.png.”
  5. Drag and drop, or import your sprites into Texture Packer.
  6. Under the sprites section, switch trim mode to none, and change border padding and shape padding both to 1.
  7. Go ahead and click publish sprite sheet and save it to wherever.
  8. Open Tiled and create a new map. Keep the tile size to the exact size of your tiles without the padding.
  9. Click Map > New Tileset. Keep the tile width and height to the exact size of your tiles without the padding. Change Margin and Spacing both to 1px. Import your sprite sheet.
  10. Create an awesome tile map and save it out. Import it into your project and click on the file to edit the .tmx file.
  11. Inside the map tag change the tilewidth and tileheight to 1 pixel less than their original size. In my case they were 138 px, so I changed them both to 137 px. Do not change the tilewidth and tileheight inside the tileset tag.
참고로 나는 아직 해보지 않았음 ^^







2019년 7월 24일 수요일

cocos2d-x 3.17 버전에 box2d 사용하기

이전 3.2, 3.14 버전에서 셋팅하는 방법은 아래 URL에 있음
https://kylebyun.blogspot.com/2018/03/cocos-32-box2d.html

3.17 버전에서 box2d 셋팅을 하려면 include 폴더와 전처리기 셋팅을 해야 한다.

1. include에 box2d 추가

프로젝트 속성 - C/C++ - 일반 - 추가 포함 디렉토리
$(EngineRoot)external\Box2D\include; 를 추가한다



2. 전처리기 셋팅
메인 프로젝트 셋팅과 libcocos2d 프로젝트의 속성 - C/C++ - 전처리기 - 정의 에 아래처럼
CC_ENABLE_CHIPMUNK_INTEGRATION=0; 으로 바꾸고 CC_ENABLE_BOX2D_INTEGRATION=1; 값을 추가 한다







2019년 3월 3일 일요일

말레이시아에서 살기

오늘은 근황을 올려봅니다. 

지금은 쿠알라룸푸르의 몽키아라에 있습니다.
사실 작년까지는 이곳에 있을지 생각도 못했습니다.

어제 아침에 집에서 찍은 사진입니다.

아이가 이제 초등학교 3학년 올라가는데요.
그동안 한국에서 스트레스가 많았습니다. 
다들 생각이 다르시겠지만 저는 한국 교육의 방향이 싫었습니다. 
사는 곳이 좀 그래서 그럴수도 있지만 학교 갔다오면 시작되는 학원, 그리고 숙제까지 하면 아이 일정이 10시에 끝나는것이 부지기수고, 학교 생활도 황당합니다.

여전히 질문을 받아들이지 않는 교육체계과 심지어 쉬는 시간과 점심시간에도 밖에 나가지 못하게 통제를 하더군요. 많은 부모들이 아이들 다치는 것이 싫어 그렇게 요구했다고 하는데 학교라는 곳이 그런 부모들의 요구에 따라 아이들을 구속하는 곳일까요.
어떤 아이들은 쉬는 시간에 화장실에 가는것을 말하지 않고 갔다고 혼났다고 하네요. 
아이말이라서 100% 그대로 받아 들여야 할지 모르겠지만 그동안에 이야기를 종합해보면 신빙성이 있는것 같습니다. 

지난 1년 아이가 너무 힘들어 했고, 저희도 힘들었습니다. 

그래서 캐나다, 호주, 미국 등등 여러나라를 고민했어요.
일단 미국은 아이에게만 비자가 나오기때문에 부모가 따라가지 못해서 탈락시켰고, 물론 그동안 출장 경험으로 미국이 정말 살기 좋은 나라인가, 그리고 미국의 공교육이 제대로 이루어 지고 있는지 의문이 들었습니다.
물론 사립학교를 보낸다면 만족할만 했지만 비용의 압박과 부모의 부재는 도저히 받아 들이기 싫었습니다.

캐나다는 부모한명은 가디언 비자가 나오기에 괜찮지만 비싼 물가와 와이프가 추운곳을 싫어해서 접었습니다.그리고 저도 같이 있고 싶었고요. 

그러다 지난해에 말레이시아에 한달 살기를 왔습니다.
그냥 여행이나 가자고 온것이죠.
일단 공기가 좋습니다. 물론 헤이즈가 있을때는 통합대기지수가 70까지 올라가지만 ^^  평소에는 30~40 정도 입니다. 한국은 미세먼지가 심해지면 통합대기 지수가 200까지 올라가는 것은 일반적이죠 T.T

그리고 국제학교가 잘되어 있습니다.
괜찮은 국제학교 보내려면 미국의 사립학교 정도 비용까지 나가지만 조사를 해보니 수준도 높았고, 관리도 잘되고 있었습니다.
무엇보다도 MM2H라고 세컨드홈 비자가(은퇴비자) 제도가 있어서 많은 한국인과 일본인들이 와 있었습니다. 부모가 같이 생활 할수 있는거죠.

여하튼 그러한 이유로 지금 말레이시아에 와 있습니다.
사실 3일전에 왔습니다. 이삿짐은 다음달에 도착을 합니다. 




말레이시아의 아파트는 모두 수영장이 있습니다.
수영을 좋아하는 아이들에게는 천국이죠. 
그래서 학교 갔다오면 일단 학원을 가는(응??) 아이들이 있지만 많은 아이들은 수영이나 운동을 합니다. 

저는 한국에서 일을 정리해야 되서 앞으로 1~2년은 두세달에 한번씩 한국에 왔다갔다 하지만 
내년부터는 더 오랜 시간 이곳에 있을것 같습니다. 
아이가 대학갈때까지 10년동안은 여기 있을것 같아요.
대학은 어느나라로 갈지 그때가서 결정이 되겠지요 ^^

2018년 12월 4일 화요일

mytrip.com 후기 - 절대 이 사이트 이용하지 마세요

개발에 대한 이야기만 쓰고 있지만 이 이야기는 도저히 안 쓸수가 없네요.

추후 항공권 발행을 할때 mytrip.com은 절대 사용하지 말기 바랍니다.

평소 항공권을 구매할때 agoda 항공 또는 skyscanner을 사용하는데 가끔 mytrip.com이 보일때가 있습니다.

이번에 상해 다녀오면서 mytrip.com이 저렴하게 나와서 구매를 했는데 정말 황당한 일을 겪었네요.

아래가 구매 내역입니다
가격 세부내역

성인 × 3₩779,856
어린이 × 1₩245,252
내역 / 할인
할인-₩75,961
좌석 선택₩117,906
지불방법수수료₩18,984
화물 보장 서비스 × 4₩35,864
프리미엄 여행공지사항₩5,118
프리미엄 서포트 패키지 × 4₩70,944

위에 보면 좌석선택 수수료가 4인에 대해서 12만원정도 청구가 되었는데요. 

4명이 아무자리나 잡아 두었더군요.
저는 4명 같이 앉게 자리 지정을 했는데 
갈때는 2명만 옆자리고 나머지 두명은 앞자리 뒷자리로 보냈으며 , 올때는 2명씩 옆자리로 잡아 두었더군요. 
심지어 아이까지 있는데 ㅎㅎ
항공사에 물어보니 자기네는 일반석 잡을때 공짜로 지정을 할수 있다고 하더라고요. 
자기들은 모르는 일이라고 합니다.

항의 메일을 보내려고 했더니 다른 분들 쓴글을 보니 메일 다 씹어 버린다고 해서 안보내고 있습니다. ㅎㅎㅎ

그리고 프리미엄 서포트라고 있어서 뭔가 하고 구매를 했더니 이건 도대체 뭔가 싶네요 
참 황당한 여행사네요.

2018년 7월 25일 수요일

VMWare 에서 갑자기 네트워크가 작동되지 않을때



위 그림을 보면 VMWare NAT Service가 있는데
이것이 멈추어 있는 경우가 있다.

이것을 실행 상태로 바꾸어 주면 된다.




VMWare에서 Unable to connect to the MKS: Too many socket connect attempts; giving up

3개월정도 잘 사용하던 VMWare가 아래의 오류를 표시하면서 갑자기 실행되지 않는다.

Unable to connect to the MKS: Too many socket connect attempts; giving up

일단 cmd 창을 열어서 아래의 명령어로 확인을 해 본다.
sc query vmx86
sc query hcmon
sc query VMauthdService

내 경우 VMauthdService가  STOP된 상태로 보였었다.
물론 아래 화면세서 지금은 정상으로 보인다
















서비스 관리자 화면을 열어서 ( 컴퓨터관리 ->서비스 )
아래의 서비스를 실행시켜 주면 된다.





















위의 서비스를 실행시키고 다시 VMWare를 가동하면 정상적으로 작동된다.

맥에서 Parallels를 8년정도 사용했는데 그동안 아무런 문제점이 없었다.
그런데 3개월 사용하던 VMWare에서 문제가 나오는것을 보면
집에서 간단히 사용하는 안정성 면에서는 Parallels가 더 좋지 않나 생각이 된다.


2018년 7월 17일 화요일

웹색상 영문이름과 16진수/10진수 코드

아래 나무사랑 사이트에서 가져온 내용을 편집한 것입니다.
나무사랑



HTML name Hex code
RGB
Decimal code
RGB
Red colors
IndianRed CD,5C,5C 205,92,92
LightCoral F0,80,80 240,128,128
Salmon FA,80,72 250,128,114
DarkSalmon E9,96,7A 233,150,122
LightSalmon FF,A0,7A 255,160,122
Red FF,00,00 255,0,0
Crimson DC,14,3C 220,20,60
FireBrick B2,22,22 178,34,34
DarkRed 8B,00,00 139,0,0
Pink colors
Pink FF,C0,CB 255,192,203
LightPink FF,B6,C1 255,182,193
HotPink FF,69,B4 255,105,180
DeepPink FF,14,93 255,20,147
MediumVioletRed C7,15,85 199,21,133
PaleVioletRed DB,70,93 219,112,147
Orange colors
LightSalmon FF,A0,7A 255,160,122
Coral FF,7F,50 255,127,80
Tomato FF,63,47 255,99,71
OrangeRed FF,45,00 255,69,0
DarkOrange FF,8C,00 255,140,0
Orange FF,A5,00 255,165,0
Yellow colors
Gold FF,D7,00 255,215,0
Yellow FF,FF,00 255,255,0
LightYellow FF,FF,E0 255,255,224
LemonChiffon FF,FA,CD 255,250,205
LightGoldenrodYellow FA,FA,D2 250,250,210
PapayaWhip FF,EF,D5 255,239,213
Moccasin FF,E4,B5 255,228,181
PeachPuff FF,DA,B9 255,218,185
PaleGoldenrod EE,E8,AA 238,232,170
Khaki F0,E6,8C 240,230,140
DarkKhaki BD,B7,6B 189,183,107
Purple colors
Lavender E6,E6,FA 230,230,250
Thistle D8,BF,D8 216,191,216
Plum DD,A0,DD 221,160,221
Violet EE,82,EE 238,130,238
Orchid DA,70,D6 218,112,214
Fuchsia FF,00,FF 255,0,255
Magenta FF,00,FF 255,0,255
MediumOrchid BA,55,D3 186,85,211
MediumPurple 93,70,DB 147,112,219
BlueViolet 8A,2B,E2 138,43,226
DarkViolet 94,00,D3 148,0,211
DarkOrchid 99,32,CC 153,50,204
DarkMagenta 8B,00,8B 139,0,139
Purple 80,00,80 128,0,128
Indigo 4B,00,82 75,0,130
DarkSlateBlue 48,3D,8B 72,61,139
SlateBlue 6A,5A,CD 106,90,205
MediumSlateBlue 7B,68,EE 123,104,238
Green colors
GreenYellow AD,FF,2F 173,255,47
Chartreuse 7F,FF,00 127,255,0
LawnGreen 7C,FC,00 124,252,0
Lime 00,FF,00 0,255,0
LimeGreen 32,CD,32 50,205,50
PaleGreen 98,FB,98 152,251,152
LightGreen 90,EE,90 144,238,144
MediumSpringGreen 00,FA,9A 0,250,154
SpringGreen 00,FF,7F 0,255,127
MediumSeaGreen 3C,B3,71 60,179,113
SeaGreen 2E,8B,57 46,139,87
ForestGreen 22,8B,22 34,139,34
Green 00,80,00 0,128,0
DarkGreen 00,64,00 0,100,0
YellowGreen 9A,CD,32 154,205,50
OliveDrab 6B,8E,23 107,142,35
Olive 80,80,00 128,128,0
DarkOliveGreen 55,6B,2F 85,107,47
MediumAquamarine 66,CD,AA 102,205,170
DarkSeaGreen 8F,BC,8F 143,188,143
LightSeaGreen 20,B2,AA 32,178,170
DarkCyan 00,8B,8B 0,139,139
Teal 00,80,80 0,128,128
Blue/Cyan colors
Aqua 00,FF,FF 0,255,255
Cyan 00,FF,FF 0,255,255
LightCyan E0,FF,FF 224,255,255
PaleTurquoise AF,EE,EE 175,238,238
Aquamarine 7F,FF,D4 127,255,212
Turquoise 40,E0,D0 64,224,208
MediumTurquoise 48,D1,CC 72,209,204
DarkTurquoise 00,CE,D1 0,206,209
CadetBlue 5F,9E,A0 95,158,160
SteelBlue 46,82,B4 70,130,180
LightSteelBlue B0,C4,DE 176,196,222
PowderBlue B0,E0,E6 176,224,230
LightBlue AD,D8,E6 173,216,230
SkyBlue 87,CE,EB 135,206,235
LightSkyBlue 87,CE,FA 135,206,250
DeepSkyBlue 00,BF,FF 0,191,255
DodgerBlue 1E,90,FF 30,144,255
CornflowerBlue 64,95,ED 100,149,237
RoyalBlue 41,69,E1 65,105,225
Blue 00,00,FF 0,0,255
MediumBlue 00,00,CD 0,0,205
DarkBlue 00,00,8B 0,0,139
Navy 00,00,80 0,0,128
MidnightBlue 19,19,70 25,25,112
Brown colors
Cornsilk FF,F8,DC 255,248,220
BlanchedAlmond FF,EB,CD 255,235,205
Bisque FF,E4,C4 255,228,196
NavajoWhite FF,DE,AD 255,222,173
Wheat F5,DE,B3 245,222,179
BurlyWood DE,B8,87 222,184,135
Tan D2,B4,8C 210,180,140
RosyBrown BC,8F,8F 188,143,143
SandyBrown F4,A4,60 244,164,96
Goldenrod DA,A5,20 218,165,32
DarkGoldenrod B8,86,0B 184,134,11
Peru CD,85,3F 205,133,63
Chocolate D2,69,1E 210,105,30
SaddleBrown 8B,45,13 139,69,19
Sienna A0,52,2D 160,82,45
Brown A5,2A,2A 165,42,42
Maroon 80,00,00 128,0,0
White colors
White FF,FF,FF 255,255,255
Snow FF,FA,FA 255,250,250
Honeydew F0,FF,F0 240,255,240
MintCream F5,FF,FA 245,255,250
Azure F0,FF,FF 240,255,255
AliceBlue F0,F8,FF 240,248,255
GhostWhite F8,F8,FF 248,248,255
WhiteSmoke F5,F5,F5 245,245,245
Seashell FF,F5,EE 255,245,238
Beige F5,F5,DC 245,245,220
OldLace FD,F5,E6 253,245,230
FloralWhite FF,FA,F0 255,250,240
Ivory FF,FF,F0 255,255,240
AntiqueWhite FA,EB,D7 250,235,215
Linen FA,F0,E6 250,240,230
LavenderBlush FF,F0,F5 255,240,245
MistyRose FF,E4,E1 255,228,225
Gray colors
Gainsboro DC,DC,DC 220,220,220
LightGrey D3,D3,D3 211,211,211
Silver C0,C0,C0 192,192,192
DarkGray A9,A9,A9 169,169,169
Gray 80,80,80 128,128,128
DimGray 69,69,69 105,105,105
LightSlateGray 77,88,99 119,136,153
SlateGray 70,80,90 112,128,144
DarkSlateGray 2F,4F,4F 47,79,79
Black 00,00,00 0,0,0



2018년 4월 7일 토요일

debian에 mysql 설치

기본적인 설치는 아래 URL의 정보대로 하면 된다.
기본 설치 안내

간략히 적어보면 아래 순서대로 하면 된다.

1. 인스톨
apt-get install mysql-server 

2. root계정으로 mysql 접속
mysql -u root -p
(root 계정으로 했으면 암호를 입력하지 않고 리턴을 해도 접속이 된다)

3. root 계정 암호 변경
user 정보 테이블이 들어있는 mysql db를 선택하고 암호 변경함
use mysql;
update user set password = password('변경암호') where user = 'root';

4. 계정추가
create user '아이디'@''ip identified by '비밀번호';
예를 들어 root 계정이 192.168.0.2에서 외부 접속을 해야 한다면 아래와 같이 적으면 된다.
create user 'root'@'192.168.0.2' identified by '비밀번호';

모든 ip에서 접속하는 새로운 계정은
create user 'mysql'@'%' identified by '비밀번호';

중요한 것은 % 값을 넣어서 계정을 생성해 줘야 해당 계정이 외부 접속 가능하다.
방화벽이나 공유기 안에 있다면 방화벽은 열어주고 공유기는 포트 포워딩등을 설정을 해줘야 함.

5. db 생성하고 권한 준다
testdb 라는 이름으로 데이터베이스 생성하고 mysql 계정에게 접근 권한주기
create database testdb;
grant all on testdb.* to mysql@'%'; 

6. 모든 변경 내용 즉시 반영
flush privileges;

그외에 외부 접속이 가능하게 할때 mysql 설정 파일에서 변경할것
데비안은 my.cnf가 아니고 /etc/mysql/mariadb.conf.d/50-server.cnf 를 수정해야 하고
bind-address 에 loopback으로 되어있는 아이피를 해당 서버의 아이피 주소로 변경해 줘야한다.
예를 들면 아래처럼
#bind-address = 127.0.0.1
bind-address = 192.168.0.2








debian에 net-tools 설치

윈도우즈의 ipconfig 와 동일한 것이 리눅스에서는 ifconfig 이다.
그런데 기본 설치를 하니 이것 안 깔려 있다.
( 물론 ip a 를 하면 ip등 정보는 볼 수 있다.)

apt-get install net-tools  

를 해서 네트워크 관련 기본 툴을 설치하자.

참고로 net-tools은 아래 프로그램들이 들어 있다.
arp
ifconfig
ipmaddr
iptunnel
route
nameif
mii-tool

2018년 4월 6일 금요일

데비안(debian)에 노드(nodejs) 설치

root 계정으로 아래와 같이 설치한다

curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs

node -v 하면 8.x 버전이 설치되어 있음 ( 2018-04-07 현재 8.11.1 설치되었음 )
8.x 버전에서는 npm까지 같이 설치가 된다.

현재 debian 버전은
9.4 stretch 임


zotac zbox CI327 에 debian 설치하기

일단 점유율이 높은 리눅스 패키지중에 데비안과 우분투를 고민했지만
아무래도 데비안이 안정성이 높다고 알려져 있기에 그것을 선택했다.
2017년의 마켓 쉐어를 보니 32.1%로 두 버전 모두 동일했다.

1. 아래 URL에서 amd64 버전으로 다운 받는다.
https://www.debian.org/CD/http-ftp/#stable
( 2018년 4월 현재 9.4 stretch 문제 없이 설치 했음 )

2. usb에 iso를 기록하는 프로그램을 이용해서 부팅 usb를 만든다
   라즈베리파이 부팅 usb 만들때 사용하는 echer를 이용해서 작업을 했다.
   etcher 링크
    1) select image : 다운받은 iso를 선택
    2) select drive : usb를 넣은 드라이브 선택
    3) flash : 부트 usb가 만들어 지는 것을 기다린다 ( 3~5분정도 소요 )

3. zbox가 부팅될때 del 키를 눌러서 boot 메뉴로 이동한뒤에 usb 부팅으로 순서를 변경한다.
( 다른 유저들 보니 boot mode를 legacy로 바꾸고 하라는내용도 있으니 참고 할것. 참조링크 )

4. 부팅이되고 리눅스 설치를 진행 ^^

* 참고
이후 apt-get으로 프로그램 설치할때마다

Fix the apt-get install error: “Media change: please insert the disc labeled ...”
등의 오류가 보일수 있다.

설치할때 usb로 설치하면서 그쪽에서 프로그램을 설치하려고 해서 그런것인데

nano /etc/apt/sources.list

를 해서

첫줄의 deb cdrom:[Debian GNU/Linux ....
내용을 # 을 이용해서 주석처리 해주면 된다.



2018년 3월 20일 화요일

cocos2dx에서 하나의 Scene에 두개의 카메라 동시에 표현하기

2017. 9. 27. 0:09

다음글은 cocos2dx 에서 하나의 화면에 두개의 카메라를 그릴때 어떻게 해야 할지를 구현하는 방법에 대해 적은 것이다. 
아래 화면을 보면 상단에는 확대된 3D화면이 하단에는 축소된 3D화면이 있는것을 알수있다( 쉽게 생각해서 레이싱 화면에서 앞으로 가는것이보이고, 백미러가 상단에 있는것 생각하면 된다)







위처럼 작업을 하려면 Open GL의 FrameBuffer에 대해서 알아야 하는데기본적인 코드에 대해서는 이전글인 다음의 URL을 참고하면 된다.

위 글을 읽었다면 코드는 간단하게 다음처럼 구현할수 있다. 
일단 3D 레이어를 하나 만들고 ( 위 URL 내용을 먼저 읽을것 )카메라를 2개를 생성을 한다.
// frame buffer object를 만들어서 그것을 카메라와 연결 void HelloWorld::createCameraWithFrameBuffer1() { float width = 600, height = 400; // 큰화면 _camera1 = Camera::createPerspective(95, width / height, 1, 10000); // 10000 : far plane distance , landscape _camera1->setCameraFlag(CameraFlag::USER1); _camera1->setPosition3D(Vec3(0, 0, 0)); _camera1->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0)); _camera1->retain(); m_layer3D->addChild(_camera1); experimental::Viewport vp; vp._left = 0; vp._bottom = 0; vp._width = 1; vp._height = 1; _camera1->setViewport(vp); auto fbo = experimental::FrameBuffer::create(1, width, height); //render target experimental::RenderTarget* renderTarget = experimental::RenderTarget::create(width, height); fbo->attachRenderTarget(renderTarget); renderTarget->getTexture()->setAliasTexParameters(); //stencil depth auto depth = experimental::RenderTargetDepthStencil::create(width, height); fbo->attachDepthStencilTarget(depth); //_camera1->setDepth(0); _camera1->setFrameBufferObject(fbo); // 그리기 평면 텍스쳐, 스프라이트를 만들어서 붙인다 Texture2D* texture = fbo->getRenderTarget()->getTexture(); auto pDraw = Sprite::createWithTexture(texture); pDraw->setFlippedY(true); // 화면이 뒤집혀 있기 때문에 pDraw->setAnchorPoint(Vec2::ZERO); pDraw->setPosition(Vec2(360, 800 )); addChild(pDraw); } // frame buffer object를 만들어서 그것을 카메라와 연결 void HelloWorld::createCameraWithFrameBuffer2() { float width = 400, height = 300; // 작은 화면 _camera2 = Camera::createPerspective(95, width / height, 1, 10000); // 10000 : far plane distance , landscape _camera2->setCameraFlag(CameraFlag::USER2); _camera2->setPosition3D(Vec3(0, 0, 0)); _camera2->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0)); _camera2->retain(); m_layer3D->addChild(_camera2); experimental::Viewport vp; vp._left = 0; vp._bottom = 0; vp._width = 1; vp._height = 1; _camera2->setViewport(vp); auto fbo = experimental::FrameBuffer::create(2, width, height); //render target experimental::RenderTarget* renderTarget = experimental::RenderTarget::create(width, height); fbo->attachRenderTarget(renderTarget); renderTarget->getTexture()->setAliasTexParameters(); //stencil depth auto depth = experimental::RenderTargetDepthStencil::create(width, height); fbo->attachDepthStencilTarget(depth); _camera2->setFrameBufferObject(fbo); // 그리기 평면 텍스쳐, 스프라이트를 만들어서 붙인다 Texture2D* texture = fbo->getRenderTarget()->getTexture(); auto pDraw = Sprite::createWithTexture(texture); pDraw->setFlippedY(true); // 화면이 뒤집혀 있기 때문에 pDraw->setAnchorPoint(Vec2::ZERO); pDraw->setPosition(Vec2(360, 100)); addChild(pDraw); }
생성된 두개의 카메라는 한 m_layer3D 에 addChild() 한다.두개의 Layer를 만드는 것이 아니고 , 하나의 레이어에 두개의 Camera를 만드는 것이다. 
그리고 최종적으로 카메라 보여지는 작업을 할때 아래처럼 두개가 보이게 한다.
m_layer3D->setCameraMask((int)CameraFlag::USER1 | (int)CameraFlag::USER2);