2

更新:これは一部のコンピューターでのみ問題になるようです。通常の直感的なコードは、自宅のコンピューターでは正常に機能しているように見えますが、職場のコンピューターには問題があります。

自宅のコンピューター:(問題なし)

  • Windows XP Professional SP3
  • AMD Athlon 64X23800+デュアルコア2.0GHz
  • NVIDIA GeForce 7800 GT
  • 2 GB RAM

仕事用コンピューター:(この質問はこのコンピューターに適用されます)

  • Windows XP Professional SP3
  • Intel Pentium 4 2.8 Ghz(デュアルコアだと思います)
  • Intel82945GExpressチップセットファミリ
  • 1 GB RAM

元の投稿:

次のコードでMatlabのPsychtoolboxを使用して、画面の一部に非常に単純なテクスチャを適用しようとしています。

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

今、私はこれ(4つの同じサイズの正方形)を見ることを期待します:

期待される結果

しかし、代わりに私はこれを取得します(右側と下側が切り取られ、左上の正方形が大きすぎます):

実結果

明らかに、宛先の長方形はソースの長方形よりもはるかに大きいため、テクスチャを拡大する必要があります。私はこれが最初の写真のように対称的に起こることを期待します、そしてこれは私が必要とするものでもあります。なぜこれが起こらないのですか、そして私はそれについて何ができますか?

また、[128 0 1152 1024]を宛先の長方形として使用してみました(画面中央の正方形であるため)。この場合、すべての辺が1024であるため、関係する各長方形は2の累乗になります。これは役に立ちません。チェッカーボードのサイズを大きくすると、同様の状況が発生し、右側と最下部が正しく表示されません。

私が言ったように、私はPsychtoolboxを使用していますが、それが内部でOpenGLを使用していることを知っています。私もOpenGLについてはよく知りませんが、Matlabを知らなくても助けてくれる人がいるかもしれません。知らない。

御時間ありがとうございます!

4

2 に答える 2

2

私はMatlabをあまり知りませんが(読む:どれでも)、openGLではテクスチャが非常にうるさいことを知っています。最後に確認したところ、openGLでは、テクスチャファイルが正方形で2の累乗(つまり、128 x 128、256 x 256、512 x 512)である必要があります。

そうでない場合、openGLは、この条件を満たすために必要な適切な白いピクセルでファイルを埋めるはずですが、実行しているシステムによってはクラップスになる可能性があります。

チェッカーボードのテクスチャがこれらの要件に適合していることを確認することをお勧めします。

また、投稿されたコードからはよくわかりませんが、openGLでは、テクスチャの角を、テクスチャを作成しようとしているオブジェクトの角にマッピングすることを期待しています。

もう1つのアドバイスとして、最近傍の代わりに線形フィルターを試してみてください。計算量は多くなりますが、より良い画像が得られます。これはおそらく最終的には問題になりません。

このヘルプはMatlab固有のものではありませんが、役立つことを願っています。

于 2009-04-28T17:43:43.543 に答える
1

Psychtoolboxについて多くのことを知らなくても、MATLABでグラフィックスとユーザーインターフェイスをたくさん扱ってきたので、最初に試みることは、Screenへの4番目の入力(「ソース」入力)をいじることです。各コーナーをハーフピクセルとホールピクセルの値だけシフトしてみてください。たとえば、私が最初に試すことは次のとおりです。

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

そして、それが何もしないようであれば、私は次に試してみます:

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

このアドバイスの理由:図の画像やGUIコントロールがピクセル単位でずれているように見えることがありますが、これは、スケーリングや配置の際のある種の丸め誤差であると推測できます。

それが私ができる最高のアドバイスです。それが役に立てば幸い!

于 2009-04-28T17:57:45.350 に答える