Matlab Psychtoolbox (OpenGL) でテクスチャを拡大/ストレッチするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/798992

  •  18-09-2019
  •  | 
  •  

質問

アップデート:これは一部のコンピュータでのみ問題になるようです。通常の直感的なコードは、自宅のコンピューターでは問題なく動作するように見えますが、職場のコンピューターでは問題が発生します。

自宅のコンピューター:(問題はありません)

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

職場のコンピューター:(この質問はこのコンピュータに当てはまります)

  • Windows XP Professional SP3
  • Intel Pentium 4 2.8 Ghz (デュアルコアだと思います)
  • インテル 82945G Express チップセット ファミリ
  • 1GBの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 つ)。

Expected result

しかし、代わりに、次の結果が得られます(右側と下の辺が切り取られ、左上の四角形が大きすぎます)。

Actual result

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

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

先ほども言いましたが、私は Psychtoolbox を使用していますが、内部で OpenGL が使用されていることは知っています。私も OpenGL についてはあまり詳しくありませんが、知っている人なら Matlab を知らなくても役立つかもしれません。わからない。

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

役に立ちましたか?

解決

Psychtoolboxについて多くのことを知らず、しかし、グラフィックスに対処し、ユーザーがMATLABでたくさんのインタフェースた、私がしようと最初にある[スクリーンの第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コントロールは、私が唯一の推測することができますピクセル、でオフように見えることを時々気づいたが、スケーリングまたはそれらを配置する丸め誤差のいくつかの種類です。

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

他のヒント

私はあまり知りませんが、

(読み:任意の)Matlabのは、私は、テクスチャはOpenGLで非常にうるさいであることを知っています。私が最後にチェック、OpenGLは、正方形と2(×512すなわち128×128、256×256、512)の消費電力であることがテクスチャファイルが必要です。

そうでない場合は、

、OpenGLのは、パッド彼らはそれはあなたがそれを実行しているシステムに応じてcrapshootことができるが、この条件を満たすために必要だ、適切な白画素のファイルになっています。

私はあなたの市松模様のテクスチャがこれらの要件に適合することを確認することをお勧めます。

また、私は非常にあなたのコード投稿から確認してくださいことはできませんが、OpenGLは、あなたがテクスチャに意図されているオブジェクトのコーナーにあなたのテクスチャのコーナーをマッピングするために期待しています。

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

このヘルプは、Matlabの特定ではありませんが、

、それが有用であると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top