Unity 3D涂色
2016-10-20 15:03
183 查看
最近一直研究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();
}
上面的鱼和方块都涂上了红色
源代码如下
// 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();
}
相关文章推荐
- 初试Unity 3D——常用API(2)
- 初识Unity 3D——常用API(3)
- Unity3d 开发 代码创建预设
- 初始Unity 3D——小Demo打砖块
- unity 3d GUI.Toolbar以及GUI.Toggle
- [Unity3d] 3.5 NavMesh的初步认识和简单运用
- Unity 3D中的界面快捷键
- C#程序员整理的Unity 3D笔记(九):Unity 3D测试浅析
- 分享使用Unity 3D免费版本编写游戏的教程
- 初学unity 3D 遇到的一个问题--预制体选项没有找到。
- [Unity通信]一个基于socket的3DARPG网络游戏(二):消息分类处理和json的使用
- [3D理论] 关于unity中的update、Lateupdate和FixedUpdate。
- unity 3d鼠标拖拽脚本
- Unity3d异步记载场景&制作Loading场景进度条
- Unity 3D 导出Android Eclipse项目
- Unity 3D 5.3.5f1 不支持SDK 的build-tools 24
- 【Unity 3D学习】NGUI中Tab的实现
- unity 3d 4.6 源码升级到unity 3d 5.0 的步骤
- 【Unity 3D】学习笔记九:window控件(窗口)
- 【Unity 3D】学习笔记十四:控件偏移