Unity 实现在模型表面进行绘画

ops/2025/3/6 21:12:34/

Texture2D-SetPixels32 - Unity 脚本 API

实现思路

从笔尖位置发射射线获取画纸上碰撞位置的UV 纹理坐标以确认笔迹位置,射线检查碰撞的最大距离即笔尖距离画纸的最大距离,利用Texture2D.SetPixels32 实现对画纸贴图颜色的修改。

核心代码

发射一条以笔尖位置为起点,笔尖forward 方向的射线检测碰撞获取碰撞位置处的UV 纹理坐标。maxDis 限制笔尖与画纸距离。

Ray ray = new Ray(nibTrans.position, dir);
//Debug.DrawRay(nibTrans.position, ray.direction, Color.red);
if (Physics.Raycast(ray, out RaycastHit hitInfo, maxDis))
{//hitInfo.textureCoord
}

 以碰撞位置为中心,笔迹范围大小计算笔迹开始位置。

startPosX = (int)(paintPos.x * textureWidth - (painterRange / 2f));
startPosY = (int)(paintPos.y * textureHeight - (painterRange / 2f));

修改贴图颜色并将修改的像素上传至显卡。

curTexture.SetPixels32(startPosX, startPosY, painterRange, painterRange, painterColor);
curTexture.Apply();

若画纸为一个平面,可利用画纸上任意三个点确认画纸的法线向量,以画纸的法线向量为射线方向可减小画笔出现倾斜时笔迹位置的偏差。

dir = Vector3.Cross(pointsTrans[1].position - pointsTrans[0].position, pointsTrans[2].position - pointsTrans[0].position).normalized;

画笔与射线方向的夹角小于一定角度时,则不进行贴图颜色修改。

angle = Vector3.Angle(transform.forward, dir);
if (angle < minAngle) return;

效果


http://www.ppmy.cn/ops/163691.html

相关文章

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤&#xff1a; 1.打开vs&#xff0c;创建一个新项目&#xff0c;分别在搜素框中选择C#、Windows、桌面&#xff0c;然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”&#xff0c;右键单击“数据连接”&#xff0…

[Computer Vision]实验六:视差估计

目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片&#xff0c;估算图片的视差/深度&#xff1b;体现极线校正&#xff08;例如打印前后极线对&#xff09;、同名点匹配…

DDK:Distilling Domain Knowledge for Efficient Large Language Models

速览方法论 不太了解知识蒸馏的可以看这篇文章【KD开山之作】 本文的动机是“降低学生模型在各领域和老师模型的差异”。 在一些性能差异比较大的领域&#xff0c;ddk方法可以降低student模型的困惑度(PPL, Perplexity)&#xff0c;提高学生模型在该领域的性能。 该篇文章的优…

探索DeFi世界:用Python开发去中心化金融应用

探索DeFi世界:用Python开发去中心化金融应用 在区块链技术快速发展的今天,去中心化金融(DeFi)正在改变传统金融行业的格局。作为一名自媒体创作者和技术爱好者,我希望通过本文分享如何用Python开发去中心化金融应用,帮助读者深入了解DeFi的潜力和技术实现方式。 什么是…

Docker01 - docker快速入门

Docker快速入门 文章目录 Docker快速入门一&#xff1a;Docker概述1&#xff1a;虚拟机技术和容器化技术2&#xff1a;Docker名词解释2.1&#xff1a;Docker镜像(images)2.2&#xff1a;Docker容器(containers)2.3&#xff1a;Docker仓库(registry) 3&#xff1a;Docker下载安装…

css画出带圆角平行四边形效果

使用css画出平行四边形效果如下图 HTML代码 <div class"badge"><span>营业中</span> </div> 关键代码&#xff1a; transform: skewX(-15deg); /* 让元素倾斜&#xff0c;形成平行四边形的视觉效果 */ 如果倾斜的元素里面需要放文字&…

Amadine for Mac v1.6.7 矢量图形设计软件 支持M、Intel芯片

Amadine 是Mac毒找到的一款矢量图形设计软件&#xff0c;非常适合平面设计专业人士以及具有创造性思维的业余爱好者。Amadine精确开发并注重用户需求&#xff0c;提供各种工具和功能&#xff0c;将最疯狂的插图创意带入生活。完美平衡的UI保证了快速简便的工作流程。 应用介绍…

leetcode349 两个数组的交集

求两个数组的交集&#xff0c;直白点儿就是【nums2 的元素是否在 nums1 中】。 在一堆数中查找一个数&#xff0c;当然是扔出哈希。碰到这种对目前来说是未知数值大小的情况&#xff0c;我们可以使用集合 set 来解决。 使用数组来做哈希的题目&#xff0c;是因为题目都限制了数…