내 프로젝트는 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에서
안녕하세요, 네가 정말 옳습니다. envModeDecal이 하나입니다. 텍스처 디스플레이에 영향을 미쳤다는 사실을 오도합니다. 버그는 내가 생각했던 것보다 좀 더 개찰판이었다. 기본적으로 내 앱은 OBJ를 통해 블렌더 모델을 가져온다. 배경 모델은 알파를 사용하여 모델 이후에 처리되었습니다. 배경이 아직 계산되지 않았기 때문에 알파 모델에서 검은 색 텍스처가됩니다. 블렌더에서 생성 순서를 바꾸는 것은 트릭을 만들었습니다 :) – stephane
* NOTE * : Decal은 텍스쳐의 투명한 부분을 통해 기본 지오메트리를 보여줍니다. GL_MODULATE는 텍스쳐 컬러와 기본 픽셀을 곱해서 투명합니다. 텍스처의 일부가 투명 지오메트리가됩니다. 'GLKTextureEnvModeReplace'는 지오메트리가 어떻게 보이는지에 관계없이 텍스쳐의 픽셀을 stomps-down합니다. – Olie