国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++)

這篇具有很好參考價值的文章主要介紹了【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、射線檢測

1)定義

射線檢測(Ray Casting) 是一種計算機圖形和計算機圖形學中的基本技術,用于檢測光線或射線是否與三維場景中的物體相交,以確定相交點的位置和其他相關信息。射線檢測通常用于實現(xiàn)各種交互功能、渲染效果和物理模擬,包括但不限于鼠標拾取、光線追蹤、碰撞檢測和物體拾取等。

1)射線與3D場景中的物體交互的流程

步驟 描述
1 定義射線:
定義射線的起點和方向向量。
2 檢測相交:
沿著射線的方向,從起點開始沿射線前進,檢測射線是否與場景中的任何物體相交。
通常,這涉及到進行碰撞檢測,以確定是否有物體與射線相交。
3 確定交點:
如果射線與物體相交,計算交點的位置。
交點通常以3D坐標的形式給出,表示射線與物體相交的點。
4 處理交互:
根據(jù)應用的需求,您可以在交互點上執(zhí)行特定的操作,如選擇物體、執(zhí)行動作或渲染效果。
5 遍歷所有可能的相交點:
射線檢測通??梢苑祷囟鄠€相交點,因此可以考慮遍歷所有可能的交點以處理多重相交。

2)射線檢測藍圖函數(shù)

藍圖函數(shù) 描述
LineTraceByChannel 執(zhí)行一條射線檢測,檢測與指定碰撞通道相交的物體。返回一個 Hit Result 結構。
SphereTraceByChannel 以球體的形狀執(zhí)行射線檢測,檢測球體與物體的碰撞。返回一個 Hit Result 結構。
LineTraceMultiByChannel 執(zhí)行射線檢測,檢測與指定碰撞通道相交的所有物體。返回一個 Hit Results 數(shù)組。
SphereTraceMultiByChannel 以球體的形狀執(zhí)行射線檢測,檢測球體與多個物體的碰撞。返回一個 Hit Results 數(shù)組。
BoxTraceByChannel 執(zhí)行射線檢測,檢測與指定碰撞通道相交的物體,使用盒子形狀。返回一個 Hit Result 結構。
MultiSphereTraceByChannel 執(zhí)行多個球體形狀的射線檢測,檢測多個球體與物體的碰撞。返回一個 Hit Results 數(shù)組。
LineTraceForObjects 執(zhí)行射線檢測,檢測與指定物體類型相交的物體。返回一個 Hit Result 結構。
SphereTraceForObjects 以球體的形狀執(zhí)行射線檢測,檢測與指定物體類型相交的物體。返回一個 Hit Result 結構。
BoxTraceForObjects 執(zhí)行射線檢測,檢測與指定物體類型相交的物體,使用盒子形狀。返回一個 Hit Result 結構。
MultiSphereTraceForObjects 執(zhí)行多個球體形狀的射線檢測,檢測與指定物體類型相交的物體。返回一個 Hit Results 數(shù)組。
CapsuleTraceByChannel 以膠囊體的形狀執(zhí)行射線檢測,檢測膠囊體與物體的碰撞。返回一個 Hit Result 結構。
CapsuleTraceForObjects 以膠囊體的形狀執(zhí)行射線檢測,檢測與指定物體類型相交的物體。返回一個 Hit Result 結構。

3)藍圖實現(xiàn)根據(jù)鼠標點擊位置獲取場景中的坐標值

【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++),虛幻引擎UE 基礎,虛幻,ue4,ue5

4)根據(jù)相機中心點獲取場景中的坐標值

需要獲取到pawn里的相機。
【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++),虛幻引擎UE 基礎,虛幻,ue4,ue5

5)射線檢測相關C++函數(shù)

(僅列舉linetrace系列其他大同小異)

  1. LineTraceSingleByChannel
    • 用于檢測一條射線與第一個相交物體的碰撞。
    • 返回一個FHitResult結構,其中包含有關碰撞的信息,如碰撞點、碰撞法線和碰撞物體的引用。
bool UWorld::LineTraceSingleByChannel(FHitResult& OutHit, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const FCollisionQueryParams& Params)
  1. LineTraceMultiByChannel
    • 用于檢測一條射線與多個相交物體的碰撞。
    • 返回一個TArray<FHitResult>,其中包含所有相交物體的碰撞信息。
int32 UWorld::LineTraceMultiByChannel(TArray<FHitResult>& OutHits, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const FCollisionQueryParams& Params)
  1. LineTraceSingleByObjectType
    • 類似于LineTraceSingleByChannel,但是使用物體類型(EObjectTypeQuery)而不是碰撞通道進行檢測。
bool UWorld::LineTraceSingleByObjectType(FHitResult& OutHit, const FVector Start, const FVector End, FObjectQueryParams ObjectQueryParams, const FCollisionQueryParams& Params)
  1. LineTraceMultiByObjectType
    • 類似于LineTraceMultiByChannel,但是使用物體類型(EObjectTypeQuery)而不是碰撞通道進行檢測。
int32 UWorld::LineTraceMultiByObjectType(TArray<FHitResult>& OutHits, const FVector Start, const FVector End, FObjectQueryParams ObjectQueryParams, const FCollisionQueryParams& Params)

6)C++實現(xiàn)手動創(chuàng)建射線檢測

FVector StartLocation;  // 射線的起點坐標
FVector ForwardVector;  // 射線的方向向量
FHitResult HitResult;  // 用于存儲碰撞信息的變量

// 設置射線的起點坐標
StartLocation = PlayerCameraComponent->GetComponentLocation();  // PlayerCameraComponent是攝像機組件

// 設置射線的方向向量
ForwardVector = PlayerCameraComponent->GetForwardVector();  // 獲取攝像機的前向向量

// 建立射線
FVector EndLocation = ((ForwardVector * RayLength) + StartLocation);  // 計算射線的終點坐標

// 進行射線檢測
if (GetWorld()->LineTraceSingleByChannel(HitResult, StartLocation, EndLocation, ECC_Visibility))
{
    // 射線與物體相交,可以在HitResult中獲取碰撞信息
    AActor* HitActor = HitResult.GetActor();
    FVector ImpactPoint = HitResult.ImpactPoint;
    // 進一步處理交互邏輯
}

PlayerCameraComponent:攝像機組件
LineTraceSingleByChannel:射線檢測函數(shù)
HitResult:碰撞的物體和碰撞點
RayLength:射線的長度;
ECC_Visibility:射線檢測所使用的碰撞通道文章來源地址http://www.zghlxwxcb.cn/news/detail-734139.html

7)C++實現(xiàn)點擊獲取場景中的坐標值


void AYourPlayerController::GetSceneLocationFromMouse()
{
    // 獲取玩家控制器
    APlayerController* PlayerController = this;

    if (PlayerController)
    {
        // 獲取鼠標點擊位置
        FVector MouseLocation, MouseDirection;
        PlayerController->DeprojectMousePositionToWorld(MouseLocation, MouseDirection);

        // 創(chuàng)建射線,用于射線檢測
        FHitResult HitResult;
        FCollisionQueryParams CollisionParams;

        // 執(zhí)行射線檢測
        if (GetWorld()->LineTraceSingleByChannel(HitResult, MouseLocation, MouseLocation + MouseDirection * YourRayLength, ECC_Visibility, CollisionParams))
        {
            // 獲取射線與場景相交的位置
            FVector SceneLocation = HitResult.Location;

            // 打印結果
            UE_LOG(LogTemp, Warning, TEXT("Scene Location: %s"), *SceneLocation.ToString());
        }
    }
}

二、非射線檢測的情況

1)根據(jù)相機當前位置獲取中心點的世界坐標


void AYourPlayerController::GetCameraCenterLocation()
{
    // 獲取玩家控制器的視圖控制器
    APlayerController* PlayerController = this;

    if (PlayerController)
    {
        // 獲取相機組件
        UCameraComponent* CameraComponent = PlayerController->PlayerCameraManager->GetCameraComponent();

        if (CameraComponent)
        {
            // 獲取相機位置
            FVector CameraLocation = CameraComponent->GetComponentLocation();

            // 獲取相機旋轉
            FRotator CameraRotation = CameraComponent->GetComponentRotation();

            // 計算相機中心點的位置(通常位于相機位置的前方,視角方向)
            FVector CameraForwardVector = CameraRotation.Vector();
            FVector CameraCenterLocation = CameraLocation + CameraForwardVector * YourDistance;  // 替換 YourDistance 為相機中心點到相機位置的距離

            // 將相機中心點的位置轉換為場景中的坐標
            FVector WorldLocation = CameraCenterLocation;

            // 打印結果
            UE_LOG(LogTemp, Warning, TEXT("Camera Center Location: %s"), *WorldLocation.ToString());
        }
    }
}

到了這里,關于【虛幻引擎UE】UE4/UE5 基于2D屏幕坐標獲取場景3D坐標 射線檢測(藍圖/C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【虛幻引擎UE】UE4/UE5 新人科普向

    【虛幻引擎UE】UE4/UE5 新人科普向

    Unreal Engine是當前最為流行的游戲引擎之一,具有豐富的游戲開發(fā)功能和強大的游戲引擎渲染能力。 UE5官方文檔:UE5官方文檔非常詳細,介紹了UE5的各個功能和應用,適合入門學習和深入探究。鏈接:https://docs.unrealengine.com/5.1/zh-CN/ UE5中文社區(qū):該社區(qū)聚集了大量的UE5開發(fā)者,

    2024年02月09日
    瀏覽(119)
  • 【虛幻引擎】UE4/UE5科大訊飛文字合成語音

    【虛幻引擎】UE4/UE5科大訊飛文字合成語音

    B站視頻鏈接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0 ? 第一步:首先進入訊飛開放平臺注冊一個賬號,然后創(chuàng)建一個 創(chuàng)建一個應用,命名按照你自己的想法來,會產(chǎn)生一個APPID,具體參考UE4如何接入科大訊飛的語音識別_ue4 科大訊飛的語音識別_飛起的豬的博客-CSDN博

    2024年02月13日
    瀏覽(101)
  • 【虛幻引擎】UE4/UE5鼠標點擊事件實現(xiàn)物體移動

    【虛幻引擎】UE4/UE5鼠標點擊事件實現(xiàn)物體移動

    ?在UE4/UE5中,引擎有它自己的一套框架體系,虛幻就是基于這一個框架體系來實現(xiàn)的。其中就有PlayerController(玩家控制器),玩家控制器中就有對鼠標的一系列設置,包括顯示鼠標,允許點擊事件等。 ?1.創(chuàng)建PlayerController,命名為MyPlayerController 2.打開MyPlayerController,勾選參數(shù)

    2024年02月10日
    瀏覽(317)
  • 【虛幻引擎】UE4/UE5數(shù)字孿生與前端Web頁面匹配

    【虛幻引擎】UE4/UE5數(shù)字孿生與前端Web頁面匹配

    ? ? ? ? 數(shù)字孿生是一種多維動態(tài)的數(shù)字映射,可大幅提高效能。數(shù)字孿生是充分利用物理模型、傳感器更新、運行歷史等數(shù)據(jù),集成多學科、多物理量、多尺度、多概率的仿真過程,在虛擬空間中完成對現(xiàn)實體的復制和映射,從而反映物理實體的全生命周期過程。數(shù)字孿生

    2024年02月03日
    瀏覽(102)
  • 【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 2

    【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 2

    (基于UE5 的Python支持插件) 支持Python語言基于UE5進行開發(fā) GIT地址:https://github.com/mamoniem/UnrealEditorPythonScripts (基于UE5 的Haxe支持插件) Haxe是一門新興的開源編程語言,是一種開源的編程語言。支持Haxe語言基于UE5進行開發(fā)。 GIT地址:https://github.com/RobertBorghese/Haxe-UnrealEngine

    2024年02月06日
    瀏覽(174)
  • 【虛幻引擎UE】UE4/UE5 GIS輔助類插件推薦及使用介紹

    【虛幻引擎UE】UE4/UE5 GIS輔助類插件推薦及使用介紹

    此插件將虛幻引擎連接到Speckle,允許從Speckle接收版本化的3D數(shù)據(jù),可以實現(xiàn)Revit、Rhino、Blender、Sketchup、Unity、虛幻引擎、AutoCAD等之間的完全互操作協(xié)作。 這是一個涵蓋了在展廳、工業(yè)產(chǎn)品或其他3D場景中導航的許多可能性的系統(tǒng)。在窗口、觸摸屏、手機和Html5上。 只需快速

    2024年02月07日
    瀏覽(117)
  • 【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 1

    【虛幻引擎UE】UE4/UE5 功能性插件推薦及使用介紹 1

    實現(xiàn)POST/GET基本方法,并支持HEAD帶信息。 使用案例:【虛幻引擎UE】UE5 三種模式調(diào)用API詳解(案例基于免費Varest插件) 能夠快速實現(xiàn)打開對話框獲取數(shù)據(jù)的導入、導出路徑。 某月限免插件,比較方便的地圖插件,可以改改樣式直接用。 http下載數(shù)據(jù)到指定路徑 按空格可以切

    2023年04月11日
    瀏覽(103)
  • UE4,UE5虛幻引擎,Command Console控制臺命令,參數(shù)集

    UE4,UE5虛幻引擎,Command Console控制臺命令,參數(shù)集

    1、Command Console控制臺命令,虛幻官方文檔 https://docs.unrealengine.com/5.0/zh-CN/unreal-editor-interface/ 2、在cmd控制臺 help 并按 Enter 3、自動跳轉到網(wǎng)頁,在網(wǎng)頁中,可以查找所有的命令行參數(shù)。

    2024年02月15日
    瀏覽(33)
  • 解決UE4 UE5 虛幻引擎 關卡內(nèi)或sequence 播放多個視頻卡頓問題

    解決UE4 UE5 虛幻引擎 關卡內(nèi)或sequence 播放多個視頻卡頓問題

    在項目設置中搜索緩存,修改其中的參數(shù)即可解決問題,默認為1G,詳細見圖 經(jīng)測試,單個關卡內(nèi)使用藍圖或在sequence內(nèi)創(chuàng)建媒體,播放30個mp4視頻或者序列幀分辨率為1080p,可流暢播放,實時幀數(shù)40fps,使用設備(2080ti,內(nèi)存64G)

    2024年02月11日
    瀏覽(104)
  • UE4/UE5 虛幻引擎,Pawn的碰撞,怎么防止Pawn移動的時候穿透物體。

    UE4/UE5 虛幻引擎,Pawn的碰撞,怎么防止Pawn移動的時候穿透物體。

    前言:在UE項目開發(fā)中,有些我們需要自己新建一個Pawn來控制視角,但是如果我們沒有設置Pawn的碰撞,那么Pawn在移動的過程中,很容易穿到Actor里面。而有的時候我們并不需要Pawn穿過物體,就必須要給Pawn增加碰撞。 1、新建一個Pawn類。 2、 添加FloatingPawnMovement(必須添加這

    2023年04月12日
    瀏覽(210)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包