loops - 为什么 Vector3 不更新 Unity3d

标签 loops unity3d vector raycasting spherical-coordinate

我已经为此失去了一段时间的理智。只需忽略被注释掉的部分(不是问题)。我正在尝试进行 360 度经度和 180 度经度扫描,然后进行光线转换。但显然方向向量(在本例中为 Dir)停留在 (0, 0, -1)。我检查了 x y 和 z 值,它们工作正常。我现在不知道出了什么问题。在我自杀之前请回答。 感叹

    {
        Vector3 Dir = new Vector3(0.0f, 0.0f, 0.0f);
        Output = new Texture2D(2160, 1080);
        for (int i = 0; i < 1080; i++)
        {
            float theta = (Mathf.Deg2Rad * i * 1.0f) / 6.0f;
            for (int j = 0; j < 2160; j++)
            {
                float phi = (Mathf.Deg2Rad * j) / 6.0f;
                float x = Mathf.Sin(theta) * Mathf.Cos(phi);
                float y = Mathf.Sin(theta) * Mathf.Sin(phi);
                float z = Mathf.Cos(theta);
                Dir = new Vector3(x, y, z);
                Debug.Log(x + " " + y + " " + z);
                /* RaycastHit raycastHit;
                if (Physics.Raycast(transform.position, Dir, out raycastHit))
                {
                    Renderer rend = raycastHit.transform.GetComponent<MeshRenderer>();
                    Texture2D tex = rend.material.mainTexture as Texture2D;
                    Vector2 pCoord = raycastHit.textureCoord;
                    pCoord.x *= tex.width;
                    pCoord.y *= tex.height;
                    Color color = tex.GetPixel((int)(pCoord.x * rend.material.mainTextureScale.x), (int)(pCoord.y * rend.material.mainTextureScale.y));
                    Output.SetPixel(j, i, color);
                    Debug.Log("Ray hit an object! @  theta " + i.ToString() + " phi " + j.ToString() + " Color: " + color.ToString() + "Hit Coordinate x: " + pCoord.x + " y: " + pCoord.y);
                }
                */
            }
        }
        //System.IO.File.WriteAllBytes("D:\\FYProject\\WebcamSnaps\\" + naming + ".png", Output.EncodeToPNG());
    }

最佳答案

在您的一条评论中,您说“我在任何迭代中除了 (0,0,-1) 之外什么也得不到。”

您的代码有一个迭代因子为 1080 的外部循环。您的内部循环的迭代因子为 2160。您的组合循环总共产生 2,332,800 个输出值。我不相信你验证了超过 200 万条调试语句的输出。我认为您检查了最后几十个值,一遍又一遍地看到相同的输出,并假设该模式一直沿链向上延伸。那是你的第一个错误。

您的第二个错误是假设格式化功能是一个错误而浪费了几个小时。

Vector3.ToString() 将其输出四舍五入到小数点后一位。如果您单独打印组件,它们将显示您所期望的。

我很同情你。

关于loops - 为什么 Vector3 不更新 Unity3d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66686903/

相关文章:

r - 循环 str_c( ) 函数以按 1 - 100 的顺序连接列

c# 我必须为新类实例指定名称吗?

c++ - 无符号整型 vector C++

R:prop.test 根据传递给它的是矩阵还是向量返回不同的值

r - 计算列中连续重复项的数量

javascript - 我们可以在js中同时映射两个数组吗?

java - JTable Unknown 错误,该怎么办?

php - 如果不在其他数组中,则从数组中删除值,但保持相同的顺序

unity3d - Zenject 全局绑定(bind)

ios - 在iOS App中, Controller 未点击屏幕右侧