Three.js: Verificação do cabeçalho mágico RGBELoader

Criado em 5 dez. 2020  ·  3Comentários  ·  Fonte: mrdoob/three.js

Descreva o bug

RGBELoader verifica o token mágico no início do arquivo:
https://github.com/mrdoob/three.js/blob/1e161eaeedee694861ec480f04b632443f64dbb4/examples/jsm/loaders/RGBELoader.js#L149 -L154

Tenho um arquivo com o referido cabeçalho:
image
O Loader não reconhece o token mágico.

Aqui está o conteúdo de line quando impresso no console:
image

Agora, a parte curiosa aqui é se você tentar copiar isso e verificar a correspondência novamente:
image
Tudo parece bem, no entanto, se você tentar no line diretamente, verá o seguinte:
image

O problema é que há um 
 no final (retorno de carro):
image
image

Um pouco mais:
image
Parece que 13 e 10 são interpretados como NEW_LINE caracteres pela função de ingestão fget

Reproduzir

  • não posso compartilhar o arquivo neste momento

Código


Exemplo vivo

  • não posso compartilhar o arquivo neste momento

Comportamento esperado

Não tenho certeza, acredito que isso deve ser tratado como um cabeçalho válido. Esse problema não ocorria ao usar o r107, então parece um bug de regressão. Mas talvez alguém mais familiarizado com as especificações RGBE possa esclarecer.

Capturas de tela

Veja acima

Plataforma:

  • Dispositivo: [Desktop]
  • SO: [Windows]
  • Navegador: [Chrome]
  • Versão de Three.js: [r ??? - sim, 123]
Bug Loaders

Comentários muito úteis

Não consigo encontrar nada online que afirme que os bytes que vêm depois de #?RADIANCE devem ser restritos. Esta referência na especificação parece indicar que é suficiente para os primeiros bytes serem #?RADIANCE e que uma nova linha não precisa seguir.

Alterando magic_token_re deste

magic_token_re = /^#\?(\S+)$/

para isso

magic_token_re = /^#\?(\S+)/

parece uma solução.

Todos 3 comentários

Não consigo encontrar nada online que afirme que os bytes que vêm depois de #?RADIANCE devem ser restritos. Esta referência na especificação parece indicar que é suficiente para os primeiros bytes serem #?RADIANCE e que uma nova linha não precisa seguir.

Alterando magic_token_re deste

magic_token_re = /^#\?(\S+)$/

para isso

magic_token_re = /^#\?(\S+)/

parece uma solução.

@Usnul , você se importa em testar essa correção?

Sim, isso funciona.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

boyravikumar picture boyravikumar  ·  3Comentários

Bandit picture Bandit  ·  3Comentários

Horray picture Horray  ·  3Comentários

akshaysrin picture akshaysrin  ·  3Comentários

fuzihaofzh picture fuzihaofzh  ·  3Comentários