libgdx에서 Texture, TextureRegion, TextureAtlas, Sprite 및 Image 사이의 차이점은 무엇입니까?


12

튜토리얼을 검색했습니다. 위의 클래스를 사용하여 이미지를로드하는 사람들을 보았습니다.

내 이해에 따르면 모든 클래스는 두 개의 이미지가 아닌 힘으로 읽을 수 있습니다. TextureRegion / TextureAtlas는 일반적으로 스프라이트 시트를로드하는 데 사용되며 시트에는 여러 이미지가 포함됩니다. 텍스처 / 스파이트 / 이미지의 경우 단일 이미지로 스프라이트 시트를로드하는 데 사용됩니다.

그러나 어떤 상황에서 Texture / Sprite / Image를 사용해야하고 어떤 상황에서 TextureRegion / TextureAtals를 사용해야하는지 잘 모르겠습니다.

다양한 튜토리얼을 본 후 API의 용어에 약간 혼란 스러우므로 틀렸다면 수정하십시오.

답변:


18

먼저 Texture vs TextureRegion : Texture t = new Texture (path)와 같은 작업을 수행하면 GPU에로드합니다. 또한 2 텍스처의 힘을로드해야합니다. 다른 해상도 (Texture.setEnforcePotImages = false)로 작업 할 수 있지만 pow 2를 사용하는 것이 좋습니다.

이제 TextureRegion은 치수에 상관없이 Texture에서 "조각"을 가져옵니다. 하나의 Texture와 그 TextureRegion을 여러 TextureRegion으로 사용하면 모든 영역을 GPU에로드 할 수 없다는 장점이 있습니다.

SpriteBatch를 사용하여 그릴 때 여러 텍스처 대신 TextureRegion을 사용하는 것이 훨씬 효율적이므로 영어가 충분하지 않아서 죄송합니다. 여기에 좋은 설명이 있습니다 : Textures TextureRegion & SpriteBatch


이제 모든 스프라이트 시트와 이미지에 TextureRegion과 하나의 단일 이미지를 2 해상도로 사용하려고합니다. 모든 좌표와 치수로 TextureRegions를 만들어야합니까? 픽셀 수를 계산하려면 페인트를 열어야합니까? 안돼. TexturePacker 와 같은 것을 사용할 수 있습니다 . 모든 텍스처를 하나의 이미지로 압축하고 치수와 좌표가 모두 포함 된 .pack 파일을 만듭니다.

TexturePacker

결과는 다음과 같습니다.

팩

Texture를 생성하는 대신, 다음과 같이 TextureAtlas를 생성하십시오 :

TextureAtlas 만들기

이제 TextureRegions를 만드는 것은 다음과 같이 간단합니다.

지역 찾기

(영역 이름은 확장자가없는 원본 이미지의 이름입니다).


Sprite는 Batch를 사용하여 2D 스프라이트를 그리기위한 지오메트리, 색상 및 텍스처 정보를 보유합니다. 즉, 쉽게 회전하고 이동할 수 있습니다. 나는 자신의 Entity 클래스를 만들었고 Sprite 클래스가 필요하지 않습니다. 아마 똑같이 할 것입니다. 이 클래스가 실제로 유용하지 않습니다.


이미지 클래스는 Actor에서 상속합니다. 즉, 스테이지에 추가 할 수 있습니다. Scene2D 패키지의 일부입니다. libgdx를 처음 사용하고이 패키지에 대해 모른다면이 클래스에 대한 충분한 정보입니다. 정말 흥미로운 주제이지만이 질문에 대답하지는 않습니다.

그것이 도움이되기를 바랍니다 :)


감사! 지금은 더 명확합니다. :) 그런 다음 Texture에서 TextureRegion을 만들고 TextureAtlas에서 TextureRegion을 만드는 성능은 어떻습니까?
user15783

4
@ user15783 새 질문으로 질문하십시오.
David J. Liszewski

좋은 정보는 많지만이 부분은 정확하지 않거나 오해의 소지가 있습니다. "모든 영역을 GPU에로드하지는 않습니다"실제로 모든 영역을 GPU에로드하고 있습니다. 여러 개의 TextureRegion가 텍스처의 별개의 (또는 겹치는) 부분을 참조 할 수 있고 Texture항상 전체 이미지를 참조 할 수 있습니다. 텍스처 전환이 비싸기 때문에 좋습니다. 귀하의 설명은 TextureRegion희소 한 질감 ( GL_ARB_sparse_texture일명)을 다루는 것처럼 들리지만 libGDX 및 그것이 실행되는 대부분의 하드웨어는 해당 확장을 지원하지 않습니다.
bcrist

또한 코드 스크린 샷보다 SE 마크 다운 코드 블록을 선호하십시오. 이렇게하면 사람들이 원하는 경우 쉽게 복사하고 붙여 넣을 수 있습니다. 코드 블록의 각 줄을 4 개의 공백으로 시작하십시오. 인라인 코드 스팬은 액센트 (역 따옴표) 문자로 텍스트를 둘러싼 만들 수 있습니다 :`
bcrist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.