2012-11-07 2 views
1

내 프로젝트는 OpenGL 2.0과 GLKit을 사용하는 IOS 앱입니다. 간단히 말해서 사각형에 적용하고자하는 투명한 배경을 가진 별 질감이 있습니다. 원하는 최종 결과는 별을 볼 수 있습니다. 광장에있는 별이 아닙니다.OpenGL-GLKit : 투명한 오브젝트 및 텍스처링

현재 문제는 정사각형에 텍스처를 적용 할 때 재질 색상 변수로 정의 된 색상이있는 사각형이있는 별을 볼 수 있다는 것입니다. 내가 원했던 것은 단지 별을보고 광장의 나머지 부분을 투명하게 만드는 것입니다.

코드는 다음과 같다 :

glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 


    [effectTmp prepareToDraw]; 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0); 
    glEnableVertexAttribArray(GLKVertexAttribNormal); 

    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].vertex); 
    glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].normal); 

    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(ColoredVertexData3D), &vertexDataTexture[0].color); 

    glDrawArrays(GL_TRIANGLES, 0, [drawObjectTmp getSizeFromVertexIndicesArray]); 
    glDisableVertexAttribArray(GLKVertexAttribPosition); 
    glDisableVertexAttribArray(GLKVertexAttribTexCoord0); 
    glDisableVertexAttribArray(GLKVertexAttribNormal); 

    glDisable(GL_BLEND); 

를 그리고 아래로 envMode GLKTextureEnvModeDecal 설정되어

effect.texture2d0.envMode = GLKTextureEnvModeDecal;

아마 복도에 커다란 코끼리가 보인다. 투명한 사각형이있는 별을 보는데 도움이되는 어떤 도움이나 포인터라도 환영받을 것입니다.

건배, 스테판 docs에서

답변

3

은 - GLKTextureEnvModeDecal 입력 색상과 텍스처의 색상을 혼합하는 텍스처의 알파 성분을 사용합니다.

GLKTextureEnvModeReplace를 원한다고 생각합니다.

+0

안녕하세요, 네가 정말 옳습니다. envModeDecal이 하나입니다. 텍스처 디스플레이에 영향을 미쳤다는 사실을 오도합니다. 버그는 내가 생각했던 것보다 좀 더 개찰판이었다. 기본적으로 내 앱은 OBJ를 통해 블렌더 모델을 가져온다. 배경 모델은 알파를 사용하여 모델 이후에 처리되었습니다. 배경이 아직 계산되지 않았기 때문에 알파 모델에서 검은 색 텍스처가됩니다. 블렌더에서 생성 순서를 바꾸는 것은 트릭을 만들었습니다 :) – stephane

+0

* NOTE * : Decal은 텍스쳐의 투명한 부분을 통해 기본 지오메트리를 보여줍니다. GL_MODULATE는 텍스쳐 컬러와 기본 픽셀을 곱해서 투명합니다. 텍스처의 일부가 투명 지오메트리가됩니다. 'GLKTextureEnvModeReplace'는 지오메트리가 어떻게 보이는지에 관계없이 텍스쳐의 픽셀을 stomps-down합니다. – Olie