C#代码创建3D模型

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/4048910.html



Demo 1:创建三角形#

示例代码#

构建一个只包含单个三角形及纹理坐标的网格

复制代码
using UnityEngine;
using System.Collections;

public class MeshTest : MonoBehaviour
{
    void Start()
    {
        MeshFilter mf = GetComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mf.mesh = mesh;

        mesh.vertices = new Vector3[3] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0) };
        mesh.uv = new Vector2[3] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1) };
        mesh.triangles = new int[3] { 0, 1, 2 };
    }
}
复制代码

创建出三角形#

可以看到只有单个三角形

image

顶点信息#

从下图可以看出,共有1个三角形,3个顶点

image

 

Demo2:二个三角形#

示例代码#

构建两个三角形及纹理坐标的网格

复制代码
using UnityEngine;
using System.Collections;

public class MyMesh : MonoBehaviour
{
    void Start()
    {
        MeshFilter mf = GetComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mf.mesh = mesh;
        //顶点[决定绘制出来图片的scale]
        mesh.vertices = new Vector3[4] { new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0) };
        //三角形顶点索引的顺序[3的倍数]
        mesh.triangles = new int[6] { 0, 2, 1, 2, 3, 1 };
        //法线
        mesh.normals = new Vector3[4] { new Vector3(0, 0, -1), new Vector3(0, 0, -1), new Vector3(0, 0, -1), new Vector3(0, 0, -1), };
        //uv纹理坐标
        mesh.uv = new Vector2[4] { new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(1, 1) };
    }
}
复制代码

三角形+三角形 = 四边形#

image

顶点信息#

从下图可以看出,共有2个三角形,4个顶点

image

改变顶点信息#

设置的三角形顶点顺序不同,绘制出来的效果也不相同 (mesh.triangles = new int[6] { 0, 2, 1, 0, 3, 1 };)

image

顶点 纹理 图解#

image

实现步骤#

1、创建一个空的GameObject,绑定Mesh Filter及Mesh Renderer组件

image

2、创建一个Material,拖一张图片进去,修改Shader为透明Shader

image

3、把2创建的Material赋给1创建的GameObjectMesh Renderer的Materiials

image

4、这个时候默认在场景中是看不到这个GameObject渲染的

image

5、创建脚本MeshTest.cs  代码如Demo1,绑定在GameObject上,运行查看效果

6、创建脚本MyMesh.cs   代码如Demo2,绑定在GameObject上,运行查看效果

其它方法#

创建一个Quad,不需要运行在Scene场景就可以看到

imageimage

文献资料#

其它方法的资料

Unity3D研究院之与根据动态的两个轨迹点绘制面详解(二十)http://www.xuanyusong.com/archives/780

<Unity3D>Unity3D中MeshRenderer的使用 http://blog.csdn.net/zuoyamin/article/details/9287507

[Unity3D学习]Mesh创建三角形、长方形 http://blog.gamerisker.com/archives/494.html

三角网格(Triangle Mesh)  http://lib.yoekey.com/?p=120

【Unity C#编程】制作星星(一)http://unity3d.9tech.cn/news/2014/0324/40085.html

作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(13582)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
CONTENTS
点击右上角即可分享
微信分享提示