• (转载)UE4的射线拾取--LineTraceSingle 和 LineTraceMulti


    Ray-Trace作用于射线拾取。

    射线拾取主要相关 
    1.拾取函数是UWorld的多个方法。比如LineTraceSingle是单一拾取,拾取到一个之后就不继续穿透了,而LineTraceMulti会拾取多个目标。 
    2.射线拾取的主要参数有拾取开始点,结束点,拾取结果(一个FHitResult类型的引用,相当于返回值)拾取的碰撞通道和一个FCollisionQueryParams类型的参数。这个FCollisionQueryParams主要管理了相当多的碰撞相关参数。 
    3.拾取使用的碰撞模型是Simple模型,但是在FCollisionQueryParams里边有一个参数bTraceComplex。如果设置为true,则会使用pre poly碰撞来检测,这时候会有很大的计算开销,但是对于拾取来说是值得的,因为不会被看不见的边边角角给阻挡了。FCollisionQueryParams里边还有相当多的有用参数,比如bReturnPhysicalMaterial决定是否返回碰撞的物理材质,InIgnoreActor可以设置单独的不接受拾取的Actor。 
    4.射线拾取返回bool,每次调用都会返回,不阻塞。返回true时表示拾取到了物体。 
    5.拾取的所有结果都在FHitResult参数里,包括拾取的地点,法线和拾取到的Actor。

    我们直接看看C++的一个拾取例子。

        FVector CamLoc;
        FRotator CamRot;
    
        if (Controller == NULL)
            return NULL;
    
        /* 得到玩家的camera方向和位置 */
        Controller->GetPlayerViewPoint(CamLoc, CamRot);
        const FVector TraceStart = CamLoc;
        const FVector Direction = CamRot.Vector();
        const FVector TraceEnd = TraceStart + (Direction * MaxUseDistance);//计算射线的终点
    
        //设置碰撞参数,Tag为一个字符串用于以后识别,true是TraceParams.bTraceComplex,this是InIgnoreActor
        FCollisionQueryParams TraceParams(FName(TEXT("TraceUsableActor")), true, this);
        TraceParams.bTraceAsyncScene = true;
        TraceParams.bReturnPhysicalMaterial = false;
        //使用复杂Collision判定,逐面判定,更加准确    
        TraceParams.bTraceComplex = true;
    
        /* FHitResults负责接受结果 */
        FHitResult Hit(ForceInit);
        GetWorld()->LineTraceSingle(Hit, TraceStart, TraceEnd, ECC_Visibility, TraceParams);
    
        /* 全局画线函数,也可以用ULineBatchComponent的画线函数 */
        //DrawDebugLine(GetWorld(), TraceStart, TraceEnd, FColor::Red, false, 1.0f);
    
          return Cast<XXXX>(Hit.GetActor());

    原文地址:http://blog.csdn.net/zzk1995/article/details/49010999
  • 相关阅读:
    uninstall_edge:win10带浏览器edge卸载工具
    安装spacedesk后,Win10状态栏图标间距变宽
    jacob实现语音朗读一段文本
    汇编语言-12内中断
    告警只提示一次,未解决也不再次提示
    汇编语言-11标志寄存器
    第2章 顺序表及其顺序存储
    第1章 概论
    再见:计算机行业
    QPainter
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/8303238.html
Copyright © 2020-2023  润新知