Pergunta

Atualização: isso parece ser um problema em alguns computadores. O código normais e intuitivo parece funcionar bem, meu computador doméstico, mas o computador no trabalho tem problemas.

Computador doméstico: (sem problemas)

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

Computador de trabalho: (esta pergunta se aplica a este computador)

  • Windows XP Professional SP3
  • Intel Pentium 4 2,8 GHz (núcleo duplo, eu acho)
  • Intel 82945G Família de chipset Express
  • 1 GB RAM

Postagem original:

Estou tentando aplicar uma textura muito simples a uma parte da tela usando o PsychToolbox no MATLAB com o seguinte código:

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

Agora eu esperaria ver isso (quatro quadrados de tamanho igual):

Expected result

Mas, em vez disso, entendo isso (os lados direito e inferior são cortados e o quadrado superior esquerdo é muito grande):

Actual result

Obviamente, o retângulo de destino é muito maior que o retângulo de origem, portanto a textura precisa ser ampliada. Eu esperaria que isso aconteça simetricamente na primeira foto e é isso que eu preciso. Por que isso não está acontecendo e o que posso fazer sobre isso?

Eu também tentei usar [128 0 1152 1024] como um retângulo de destino (como é o quadrado no centro da minha tela). Nesse caso, todos os lados são 1024, o que faz com que cada um envolva retângulo de uma potência de 2. Isso não ajuda. Aumentar o tamanho do tabuleiro de xadrez resulta em uma situação semelhante em que os lados da direita e da direita não são mostrados corretamente.

Como eu disse, uso o PsychToolbox, mas sei que ele usa o OpenGL sob o capô. Também não sei muito sobre o OpenGL, mas talvez alguém que faça possa ajudar sem conhecer o Matlab. Não sei.

Obrigado pelo seu tempo!

Foi útil?

Solução

Sem saber muito sobre o Psychtoolbox, mas tendo lidado com gráficos e interfaces de usuário muito no Matlab, a primeira coisa que eu tentaria seria mexer com a quarta entrada para Tela (a entrada "fonte"). Tente mudar cada canto por valores de meio pixel e pixels inteiros. Por exemplo, a primeira coisa que eu tentaria seria:

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

E se isso não parecia fazer nada, eu tentaria: Em seguida, tentaria:

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

Meu raciocínio para esse conselho: às vezes notei que imagens ou controles de GUI em minhas figuras podem parecer desligados por um pixel, que só posso especular é algum tipo de erro redondo ao escalá-los ou posicioná-los.

Esse é o melhor conselho que posso dar. Espero que ajude!

Outras dicas

Embora eu não saiba muito (leia: qualquer) Matlab, sei que as texturas são muito exigentes no OpenGL. Por último, verifiquei, o OpenGL exige que os arquivos de textura sejam quadrados e de uma potência de dois (ou seja, 128 x 128, 256 x 256, 512 x 512).

Se não forem, o OpenGL deve preencher o arquivo com pixels brancos apropriados, onde precisam atender a essa condição, embora possa ser um crapshoot, dependendo do sistema em que você está executando.

Sugiro garantir que a textura do seu tabuleiro de xadrez se encaixe nesses requisitos.

Além disso, não posso me certificar do seu código publicado, mas o OpenGL espera que você mapeie os cantos da sua textura para os cantos do objeto que você pretende ter uma textura.

Outro conselho, talvez tente um filtro linear em vez do vizinho mais próximo. É mais pesado computacionalmente, mas resulta em uma imagem melhor. Isso provavelmente não importará no final.

Embora essa ajuda não seja específica do MATLAB, espero que seja útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top