Question

Mise à jour: Cela ne semble être un problème à certains ordinateurs. Le code normal, intuitif semble fonctionner correctement un mon ordinateur à la maison, mais l'ordinateur au travail a du mal.

Ordinateur domestique: (pas de problème)

  • Windows XP Professionnel SP3
  • AMD Athlon 64 X2 3800+ Dual Core 2.0 GHz
  • NVIDIA GeForce 7800 GT
  • 2 Go de RAM

ordinateur de travail: (cette question s'applique à cet ordinateur)

  • Windows XP Professionnel SP3
  • Intel Pentium 4 2.8 Ghz (dual core, je pense)
  • Intel 82945G Express Chipset Family
  • 1 Go de RAM

Original post:

Je suis en train d'appliquer une texture très simple à une partie de l'écran à l'aide Psychtoolbox en Matlab avec le code suivant:

win = Screen('OpenWindow', 0, 127); % open window and obtain window pointer
tex = Screen('MakeTexture', win, [255 0;0 255]); % get texture pointer
% draw texture. Args: command, window pointer, texture pointer, source
% (i.e. the entire 2x2 matrix), destination (a 100x100 square), rotation
% (none) and filtering (nearest neighbour)
Screen('DrawTexture', win, tex, [0 0 2 2], [100 100 200 200], 0, 0);
Screen('Flip', win); % flip the buffer so the texture is drawn
KbWait; % wait for keystroke
Screen('Close', win); % close screen

Maintenant, je me attends à voir ce (quatre carrés de taille égale):

Mais au lieu que je me présente (à droite et en bas sont coupés et carré en haut à gauche est trop grande):

Il est évident que le rectangle de destination est beaucoup plus grand que le rectangle source, de sorte que la texture doit être agrandie. Je pense que cela se produise de manière symétrique comme dans la première image et c'est aussi ce que je dois. Pourquoi est-ce pas le cas et que puis-je faire?

J'ai aussi essayé d'utiliser [128 0 1152 1024] comme un rectangle de destination (comme il est la place dans le centre de mon écran). Dans ce cas, tous les côtés sont 1024, ce qui rend chaque rectangle impliqué une puissance de 2. Cela ne permet pas. L'augmentation de la taille des résultats de damiers dans une situation similaire où les parties droite et ne sont pas plus en bas montrent correctement.

Comme je l'ai dit, je l'utilise Psychtoolbox, mais je sais qu'il utilise OpenGL sous le capot. Je ne sais pas beaucoup sur OpenGL non plus, mais peut-être quelqu'un qui ne peut aider sans savoir Matlab. Je ne sais pas.

Merci pour votre temps!

Était-ce utile?

La solution

Sans connaître beaucoup de choses sur le Psychtoolbox, mais après avoir traité avec des graphiques et des interfaces utilisateur beaucoup dans Matlab, la première chose que je voudrais essayer serait de jouer avec la quatrième entrée à l'écran (le " la source » entrée). Essayez décalant chaque coin par des valeurs demi-pixel et tout-pixel. Par exemple, la première chose que je voudrais essayer serait:

Screen('DrawTexture', win, tex, [0 0 2.5 2.5], [100 100 200 200], 0, 0);

Et si cela ne semble pas faire quoi que ce soit, je prochain essai:

Screen('DrawTexture', win, tex, [0 0 3 3], [100 100 200 200], 0, 0);

Mon raisonnement pour ce conseil: Je l'ai remarqué parfois que des images ou des contrôles de l'interface graphique dans mes chiffres peuvent sembler être hors d'un pixel, que je ne peux que spéculer est une sorte d'erreur d'arrondi lors du redimensionnement ou leur positionnement.

C'est le meilleur conseil que je peux donner. Hope it helps!

Autres conseils

Bien que je ne sais pas grand-chose (lire: any) Matlab, je ne sais que les textures sont très pointilleux en openGL. Aux dernières nouvelles, openGL nécessite des fichiers de texture pour être carré et d'une puissance de deux (à savoir 128 x 128, 256 x 256, 512 x 512).

Si elles ne sont pas, openGL est censé pad le fichier avec des pixels blancs appropriés où ils sont nécessaires pour répondre à cette condition, bien qu'il puisse être un coup de dés selon le système que vous exécutez sur.

Je suggère en vous assurant que votre texture répond à ces exigences checkerboard.

faire, je ne peux pas aussi tout à fait sûr de votre code affiché, mais openGL vous attend à cartographier les coins de votre texture aux coins de l'objet que vous avez l'intention de texture.

Un autre petit conseil, peut-être essayer un filtre linéaire au lieu de voisin le plus proche. Il est plus lourd informatiquement, mais se traduit par une meilleure image. Ce ne sera probablement pas d'importance à la fin.

Bien que cette aide est Matlab pas spécifique, l'espoir, il est utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top