视口坐标转换成Canvas下本地坐标与shader显示在3D物体前

2024-03-14 18:20

本文主要是介绍视口坐标转换成Canvas下本地坐标与shader显示在3D物体前,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     shader显示在3D物体前,先转化成视口坐标

  public virtual void SetESignPos()
        {
            float x = 0;

            float y = 0;

            int v = PlayerPrefsTool.GetSpecialScreen(-1);

            if (EScreenCamera != null)
            {
                Vector3 viewPoint=EScreenCamera.WorldToViewportPoint(CurENeedShowPosition);

                Logger.Log($"SetESignPos viewPoint:{viewPoint},{viewPoint.x*Screen.width},{viewPoint.y*Screen.height}");

                x = viewPoint.x * Screen.width;

                y = viewPoint.y * Screen.height;
            }
            else
            {
                Vector2 screenPos = RectTransformUtility.WorldToScreenPoint(mE_f.canvas.worldCamera, CurENeedShowPosition);

                x = screenPos.x;

                y = screenPos.y;
            }

            if (v == -1)//正常屏幕
            {
                y = Screen.height - y;
            }

            mESignMaterial.SetVector("_LP1", new Vector4(x, y, mESignMaterialVector4.z, mESignMaterialVector4.w));
        }

视口坐标转换成Canvas下本地坐标

using UnityEngine;
using UnityEngine.UI;

public class ViewportToCanvasCoordinates : MonoBehaviour
{
    public RectTransform canvasRect;

    void Update()
    {
        // 设置一个示例的视口坐标
        Vector3 viewportPoint = new Vector3(0.5f, 0.5f, 0);

        // 获取主摄像机
        Camera mainCamera = Camera.main;

        if (mainCamera != null)
        {
            // 使用主摄像机的方法将视口坐标转换为屏幕坐标
            Vector3 screenPoint = mainCamera.ViewportToScreenPoint(viewportPoint);

            // 将屏幕坐标转换为 UI 中的 Canvas 坐标
            Vector2 localPoint;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPoint, mainCamera, out localPoint);

            // 打印 UI 中的 Canvas 坐标
            Debug.Log("UI Canvas Local Point: " + localPoint);
        }
    }
}
 

这篇关于视口坐标转换成Canvas下本地坐标与shader显示在3D物体前的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809307

相关文章

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL