Skip to content

Latest commit

Β 

History

42 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

C++ glTF License Sacred Community

English Β· Deutsch

glb2grn

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ glTF (.glb) Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Sacred Gold Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Granny 1.2 (.grn) прямо Π² памяти. Она Π½ΡƒΠΆΠ½Π° ΠΌΠΎΠ΄Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приносят Π² ΠΈΠ³Ρ€Ρƒ свои ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ.

Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ Π±Π°ΠΉΡ‚Ρ‹ GLB ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π±Π°ΠΉΡ‚Ρ‹ GRN: мСши, скСлСт, вСса скиннинга, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈ тСкстуры. Π€Π°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π²Π·ΡΡ‚ΡŒ модСль ΠΈ ΠΊΡƒΠ΄Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ grn2glb, ΠΈ модСль ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

Как Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ тСкстуру, Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ Π²Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сТимаСт встроСнныС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² VTex β€” Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Sacred ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. МоТно ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сырыС пиксСли ΠΈΠ»ΠΈ вовсС Π½Π΅ ΠΊΠ»Π°ΡΡ‚ΡŒ ΠΈΡ… Π² модСль, Π° Π½Π°Π·Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» тСкстуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΈΠ³Ρ€Π°. Π’Π°ΠΊ устроСно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Sacred.

glb2grn.dll β€” 64-битная DLL с простым C ABI. Java 22 ΠΈ Π½ΠΎΠ²Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‘ Ρ‡Π΅Ρ€Π΅Π· FFM (Panama) Π±Π΅Π· JNI. CRT собран статичСски, поэтому ΠΈΠ³Ρ€ΠΎΠΊΡƒ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ VC++ Redistributable.

Как Π½Π°Ρ‡Π°Ρ‚ΡŒ

  1. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ glb2grn.dll ΠΈ jar, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Π±ΠΎΡ€ΠΊΠ°Β». Π“ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚.

  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ jar ΠΊ ΠΌΠΎΠ΄Ρƒ:

    dependencies {
        implementation("dev.ancaria.glb2grn:glb2grn:0.0.0-dev")
    }
  3. Π‘ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ модСль. ВстроСнныС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ станут тСкстурами VTex:

    byte[] grn = Glb2Grn.convert(glbBytes);
  4. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»Π° тСкстуру ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ это для слота:

    byte[] grn = Glb2Grn.convert(glbBytes, slot ->
            TextureChoice.external("textures/" + slot.name() + ".tga"));

Если Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ ΡΠΏΡ€Π°Π²ΠΈΠ»Π°ΡΡŒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Glb2GrnException с ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ описан Π² include/glb2grn.h.

Java

ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ΅ dev.ancaria.glb2grn:glb2grn Π½ΡƒΠΆΠ½Π° Java 22 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅. Jar нСсёт glb2grn.dll, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ распаковываСт Π΅Ρ‘ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ связываСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· FFM. ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ самому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ DLL Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π»Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, Π·Π°Π΄Π°ΠΉΡ‚Π΅ систСмноС свойство glb2grn.extractDir со своСй ΠΏΠ°ΠΏΠΊΠΎΠΉ Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

Glb2Grn.convert ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ваши TextureChoices ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ слотС тСкстуры. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ null β€” ΠΈ слот останСтся Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ открылся. Для пошаговой Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ GlbModel: textureSlots(), setTextureFormat(...), setTextureFileName(...), exportGrn() ΠΈ Π·Π°Ρ‚Π΅ΠΌ close(). Π Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Код Π§Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ GRN
FORMAT_VTEX_OPAQUE 4 ПиксСли VTex Π±Π΅Π· Π°Π»ΡŒΡ„Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
FORMAT_VTEX_ALPHA 5 ПиксСли VTex с Π°Π»ΡŒΡ„ΠΎΠΉ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Ρƒ пиксСля Π°Π»ΡŒΡ„Π° Π½ΠΈΠΆΠ΅ 250
FORMAT_RAW_RGBA 1 Π‘Ρ‹Ρ€Ρ‹Π΅ пиксСли RGBA, ΠΏΠΎ 4 Π±Π°ΠΉΡ‚Π°
FORMAT_RAW_RGBX 0 Π‘Ρ‹Ρ€Ρ‹Π΅ пиксСли, Π°Π»ΡŒΡ„Π° Π½Π΅ учитываСтся
FORMAT_EXTERNAL 7 Π‘Π΅Π· пиксСлСй, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΈΠ³Ρ€Π°

ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ GLB Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ hero.tga, открываСтся внСшним слотом с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ. ВстроСнному Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Π½ΡƒΠΆΠ½Ρ‹ пиксСли, поэтому Ρ‚Π°ΠΊΠΎΠΉ слот Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚.

Π”Π°ΠΆΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ сконвСртированная модСль ΠΌΠΎΠ³Π»Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ошибки, ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎ Π½ΠΈΡ… сообщаСт. GlbModel.warnings() пСрСчисляСт, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° пропустила ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»Π°, ΠΏΠΎ строкС Π½Π° случай: ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, которая Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ, ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² Π½Π΅ ΠΈΠ· Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с индСксом Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ². TextureSlot.hasError() ΠΈ error() ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° слота Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ. Glb2Grn.convert(glb, choices, warnings) послС экспорта ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π°ΡˆΠ΅ΠΌΡƒ Consumer<String>.

Π£ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡƒΡŽ DLL ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ своСй сборкой. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ своСй glb2grn.dll Π² систСмном свойствС glb2grn.library ΠΈΠ»ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния GLB2GRN_LIBRARY. Бвойство Π²Π°ΠΆΠ½Π΅Π΅. Π’ΠΎΠ³Π΄Π° привязка Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ этот Ρ„Π°ΠΉΠ» ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ распакуСт. Если Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой, Π° Π½Π΅ Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡƒΡŽ DLL. Π’Π°ΡˆΠ° сборка Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ C ABI ΠΈΠ· include/glb2grn.h: ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ привязка свСряСт glb2grn_api_version().

C ABI

Ѐункция Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚
glb2grn_api_version() ВСрсия ABI. Π‘Π²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Ρ‘ с GLB2GRN_API_VERSION Π΄ΠΎ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²
glb2grn_open(data, size) Π§ΠΈΡ‚Π°Π΅Ρ‚ GLB ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор
glb2grn_texture_count(model) Число слотов тСкстур
glb2grn_texture_name(model, slot) Имя слота ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ GLB
glb2grn_texture_file_name(model, slot) Имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ GRN сохранит для слота
glb2grn_texture_format(model, slot) Код Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ экспорт
glb2grn_texture_size(model, slot, &w, &h) Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² пиксСлях, 0 Π±Π΅Π· пиксСлСй
glb2grn_texture_has_pixels(model, slot) 1, Ссли ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ, 0, Ссли пиксСлСй Π½Π΅Ρ‚
glb2grn_texture_error(model, slot) ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° слота Π½Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ, "", Ссли всё Π² порядкС
glb2grn_set_texture_format(model, slot, format) Π’Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚, ΠΊΠ°ΠΊ экспорт сохранит слот
glb2grn_set_texture_file_name(model, slot, name) Π—Π°Π΄Π°Ρ‘Ρ‚ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохранит GRN
glb2grn_export_grn(model, &data, &size) Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ GRN Π² Π±ΡƒΡ„Π΅Ρ€
glb2grn_warning_count(model) Число ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ
glb2grn_warnings(model) Π’Π΅ ΠΆΠ΅ прСдупрСТдСния тСкстом, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π² строкС
glb2grn_free(buffer) ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
glb2grn_close(model) Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ модСль
glb2grn_last_error() ВСкст послСднСй ошибки Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅

Π”Π°Π½Π½Ρ‹Π΅ GLB Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ: Π² Ρ‡Π°Π½ΠΊΠ΅ BIN ΠΈΠ»ΠΈ Π² data URI. Π‘ΡƒΡ„Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹. ИмСна проходят Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ GLB; Sacred ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ASCII.

ΠŸΡƒΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ³Ρ€Ρ‹

ВСст test_game Π±Π΅Ρ€Ρ‘Ρ‚ всС 1571 ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ· PAK\models.pak, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π² GLB Ρ‡Π΅Ρ€Π΅Π· grn2glb ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· glb2grn. КаТдая модСль возвращаСтся, ΠΈ ΠΎΠ±Π° парсСра Π΅Ρ‘ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚. ВсС 1571 ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΠΈ слоты тСкстур. БСмь Ρ‚Π΅Ρ€ΡΡŽΡ‚ мСши Π±Π΅Π· Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²: grn2glb Π½Π΅ ΠΊΠ»Π°Π΄Ρ‘Ρ‚ ΠΈΡ… Π² GLB.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

  • Ни ΠΎΠ΄Π½Ρƒ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈ Π² ΠΈΠ³Ρ€Π΅. ВСсты Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ GRN читаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ с Ρ‚Π΅ΠΌ ΠΆΠ΅ содСрТимым, Π½ΠΎ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Sacred ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π΅Ρ‘ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.
  • Анимации ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ Π½Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠ°Π΄Ρ€Ρ‹.
  • Π‘ΠΊΠ΅Π»Π΅Ρ‚ΠΎΠΌ становится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ скин GLB. Как мСш дСформируСтся Π² ΠΏΠΎΠ·Π΅, Π΅Ρ‰Ρ‘ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ провСрял.
  • Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Draco ΠΈ meshopt ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ смысл Π΄Π°Π½Π½Ρ‹Ρ…, приводят ΠΊ ошибкС.

Π‘Π±ΠΎΡ€ΠΊΠ°

НуТны MSVC x64 ΠΈ CMake 3.22 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅. Из Developer Command Prompt:

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure

DLL появится Π² build\bin\glb2grn.dll. ВСстам test_core ΠΈ test_abi ΠΈΠ³Ρ€Π° Π½Π΅ Π½ΡƒΠΆΠ½Π°. test_game Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ³Ρ€Ρ‹ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· GLB2GRN_GAME ΠΈ нуТдаСтся Π² grn2glb, склонированном рядом с этим Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ. Π‘Π΅Π· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… тСст ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ сСбя ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ.

Gradle собираСт Java-привязку ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ jvm, ΠΊΠΎΠ³Π΄Π° DLL ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ. Он ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ DLL Π² jar, запускаСт тСсты ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ jar Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Maven:

cd jvm
./gradlew build publishToMavenLocal

Π‘Π΅Π· glb2grn.dll сборка остановится ΠΈ Π½Π°Π·ΠΎΠ²Ρ‘Ρ‚ ΠΏΡƒΡ‚ΡŒ, Π³Π΄Π΅ искала.

Π Π΅Π»ΠΈΠ·Ρ‹

Π― Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽ Ρ€Π΅Π»ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Release Π² Actions с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии. Ни ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π²Π΅Ρ€ΡΠΈΡŽ: ΠΎΠ½Π° ΠΆΠΈΠ²Ρ‘Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Π³Π΅ v<вСрсия>. Workflow собираСт DLL, запускаСт тСсты, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ dev.ancaria.glb2grn:glb2grn Π² Maven Central ΠΈ ΠΆΠ΄Ρ‘Ρ‚, ΠΏΠΎΠΊΠ° Central Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ прикрСпляСт ΠΊ Ρ€Π΅Π»ΠΈΠ·Ρƒ Π½Π° GitHub glb2grn.dll, glb2grn.jar, glb2grn.h ΠΈ тСксты ΠΎΠ±Π΅ΠΈΡ… Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ.

CI собираСт ΠΈ тСстируСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ push Π² master ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ pull request ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ рСпозиториями описан Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ CONTRIBUTING.

Благодарности

Бпасибо karolak6612 Π·Π° врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΡˆΠ»ΠΎ Π½Π° Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Granny GRN вмСстС с ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠΌ. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° β€” ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΊ open-grn-converter, ΠΈ Π΅Π³ΠΎ история ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² сохранСна здСсь.

Бпасибо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ FFmpeg. КодСк VTex Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Bink, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΈΡ… Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€, Π° Π΅Π³ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ взяты ΠΈΠ· libavcodec/binkdata.h.

ЛицСнзия

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ распространяСтся ΠΏΠΎΠ΄ MIT, см. LICENSE. ΠŸΡ€Π°Π²Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ karolak6612 ΠΈ ΠΌΠ½Π΅. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ΄Π΅ΠΊ VTex Π² src/codecs/vtex_*. Он основан Π½Π° Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π΅ Bink ΠΈΠ· FFmpeg (libavcodec/bink.c ΠΈ binkdata.h) ΠΈ распространяСтся ΠΏΠΎΠ΄ LGPL-2.1-or-later. ΠŸΠΎΠ»Π½Ρ‹ΠΉ тСкст Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π»Π΅ΠΆΠΈΡ‚ Π² LICENSES/LGPL-2.1.txt.

Бобранная glb2grn.dll содСрТит этот ΠΊΠΎΠ΄, поэтому Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ распространяСтся ΠΏΠΎΠ΄ LGPL-2.1-or-later. Мод Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ DLL динамичСски Ρ‡Π΅Ρ€Π΅Π· FFM (Panama), ΠΈ LGPL это Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚: сам ΠΌΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ. Jar нСсёт LICENSE, LGPL-2.1.txt ΠΈ NOTICE.txt Π² META-INF/glb2grn, ΠΈ jar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚, сохраняСт ΠΈΡ…. Π’ NOTICE.txt написано, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ DLL, β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ это описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«JavaΒ». cgltf, nlohmann/json ΠΈ stb ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ своими лицСнзиями.

About

🧊 Converts glTF .glb models to Sacred Gold Granny 1.2 .grn in memory, with a C ABI for Java Panama

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages