生成程序网格时旋转问题

杰里米·弗尼尔(Jeremy Fournier)

我觉得自己在弄清楚这个问题上只是一个精神障碍,所以我想我应该检查一下有关我的代码的建议。

我正在尝试生成一个相当简单/一致的形状的道路网格。问题是,在使用Transform.forward和Transform.right命令调整中心点时,它无法正确旋转。

这是我计算顶点的简化版本(已删除了坡度和倾斜):

CreateRoadPiece ( Transform _transform, Vector3 center )
    {
        Vector3 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11;

        p0 = center + _transform.forward - ( _transform.right * 5.0f );
        p1 = center + _transform.forward + ( _transform.right * 5.0f );

        p2 = center + ( _transform.right * 5.0f );
        p3 = center - ( _transform.right * 5.0f );

        p4 = center - _transform.forward - ( _transform.right * 5.0f );
        p5 = center - _transform.forward + ( _transform.right * 5.0f );

        p6 = p0;
        p7 = p1;
        p8 = p2;
        p9 = p3;
        p10 = p4;
        p11 = p5;

        p0.y -= 0.1f;
        p1.y -= 0.1f;
        p2.y -= 0.1f;
        p3.y -= 0.1f;
        p4.y -= 0.1f;
        p5.y -= 0.1f;

        p6.y += 0.1f;
        p7.y += 0.1f;
        p8.y += 0.1f;
        p9.y += 0.1f;
        p10.y += 0.1f;
        p11.y += 0.1f;
    }

_transform是具有网格组件的对象,它已旋转并定位为面对道路带应布置的方向。

道路块宽10个单位,高0.2个单位,深度2个单位。

我以为使用transform.forward和transform.right可以解决旋转问题,但也许我遗漏了什么?

面对Z +时,一切正常。

感谢您的任何投入。

杰里米·弗尼尔(Jeremy Fournier)

我终于找到了解决方案。我已经知道计算(大部分)是正确的,但是定位不正确。在上面的计算中,主要是将Transform.TransformPoint和所有变体(方向,向量及其逆)以及中心变量都抛出了,但是我终于设法达到了需要的东西。

CreateRoadPiece ( Transform _transform, Vector3 center, byte unitDirection )
{

        Vector3 transformForward = _transform.TransformDirection( _transform.forward );
        Vector3 transformRight = _transform.TransformDirection( _transform.right);

        if( unitDirection == 1 || unitDirection == 3 )
        {
            transformForward = -transformForward;
            transformRight = -transformRight;
        }

        p0 = ( center + ( transformForward + ( -transformRight * 5.0f ) ) );
        p1 = ( center + ( transformForward + ( transformRight * 5.0f ) ) );
        p2 = ( center + ( transformRight * 5.0f ) );
        p3 = ( center + ( -transformRight * 5.0f ) );
        p4 = ( center + ( -transformForward + ( -transformRight * 5.0f ) ) );
        p5 = ( center + ( -transformForward + ( transformRight * 5.0f ) ) );
}

Unity的Mesh系统似乎只能在世界空间中工作,但是我将Transform的旋转用于其他检查(主要是在创建路径时的行进方向)。因此,此解决方案似乎可以很好地解决我的展示位置问题(我还使用了:

_transform.InverseTransformPoint ( center );

当我将中心值发送到此函数时。

编辑:

将代码略微修改为我当前的解决方案。unitDirection是一个字节值,用于指示旋转是0(0),90(1),180(2)还是270(3)(所有部件仅旋转90度以使组合更简单(主要是相交))。顺序在90度和270度旋转时被颠倒了,因此对transformForward和transformRight所做的调整将所有内容放置在了应该的位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

程序网格生成脚本问题

来自分类Dev

在Unity中创建程序网格生成器时的尺寸问题

来自分类Dev

无法在动画更新时旋转每个网格

来自分类Dev

我的应用程序的旋转问题

来自分类Dev

引导程序-网格系统-固定高度问题

来自分类Dev

在python中旋转值时面临的问题

来自分类Dev

克隆A帧实体时出现旋转问题

来自分类Dev

旋转场景时EdgesHelper失去其网格

来自分类Dev

缩放时的 Bootstrap 网格对齐问题

来自分类Dev

更新kartik网格时隐藏装载程序

来自分类Dev

为什么在使用生成器时我的程序存在可变的生存期问题?

来自分类Dev

为什么在使用生成器时我的程序存在可变的生存期问题?

来自分类Dev

使用 XSLT 生成重复的 Bootstrap 网格行和列的问题

来自分类Dev

在Three.js中导入的FBX模型的另一个网格周围的网格旋转问题

来自分类Dev

如何在引导程序中解决此网格系统问题

来自分类Dev

Android应用中旋转图像时出现问题

来自分类Dev

在旋转时重新定位self.view.frame的问题

来自分类Dev

尝试旋转SVG动画时遇到问题

来自分类Dev

旋转时UINavigationController类中的swift-frame问题

来自分类Dev

旋转对象时旋转

来自分类Dev

尝试调整gridworld网格时遇到问题

来自分类Dev

尝试调整gridworld网格时遇到问题

来自分类Dev

翻转网格标题的问题以及触摸设备时的操作

来自分类Dev

生成Sudoku网格时出现意外输出

来自分类Dev

旋转时在应用程序后面更改颜色

来自分类Dev

当iOS 8中显示UIAlertView时,应用程序旋转

来自分类Dev

以编程方式卸载应用程序:旋转设备时崩溃

来自分类Dev

当我旋转Android设备时,应用程序失败

来自分类Dev

progressDialog应用程序在屏幕旋转时崩溃

Related 相关文章

热门标签

归档