沿着向量在远处寻找点

时间:2019-02-16 11:52:06

标签: unity3d 3d

给出一个已知的方向和范围,我试图计算从起始点开始在该范围内沿矢量的3D位置。

为此,我基本上遵循Unity手册以及有关此主题的其他各种问题中提供的解决方案:

  

将您的方向归一化并乘以所需的   距离。

这对我不起作用,但我不知道出了什么问题。这是我的代码,应该从起点到鼠标光标位置画一条线,以距起点的给定距离结束:

IEnumerator DrawLineToMouse(float range)
{   
    RayCastHit hit;
    Vector3 endPos;
    float rangeSquared = Mathf.Sqrt(range);

    while (Input.GetButton("Fire1"))
    {
        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 2000))
        {
            endPos = (hit.point - startPos).normalized * rangeSquared; // startPos is the starting point of the line to be drawn  
            Debug.DrawLine(startPos, hit.point, Color.green, Time.deltaTime);
            Debug.DrawLine(startPos, endPos, Color.red, Time.deltaTime);   
        } 

        yield return null;
    }
}

由于某种原因,方向似乎偏离了方向。在此图片中,绿色的Debug.Draw线从起点直接到鼠标位置,红色线到计算出的向量:

enter image description here

我尝试过透视相机和正交相机,并且尝试过改变起点,但问题是相同的。我不知道该尝试使用什么代码,因为我读过的所有内容都表明它应该可以工作。

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

当前,您的endPos位于矢量距离和方向,但从// JNIEnv *env is created before I call function jintArray CallStaticFunction(const char* functionName, const int* parameter, const size_t size) { jmethodID mid = env->GetStaticMethodID(cls, functionName, "([I)[I"); for(size_t i=0;i<size;++i) { printf("parameter = %d\n", parameter[i]); } if (mid) { jintArray iarr = env->NewIntArray(size); env->SetIntArrayRegion(iarr, 0, size, parameter); jintArray array = (jintArray)env->CallStaticObjectMethod(cls, mid, iarr); return array; } else { printf("find statis int method failed\n"); exit(3); } }

开始

相反,它应该是

env = ... //all the jvm initializatin work
int buf[3];
for(int i=0;i<3;++i){
    buf[i] = i;
}
jintArray ret = CallStaticFunction("arrayFunc", buf, 3);
for(int i=0;i<3;++i){
    printf("%d\n", ret[i]);
}

或者为了更好的理解

parameter = 0
parameter = 1
parameter = 2
0
0
0