unityの3D座標からスクリーン座標への変換について質問です。
RectTransformUtility.WorldToScreenPointと言う命令を使えばすぐに取得できる事についてです
TransformのpositionをJobSystemのTransformAccessから変更したいと思っています。
WorldToScreenPointの引数のCameraはJobsystemの中で使えない為、ビューポート座標に手動変換してTransformを更新しようと思ってます。
こちらの記事を参考に
https://edom18.hateblo.jp/entry/2019/01/06/121013
逆行列をしないでScreen座標を求めようとしました。
(とりあえずテストの為、メインスレッドで実装してます。)
var v = _cam.worldToCameraMatrix;//Camera座標変換 var p = _cam.projectionMatrix;//プロジェクション変換 var vp = Matrix4x4.identity;//ビューポート変換 vp.m00 = Screen.width / 2f; vp.m03 = Screen.width / 2f; vp.m11 = Screen.height / 2f; vp.m13 = Screen.height / 2f; vp.m22 = (_cam.farClipPlane - _cam.nearClipPlane) / 2f; vp.m23 = (_cam.farClipPlane + _cam.nearClipPlane) / 2f; var vt = v * _t.position; var pt = p * vt; var vpt = vp * pt;
この時に最後のvptの中身として
var rp = RectTransformUtility.WorldToScreenPoint(_cam, _t.position);
と同じ答えを期待したのですが、上手く答えが返ってきません。
計算順序や計算方法のおかしい所をご教示願えますでしょうか?
恐縮ですが、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/31 07:04