Domanda

Aggiornamento:Questo sembra essere un problema in alcuni computer.Normale, intuitiva codice sembra funzionare bene il mio computer di casa, ma il computer ha dei problemi.

Home computer:(senza problemi)

  • Windows XP Professional SP3
  • AMD Athlon 64 X2 3800+ Dual Core 2.0 GHz
  • NVIDIA GeForce 7800 GT
  • 2 GB DI RAM

Computer di lavoro:(questa domanda vale anche per questo computer)

  • Windows XP Professional SP3
  • Intel Pentium 4 2.8 Ghz (dual-core, credo)
  • Intel 82945G Express Chipset Family
  • 1 GB DI RAM

Post originale:

Sto cercando di applicare una semplice texture per una parte dello schermo utilizzando Psychtoolbox in Matlab con il seguente codice:

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

Ora mi aspetto di vedere questo (quattro quadrati uguali dimensioni):

Expected result

Ma invece ottengo questo (a destra e in basso i lati sono tagliati fuori e in alto a sinistra la piazza è troppo grande):

Actual result

Ovviamente il rettangolo di destinazione è molto più grande del rettangolo di origine, in modo che la texture deve essere ingrandita.Mi aspetto che questo accada, simmetricamente, come nella prima foto, e questo è anche ciò di cui ho bisogno.Perché questo non succede e cosa posso fare?

Ho provato anche con [128 0 1152 1024] come un rettangolo di destinazione (per come la piazza nel centro del mio schermo).In questo caso, tutti i lati sono 1024, che rende ciascun rettangolo una potenza di 2.Questo non aiuta.Aumentare la dimensione della scacchiera risultati in una situazione simile, dove la destra e più in basso i lati non sono mostrati correttamente.

Come ho detto, io uso Psychtoolbox, ma so che utilizza OpenGL sotto il cofano.Non so molto su OpenGL, ma forse qualcuno che può aiutare, senza sapere Matlab.Non so.

Grazie per il vostro tempo!

È stato utile?

Soluzione

Senza sapere molto circa il Psychtoolbox, ma dopo aver affrontato con grafica e interfacce utente molto in MATLAB, la prima cosa che proverei sarebbe a giocherellare con la quarta ingresso di Schermo (la "fonte" di ingresso).Provare a spostare ogni angolo della metà di pixel e pixel interi valori.Per esempio, la prima cosa che proverei sarebbe:

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

E se questo non sembra fare nulla, vorrei provare a:

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

Il mio ragionamento per questo consiglio:Ho notato a volte che le immagini o controlli GUI nella mia cifre possono apparire fuori da un pixel, che posso solo ipotizzare un qualche tipo di errore di arrotondamento quando la scala o il loro posizionamento.

Questo è il miglior consiglio che posso dare.Speranza che aiuta!

Altri suggerimenti

Mentre io non ne so molto (leggi:qualsiasi) Matlab, so che le texture sono molto esigente in openGL.Ultima volta che ho controllato, openGL richiede file delle texture quadrate e di una potenza di due (es.128 x 128, 256 x 256, 512 x 512).

Se non lo sono, openGL dovrebbe pad il file con le opportune pixel bianchi dove sono necessari per soddisfare questa condizione, anche se potrebbe essere un crapshoot, a seconda che il sistema è in esecuzione su di esso.

Io suggerisco di fare certi che il vostro texture scacchiera soddisfa questi requisiti.

Inoltre, non riesco a verificare dal codice postato, ma openGL si aspetta la mappa angoli della vostra texture agli angoli dell'oggetto che si ha intenzione di texture.

Un altro po ' di consigli, magari provare un filtro lineare invece di vicinato.E ' più pesante dal punto di vista computazionale, ma i risultati in un'immagine migliore.Questo probabilmente non importa, alla fine.

Mentre questo non è Matlab specifico, spero sia utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top