美文网首页
弹孔融合

弹孔融合

作者: 吐泡泡的小鲤鱼 | 来源:发表于2017-05-02 19:19 被阅读0次

原理:实现两张图片的融合,即将其中一张图片的的像素点放到另外一张图片上。


这是俩张图片资源,

将两张图片的属性改下,具体做法如图

创建场景,直接将墙壁图片托放在Plane上即可

创建脚本PlaneScr,在脚本中实现使用鼠标点击墙壁时能够生成相应的弹痕,将脚本挂载在Plane上

using UnityEngine;

using System.Collections.Generic;

public class BulletScript : MonoBehaviour {  

Texture2D m_OldWallTexture;  

Texture2D m_NewWallTexture;

  public Texture2D m_BulletTexture;  

////// 贴图的坐标属于UV的坐标

/// U和V分别表示贴图在显示器上水平方向的坐标和垂直方向的坐标,左下角为(0,0),右上角为(1,1)

/// U和V的取值范围0~1【U的坐标=第U个像素点/贴图的高度,V的坐标=第V个像素/贴图的高度】

/// UV坐标*贴图的高度=贴图的某一个像素点

/////子弹贴图的宽高 

  float m_BulletWidth;    float m_BulletHeight;   

//贴墙壁纸的宽高

  float m_WallWight;    float m_WallHeight;

    ////// 销毁子弹,就要考虑到队列这种结构,因为先生成的子弹先消失

///

Queuem_BulletUVQueue = new Queue(); 

  private void Awake()    {     

  m_OldWallTexture = GetComponent().material.mainTexture as Texture2D;        m_NewWallTexture = Instantiate(m_OldWallTexture);        GetComponent().material.mainTexture = m_NewWallTexture;        m_BulletHeight = m_BulletTexture.height;   

    m_BulletWidth = m_BulletTexture.width;    

  m_WallWight = m_NewWallTexture.width;   

    m_WallHeight = m_NewWallTexture .height;

    }

void Start () {} 

  // Update is called once per frame   

Ray m_Ray; 

  RaycastHit m_Hit;void Update () {  

    if (Input .GetMouseButtonDown (0))        {     

      m_Ray = Camera.main.ScreenPointToRay(Input.mousePosition);      

    if (Physics.Raycast (m_Ray,out m_Hit ))      

    {     

          Debug.DrawLine(Camera.main.transform.position, m_Hit.point,Color .clear );      

        //1,拿到射线射到的点并返回这个点的坐标     

          Vector2 uv= m_Hit.textureCoord;     

          //2,想排队一样将射到的这一点存起来,将来操作的时候就有顺序了  

                        m_BulletUVQueue.Enqueue(uv);      

        //3,遍历替换像素点,融合像素[子弹打到的位置融合成子弹的像素]   

            for (int i = 0; i < m_BulletWidth ; i++)      

        {        

          for (int j = 0; j < m_BulletHeight ; j++)       

            {      

                //根据UV坐标*贴图的高度=贴图的某一个像素点     

                  //可以知道uv.x*m_NewWallTexture .width就是水平方向的像素点                        //因为涉嫌碰撞的到的点在贴图的中心位置,想要从UV左下角开始遍历整个子弹的像素,就要减去宽高的一半              

        float w = uv.x*m_NewWallTexture .width -m_BulletWidth /2+i;                        float h = uv.y*m_NewWallTexture.height  - m_BulletHeight / 2 + j;                        Color wallColor=m_NewWallTexture.GetPixel((int)w, (int)h);                        Color bulletColor = m_BulletTexture.GetPixel(i, j);                        if (w>0&&h>0&&w0 && h > 0 && w < m_WallWight && h < m_WallHeight)

{

m_NewWallTexture.SetPixel((int)w, (int)h, wallColor );

}

//两个像素点相乘就融合了

}

}

//应用一下

m_NewWallTexture.Apply();

}

}

脚本可以直接复制使用

相关文章

  • 弹孔融合

    原理:实现两张图片的融合,即将其中一张图片的的像素点放到另外一张图片上。 这是俩张图片资源, 将两张图片的属性改下...

  • 弹孔

    心上有数不清的弹孔, 几乎没有完整的地方。 弹孔之处汩汩流着泪, 怎么堵也堵不住…… 去不到的未来, 回不到的过去...

  • 弹孔墙

    《弹孔墙》 1942年,在宋家庄村发生了一场与日寇的惨烈战争… 侵华日寇荡村庄,子弹孔痕记创伤。 落后贫穷挨打辱,...

  • 弹孔墙

    1942年,在宋家庄村发生了一场与日寇的惨烈战争… 侵华日寇荡村庄,子弹孔痕记创伤。 落后贫穷挨打辱,面墙自醒奋图强。

  • 哭泣的弹孔

    是不是干旱的土地 真的需要用泪水浇灌 一个孕育出文明的地方 就要被文明屡次践踏 石油是大地汩汩流淌的血液 映照着掠...

  • 决斗

    我瘫倒 用针线缝布弹孔 ...

  • 《标本鸟的对话》

    眼睛翠绿的玉石填不满胸前的子弹孔

  • 幸存者偏差

    二战的时候对安全返回的飞机做统计,看看飞机上有多少弹孔,并因此判断出弹孔多的地方需要加固,这里犯了一个错误,只是统...

  • 第15周 数学思维 思维导图及知识笔记【何帆北大读书俱乐部】

    故事:失踪的弹孔 为什么学习这些数学知识对我们有用呢? 我来给你讲一个失踪弹孔的故事。 在第二次世界大战期间,美国...

  • 30天专注橙长计划+学习感想+第七天

    今天看到一个很有意思的案例,说二战的时候,战斗机维修师每次检测返航战斗机上的弹孔,以便发现弹孔最多的地方,加装防弹...

网友评论

      本文标题:弹孔融合

      本文链接:https://www.haomeiwen.com/subject/vakhtxtx.html