iPhone 용 Cocos2Dx에서 CCRenderTexture 클래스를 사용하는 데 문제가 있습니다 (이해할 수 있듯이 FBO 클래스 임).Cocos2dx CCRendertexture 및 프레임 버퍼 개체 문제. 내 새로운 질감이 똑같지는 않습니다. 알파 값이 올바르지 않습니다.
CCSprite에서 파생되는 클래스가 있습니다. 그 안에는 CCrenderTexture에 텍스처를 그리고 나중에 저장하기 위해 노력하고 있습니다. 그러나, 나는 새로운 텍스처의 알파 값이 강해진 것으로 보였다. 내 새로운 텍스처는 원본보다 약간 더 희미하게 보입니다. 단지 알파가 1.0 미만인 픽셀에만 효과가있는 것으로 보입니다. 여기
내가 사용하고있는 코드입니다 : 테스트로CCRenderTexture* myRenderTexture = CCRenderTexture::create((int)getContentSize().width, (int)getContentSize().height); //set RenderTexture to same size as sprite
myRenderTexture->begin();
CC_NODE_DRAW_SETUP();
ccGLEnableVertexAttribs(kCCVertexAttribFlag_PosColorTex);
ccGLBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //Is this where my problem is?
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, finalTexture->getName()); //finalTexture is created before this code is run
glUniform1i(textureLocation, 0);
long offset = (long)&m_sQuad;
// vertex
int diff = offsetof(ccV3F_C4B_T2F, vertices);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff));
// texCoods
diff = offsetof(ccV3F_C4B_T2F, texCoords);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff));
// color
diff = offsetof(ccV3F_C4B_T2F, colors);
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, kQuadSize, (void*)(offset + diff));
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glActiveTexture(GL_TEXTURE0);
myRenderTexture->end();
finalTexture = myRenderTexture->getSprite()->getTexture(); //Replace Final Texture with my new texture (Should be exact same)
finalTexture->retain();
myRenderTexture->release();
, 나는 연속적으로 위의 코드 4 번을 실행했습니다. 매번 텍스처가 조금 더 흐려진 것처럼 보였습니다. 그러나 내가 기대하는 바는 매번 똑같이 보일 것입니다.
내가 취한 다음 단계는 ccGLBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
을 ccGLBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
으로 바꾸는 것이 었습니다. 내 문제를 해결하는 것처럼 보였습니다. 몇 번이나 아무리 실행해도 결과 텍스처가 동일하게 보였습니다. 그러나이 텍스처에서 셰이더를 실행하고 있습니다 (셰이더가 보이지 않고 테스트 도중에 실행되지 않음). 올바르게 작동하려면 ccGLBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
이 필요합니다.
약간의 연구 끝에 ccGLBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
을 glBlendFuncSeparate(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_ONE, GL_SRC_ALPHA)
으로 바꾸려고 시도했습니다. 색상 값을 변경하면서 이것이 알파 레벨을 유지하기를 바랍니다. 불행하게도 이것은 반대의 효과가 있었고 실제로 알파를 어둡게 만들어 질감이 어둡게 보였다.
다음은 세 번의 테스트를 거친 사진입니다.)
사람이 내가 잘못하고 뭐하는 거지 이러한 효과의 원인이 무엇인지 말해 줄 수,이 비키니 바닥 자산 효과를 볼 쉽게 무엇입니까? 내 BlendFunc
입니까? CCRenderTexture
(또는 FBO)을 연속으로 여러 번 그릴 수 있어야하며 이미지에 원하지 않는 영향을 미치지 않습니다. 나는 또한 쉐이더를 사용해야합니다 ... 그래서 ccGLBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
이 작동하지 않습니다 ...
어떤 도움을 주실 수 있나요? 미리 감사드립니다!
아마 미리 곱한 알파 문제 – Kreiri