Unity动态Mesh操作

在Unity的世界中,MeshRender在游戏场景里渲染出Mesh,成为我们眼中的游戏模型。通常由Max, Maya, Blender等3d软件导出,再向Unity工程中导入。Mesh由点线面组成,是游戏中不可或缺的部分。

变量

vertices 顶点坐标数组Vector3[]
triangles 三角形顶点序列,以vertices的index为顺序,3个一组,连接成三角形int[]
uv 贴图uv,即贴图切分的坐标Vector2[]
normals 法线Vector3[] 

创建mesh对象

Mesh mesh = new Mesh();
//先创建点
mesh.vertices = new Vector3[]{new Vector3(0,-50,0), new Vector3(100,0,0), newVector3(-100,0,0) };
//再连接三角形
mesh.triangles = new int[]{0,1,2};

在有些游戏引擎中,三角形的顺序是固定的,只需指定vertices,就能自动生成三角形
而unity不同,除了定义顶点以外,还必须定义三角形顺序
tri
如图,2个三角形的一条边(1,2)为共边
triangles = new int[]{0,1,2,1,2,3};

(其实0,1,2,3已提供了足够的信息,所以某些游戏引擎只有第一个三角形会写全,之后的只提供1个额外顶点)

常用方法:

MarkDynamic 标记为动态mesh,更适合经常更新
Optimize   优化
RecalculateBounds
RecalculateNormals

windows sdk 创建dialog

利用rc资源文件,新建dialog对象

 

DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DlgProc);

 

BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}