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.