Three.js: Comment rendre les textures nettes sur un écran Retina?

Créé le 24 oct. 2012  ·  16Commentaires  ·  Source: mrdoob/three.js

Donc, je viens de mettre à jour mon ordinateur portable vers un macbook à écran Retina et même si j'utilise des textures haute résolution avec répétition, elles semblent très floues.

Alors je me demande ce que je dois faire pour résoudre ce problème?

Question

Commentaire le plus utile

Il suffit de laisser un commentaire ici pour quiconque le trouve, car je suis presque devenu fou en essayant de trouver une réponse et Google n'arrêtait pas de m'amener ici: j'avais exactement le même problème mais le mien était une solution très simple, il s'agissait simplement de définir le devicePixelRatio dans le moteur de rendu (r72):

renderer.setPixelRatio(window.devicePixelRatio ? window.devicePixelRatio : 1);

_A noter que la configuration du devicePixelRatio lors de la création de l'objet ne fonctionne pas. Peut-être un bug? _

Tous les 16 commentaires

L'anisotropie est probablement ce que vous recherchez.
http://mrdoob.github.com/three.js/examples/webgl_materials_texture_anisotropy.html

ok cela a corrigé mon problème avec les textures répétitives, merci :) Cependant cela ne fonctionnait pas pour les textures non répétitives, une idée sur la façon dont cela peut être corrigé?

Ils ont probablement besoin de puissance de deux textures?

eh bien j'ai essayé d'augmenter la résolution des textures mais je ne vois pas d'amélioration. Sans vraiment savoir comment l'augmentation de la densité est gérée, je suppose que la texture est réduite à la taille de pixel appropriée de la face géométrique, mais qu'elle est ensuite redimensionnée par mon navigateur pour s'adapter à la densité de l'affichage.

En regardant de plus près ma texture répétée, je peux voir que si le réglage de l'anisotropie au maximum a considérablement augmenté la qualité, la texture n'est toujours pas aussi nette qu'elle devrait l'être

Difficile de dire ce qui se passe sans voir l'exemple ou au moins les captures d'écran, mais vous voudrez peut-être jeter un coup d'œil à ceci:

http://www.khronos.org/webgl/wiki/HandlingHighDPI

lien génial @alteredq ! a corrigé mes problèmes, tout semble net maintenant :)

Il suffit de laisser un commentaire ici pour quiconque le trouve, car je suis presque devenu fou en essayant de trouver une réponse et Google n'arrêtait pas de m'amener ici: j'avais exactement le même problème mais le mien était une solution très simple, il s'agissait simplement de définir le devicePixelRatio dans le moteur de rendu (r72):

renderer.setPixelRatio(window.devicePixelRatio ? window.devicePixelRatio : 1);

_A noter que la configuration du devicePixelRatio lors de la création de l'objet ne fonctionne pas. Peut-être un bug? _

_ À noter que la configuration du devicePixelRatio lors de la création de l'objet ne fonctionne pas. Peut-être un bug? _

Cela a été supprimé il y a quelque temps.

@mrdoob , @greggman : Pour renderer.setPixelRatio _before_ en appelant renderer.setSize .

@mietek En fait, je pense que cela a peut-être déjà été corrigé dans dev involontairement déjà ...

il n'est pas du tout clair qu'il faille appeler renderer.setPixelRatio avant d'appeler renderer.setSize.

cela n'aide même pas, du moins il semble. c'est ce que j'obtiens dans la console safari:

screen shot 2016-01-24 at 19 15 50

et voici à quoi cela ressemble sur ipad:

screen shot 2016-01-24 at 19 21 05

comme vous le voyez, le rectangle semble être de bonne taille, mais la fenêtre réelle est 2x plus grande.

les choses semblent correctes dans le simulateur de chrome avec dpr = 2 mais sur iPad, elles ne le sont pas.

@makc avez-vous un lien?

[supprimé]

Il se passe autre chose ...

screen shot 2016-01-24 at 19 12 49

En utilisant les outils de développement de Safari, j'ai changé style="width: 418px en style="width: 408px et inversement et cela semble comme il se doit. Je parie qu'il y a d'autres règles css qui gâchent les choses.

il semble que le fait d'incliner la chose d'avant en arrière corrige également ce problème ... de toute façon,

        setTimeout (function () {
            renderer.domElement.style.width = (parseInt (renderer.domElement.style.width) - 1) + 'px';
            setTimeout (function () {
                renderer.domElement.style.width = (parseInt (renderer.domElement.style.width) + 1) + 'px';
            }, 0);
        }, 0);

n'a pas fonctionné du tout. retour à la planche à dessin ...

Cette page vous a été utile?
0 / 5 - 0 notes