OpenGL을 사용하여 iPhone 그래픽을 만들고 있습니다. 내 프로젝트 중 하나에서 이미지를 사용해야하는데 OpenGL에서 텍스처로 사용해야합니다. .png
이미지의 크기는 512 * 512
이고 배경은 투명하며 이미지의 가운데에는 두꺼운 청색 선이 있습니다.OpenGL ES에서 블렌딩 대신 사용할 수있는 것은 무엇입니까?
이미지를 OpenGL의 폴리곤에 적용하면 이미지의 투명 부분이 검은 색이고 두꺼운 파란색 선이 그 자체로 보이는 것처럼 텍스처가 나타납니다. 검은 부분을 제거하기 위해 블렌딩을 사용했습니다.
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
그런 다음 다각형의 텍스처의 검은 부분이 제거됩니다. 이제는 파란색 밴드 만 보입니다. 따라서 문제는 해결됩니다.
하지만 많은 이미지를 추가하고 OpenGL에서 많은 개체를 만들고 싶습니다. 나는 그것을 할 수 있지만, 더 많은 이미지를 객체에 추가 할 때 프레임 속도는 매우 낮습니다. 그러나 블렌딩을 주석 처리하면 프레임 속도는 정상이지만 이미지는 보이지 않습니다.
나는 좋은 fps가 없기 때문에 그래픽이 약간 느리고 흔들리는 효과가 있습니다.
그래서 :
1) 내 문제를 해결하기 위해 혼합 이외의 다른 방법이 있습니까?
2) OpenGL 앱의 프레임 속도를 어떻게 향상시킬 수 있습니까? 내 그래픽을 올바르게 구현하려면 모든 단계를 수행해야합니까?
답장을 보내 주셔서 감사합니다. 여기 내 프로젝트에서 나는 거의 90 %가 투명한 부분 인 512 * 512 텍스처를 사용하고 있습니다. 그래서 당신의 말로 표현하면 텍스처의 투명한 비율을 줄여서 속도를 높일 수있을 것 같습니다. 저에게 좋은 정보입니다. 하지만 이렇게하면 아이폰 화면에서 내 물건을 조금 더 크게 볼 수 있습니다. 그래서 텍스처의 검은 부분을 제거하기 위해 OpenGL inorder에서 블렌딩하는 것 외에는 다른 방법이없는 것 같습니다.? – quint
블렌딩 대신 알파 테스트를 시도 할 수 있습니다. 블렌딩 할 필요가 없을 때 약간 더 빨라질 수 있으며 전체 불투명 및 완전 투명 영역 만 원할 수 있습니다. 'glEnable (GL_ALPHA_TEST); glAlphaTest (GL_LESS, 1.0)'는 100 % 불투명하지 않은 모든 픽셀을 버립니다. 타일 기반 렌더러는 여전히 알파가 없을 때와 같은 방법으로 숨겨진 픽셀을 버릴 수 없으므로이 방법으로 성능이 크게 향상 될 것으로 기대하지는 않습니다. – codewarrior
기본적으로 하드웨어는 완전히 불투명 한 텍스처에 최적화되어 있기 때문에 iPhone에서는 투명성이 높습니다. 성능을 높이려면 혼합 및 알파 사용을 최소화해야합니다. 완전히 불투명 한 텍스처만을 사용하여 진행할 수 없다면, 실제로 블렌딩이 필요한 부분 만 사용하고 나머지 장면은 블렌딩을 사용하지 않도록 먼저 렌더링해야합니다. – codewarrior