Unity 3D涂色

最近一直研究3D 涂色方面的东东 其实所为的3d模型上的涂色 最终结果都涂在纹理贴图上面 


上面的鱼和方块都涂上了红色

源代码如下

// Update is called once per frame
    void Update () {
    
        if (Input.GetMouseButton (0)) {  //点击鼠标 移动鼠标 开始涂色
            Ray lRay = Camera.main.ScreenPointToRay (Input.mousePosition);
            RaycastHit lHit;
                if (Physics.Raycast (lRay, out lHit,100f,1<<LayerMask.NameToLayer("Game"))) { 
                MeshCollider meshCollider =   lHit.transform.GetComponent<MeshCollider> ();

                MeshRenderer lRender = lHit.transform.GetComponent<MeshRenderer> ();
                if (lRender) {
                    Texture2D lTexture = lRender.sharedMaterial.mainTexture as Texture2D;
                    Vector2 pixelUV = lHit.textureCoord;
                    pixelUV.x *= lTexture.width;
                    pixelUV.y *= lTexture.height;   //得到射线点在2d纹理图片上的坐标

                    Draw (pixelUV, lTexture);
                } else {
                    SkinnedMeshRenderer render = lHit.transform.GetComponent<SkinnedMeshRenderer> ();
                    Texture2D lTexture = render.sharedMaterial.mainTexture as Texture2D;
                    Vector2 pixelUV = lHit.textureCoord;
                    pixelUV.x *= lTexture.width;
                    pixelUV.y *= lTexture.height;

                    Draw (pixelUV, lTexture);
                }

            }
        }

    }


      // 修改纹理上对应点的颜色

    public void Draw(Vector2 pPoint,Texture2D pTexture)
    {


        Rect lRect = new Rect (0,0,pTexture.width,pTexture.height);

        pPoint -= new Vector2 (brush.width/2,brush.height/2);

        Debug.Log (pPoint.ToString());

        int lX = Mathf.FloorToInt (pPoint.x);
        int lY = Mathf.FloorToInt (pPoint.y);


        for (int i = 0; i < brush.width; i++) {   //Brush 是画笔的纹理 (Texture2D)
            for (int j = 0; j < brush.height; j++) {
                Vector2 lPosition = new Vector2 (lX+i,lY+j);
                if (lRect.Contains (lPosition) && brush.GetPixel (i, j).a > 0.8f) {
                    pTexture.SetPixel(lX+i,lY+j,Color.red);
                }
            }
        }
            
        pTexture.Apply();

    }





  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值