나는 안드로이드에서 반복적으로 놀고있는 앱을 가지고 있는데, OpenGL-es를 사용합니다.안드로이드 OpenGL-es 텍스처 2 개를 로딩하지 않습니다.
현재 나는 그렇게 같은 비트 맵에서 텍스처를로드
//Load up and flip the texture - then dispose the temp
Bitmap temp = BitmapFactory.decodeResource(Deflecticon.getContext().getResources(), resourceID);
Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true);
temp.recycle();
//Bind the texture in memory
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
//Set the parameters of the texture.
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//On to the GPU
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
명백한 문제는 내가 사용하고 질감이 나는 사전 편집을 해요 순간 2의 거듭 제곱이어야한다는 것입니다 2의 거듭 제곱이되는 포토샵의 텍스처는 빈 테두리가 있습니다. 그러나 이것은 약간 지루한 것이고 나는 그것들을 그대로로드 할 수 있기를 원합니다. 그들은 2의 힘이 아니라는 것을 알아야합니다.
나는 비트 맵을 2 크기의 힘이되도록 확장 할 수 있고 간단히 텍스처를 늘릴 수 있지만 텍스처를 늘리 길 원치 않으며 어떤 경우에는 여러 텍스처를 하나의 "아틀라스"에 넣을 수 있습니다.
glTexSubImage2D()를 사용하여 원하는 원점에서 원하는 텍스처에 텍스처를 붙여 넣을 수 있다는 것을 알고 있습니다. 이것은 굉장합니다!
그러나 안드로이드에서 데이터가없는 텍스처를 초기화하는 방법을 모르겠습니까?
이 질문에서 previously asked은 데이터없이 glTexImage2D()를 호출 한 다음 채울 것을 제안했습니다.
그러나 "GLUtils.texImage2D (GL10.GL_TEXTURE_2D, 0, bmp, 0);"를 호출하면 안드로이드에서 " 너비/높이를 지정하지 마십시오. 그것은 내가 생각하는 비트 맵에서 이것을 읽습니다.
가장 좋은 방법은 무엇입니까? 비어 있고 데이터로 채워지지 않은 2 크기의 정확한 비트 맵을 생성하고 이것을 사용하여 텍스처를 초기화 한 다음 subImage를 사용하여 붙여 넣을 수 있습니까? 또는 새로운 비트 맵을 원하는대로 복사해야합니다 (이 작업을 쉽게 수행 할 수 있는지 확실하지 않은 경우).이 새로운 비트 맵 (경계선 제외)에 복사 한 다음 바로 사용하십시오.
편집 : 내가 opengl을 사용하고 있음을 분명히했습니다.
크기가 너무 많지 않으므로 나중에 변경 가능할 것으로 기대하고 있습니다. 크기를 조정하면 좋게 만듭니다. 이 방법은 nonPOTBitmap의 부분 집합을 취한다고 말합니다. 즉, 부분 집합의 비트 맵이 지정된 xSize 및 ySize보다 작 으면 빈 모서리가 생기는 것입니까? 아니면 스트레칭하겠습니까? (나는 실험하지만 슬프게도 나는 코딩 PC에 있지는 않을 것이다). – iexus
비트 맵은 createScaledBitmap 메소드로 던져지기 전에는 스트레칭하지 않아야합니다. 나머지 공간은 비어 있습니다. – AedonEtLIRA
지연된 응답을 드려 죄송합니다. 다른 것들과 함께 해왔습니다. 그러나 실제로이 문제를 구현하려고 왔지만이 방법으로는 작동하지 않습니다. 비트 맵을 소스보다 큰 비트 맵으로 서브 맵핑 할 수는 없습니다 ... 이제는 조금 손실이 있습니다. – iexus