# NNS_G3dScrPosToWorldLine

## 構文

      #include <nnsys/g3d/util.h>

      int
      NNS_G3dScrPosToWorldLine(
          int px,
          int py,
          VecFx32* pNear,
          VecFx32* pFar
      );

## 引数

px | スクリーン上のx座標
py | スクリーン上のy座標
pNear | スクリーン上の座標に対応するNearクリップ面上の点のワールド座標系での位置
pFar | スクリーン上の座標に対応するFarクリップ面上の点のワールド座標系での位置

## 返り値

px, py がビューポート内ならば0が返されます。ビューポート外ならば、-1が返されます。

## 説明

スクリーン上の位置に対応するNearクリップ面とFarクリップ面上の点をワールド座標系で返します。pFarが`NULL`の場合は、Farクリップ面上の点の計算は省略されます。`NNS_G3dGlb`構造体にカメラ行列と射影行列が設定されている必要があります。返り値が-1の場合でも、＊pNear, ＊pFar には値が格納されていて、方向の目安として使用することができます。なお、投資射影の場合、`＊pFar`の値は＊pNearに比べて誤差が大きくなります。これは、Nearクリップ面よりFarクリップ面の方が大きいため、正規化スクリーン座標系の点から元の点を求める際にFar面の方がより拡大されるからです。なお、Nitro-SDKのG3X_SetHOffset関数を使用して3D面に対して水平オフセットをかけている場合は、あらかじめオフセットの分だけ引数のx座標を移動させておく必要があります。

## 参照

`NNS_G3dLocalOriginToScrPos NNS_G3dWorldPosToScrPos`

## 履歴

2004/11/01 初版