Cocos2d-x 파티클 시스템을 추가할 때 plist의 key값에 따라 블랜딩 방식이 지정된다. blendFuncDestination과 blendFuncSource에 의해 결정되는데 이 값에 따른 블렌딩 함수는 다음과 같다. blendFuncDestination = 1blendFuncSource = 770->ADDITIVE blendFuncDestination = 771blendFuncSource = 770->ALPHA_NON_PREMULTIPLED blendFuncDestination = 771blendFuncSource = 1->ALPHA_PREMULTIPLED
현재 벡터의 길이를 구한 후 각 인자에 나누면 된다. 2차원에서의 예 Cocos2d-x 에서 활용 inline cocos2d::Vec2 Normalize(cocos2d::Vec2 vec){ float length = sqrtf(powf(vec.x, 2) + powf(vec.y, 2)); cocos2d::Vec2 newVec = cocos2d::Vec2(vec.x/length, vec.y/length); return newVec; }
코딩을 하면서, 다른사람의 코드를 보면서 nullptr을 참 많이 보고 썼는데 이게 무엇을 뜻하는 것이고 무엇을 할 수 있는지 정확히 모르고 있었다 nullptr이란? c++11에 추가된 키워드 null pointer를 가리킨다 생긴 이유 기존의 NULL이 0L이어서 포인터와 그냥 정수를 구분 하지 못하여 생기는 문제들을 보완하기 위해 만들어졌다 장점 void func(int val);void func(int *p); 위처럼 선언되어있는 두 함수가 있을 때 func(NULL); 으로 호출하면 int로 판정되어 첫번째 함수가 호출되었지만 nullptr을 사용하면 포인터로 판정되어 두번째 함수가 호출된다
어떤 프로그래밍 책(제목이 기억이 안난다 나중에 찾아서 수정하자) 에서 list를 순회할 때 처음 보는 방법으로 탐색하는 것을 보았다. iterator를 사용하는 것이 아니라 그냥 해당 list 자료형 포인터를 사용해서 탐색하는 방법이 굉장히 좋아보였다. std::list std::list intList; 기존 방법 for(std::list::iterator it = intList.begin(); it != intList.end(); it++){(*it)->add(1);} 향상된 for문을 이용한 탐색 for (int *it : intList){it->add(1);} for each문을 이용한 탐색 for each(int* i in intList){ i->add(1);} 향상된 for문을 사용하는 방법과..
목표모션 블러 효과를 내기 방법현재 방향을 나타내는 벡터를 셰이더에 전달하여 그 방향으로만 블러 효과를 준다. 코드(MotionBlur.fsh)#ifdef GL_ESprecision lowp float;#endif varying vec2 v_texCoord; uniform vec2 u_stepSize; void main(){ vec4 color = vec4(0.0, 0.0, 0.0, 0.0); color += texture2D(CC_Texture0, v_texCoord + 4.0 * u_stepSize) * 0.06; color += texture2D(CC_Texture0, v_texCoord + 3.0 * u_stepSize) * 0.12; color += texture2D(CC_Texture0, v_..
cocos2d-x에서 셰이더롤 적용하는 방법ShaderCache에 셰이더를 등록하고 적용한다. 코드 GLProgram* shader = new GLProgram(); shader->initWithFilenames("SelectEffect.vsh", "SelectEffect.fsh"); shader->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION); shader->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR); shader->bindAttribLocation(GLProgram::ATTRIBUT..
원하는 결과물오브젝트가 선택됨을 나타내려고 주로 사용하는 방법이다. 방법shader를 이용해서 이미지의 외곽주변부의 fragment값을 조작하여 효과를 표현한다. 코드(Blur.fsh)#ifdef GL_ESprecision lowp float;#endif varying vec2 v_texCoord; uniform vec2 u_stepSize; void main(){ vec4 color = texture2D(CC_Texture0, v_texCoord); vec4 result = vec4(0.0, 0.0, 0.0, 0.0); vec2 r_stepSize = vec2(u_stepSize.x, -u_stepSize.y); result += texture2D(CC_Texture0, v_texCoord - -4.0..
sprite를 생성할 때 원본 이미지보다 큰 rect에 texture를 입혀서 생성해야 할 경우가 있다.이 때 원본 이미지를 늘려서 텍스쳐에 입히는데 이 옵션이 래핑(wrapping)옵션이다. - cocos2d-x 3.5에서는 default로 GL_CLAMP_EDGE로 되어있다. 래핑 종류별 설명GL_CLAMP_EDGE모서리 픽셀을 늘려서 확장시킨다. GL_CLAMP_BORDER원본 그대로 출력한다. GL_MIRRORED_REPEAT거울처럼 반전하면서 같은 이미지를 반복한다. GL_REPEAT바둑판식으로 이미지를 반복한다. 필요한 방식은 GL_CLAMP_TO_BORDER이므로 cocos2d-x 코드를 수정하였다. glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ..
- Total
- Today
- Yesterday
- 수학
- Git
- SwiftUI
- winsock
- C++
- SHADER
- 국내여행
- 알고리즘
- Spring
- Cocos2d-x
- rxswift
- C/C++
- scala
- SOCKET
- DesignPattern
- ue4
- OS
- machine learing
- Java
- JSP
- 자료구조
- swift
- ios
- 운영체제
- database
- 드라마
- 데이터베이스
- mongoDB
- game
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |