void UpdateAvTexture(uint avLocalID) { GameObject avatarGameObject; if (!avatars.TryGetValue(avLocalID, out avatarGameObject)) { return; //get AvatarAppearence before AvatarUpdate } bool del = true; Radegast.Rendering.RenderAvatar ra = renderAvatars[avLocalID]; foreach (Radegast.Rendering.GLMesh mesh in ra.glavatar._meshes.Values) { if (mesh.Name == "skirtMesh") { continue; } UUID texID = ra.avatar.Textures.GetFace((uint)mesh.teFaceID).TextureID; UnityEngine.Material mat = m_textures.GetMaterial(texID); if (mat != null) { Transform child = avatarGameObject.transform.FindChild(mesh.Name); child.GetComponent <MeshRenderer>().material = mat; } else { del = false; } } if (del) { avHasTex.Remove(avLocalID); } }
void ProcessAvatar(Radegast.Rendering.RenderAvatar av) { GameObject avatarGameObject = new GameObject(av.avatar.LocalID.ToString()); avatarGameObject.transform.position = new UnityEngine.Vector3(av.avatar.Position.X, av.avatar.Position.Y, -av.avatar.Position.Z); foreach (Radegast.Rendering.GLMesh mesh in av.glavatar._meshes.Values) { if (av.glavatar._showSkirt == false && mesh.Name == "skirtMesh") { continue; } UnityEngine.Vector3[] vertices = new UnityEngine.Vector3[mesh.RenderData.Vertices.Length / 3]; UnityEngine.Vector2[] uvs = new UnityEngine.Vector2[mesh.RenderData.Vertices.Length / 3]; UnityEngine.Vector3[] normals = new UnityEngine.Vector3[mesh.RenderData.Vertices.Length / 3]; int[] triangles = new int[mesh.RenderData.Indices.Length]; for (int i = 0; i < mesh.RenderData.Vertices.Length / 3; ++i) { vertices[i].x = mesh.RenderData.Vertices[3 * i]; vertices[i].y = mesh.RenderData.Vertices[3 * i + 1]; vertices[i].z = -mesh.RenderData.Vertices[3 * i + 2]; uvs[i].x = mesh.RenderData.TexCoords[2 * i]; uvs[i].y = mesh.RenderData.TexCoords[2 * i + 1]; normals[i].x = mesh.RenderData.Normals[3 * i]; normals[i].y = mesh.RenderData.Normals[3 * i + 1]; normals[i].z = -mesh.RenderData.Normals[3 * i + 2]; } for (int i = 0; i < mesh.RenderData.Indices.Length; i += 3) { //HACK: OpenGL's default front face is counter-clock-wise triangles[i] = mesh.RenderData.Indices[i + 2]; triangles[i + 1] = mesh.RenderData.Indices[i + 1]; triangles[i + 2] = mesh.RenderData.Indices[i]; } GameObject part = new GameObject(mesh.Name); part.AddComponent("MeshFilter"); part.transform.parent = avatarGameObject.transform; part.transform.localPosition = new UnityEngine.Vector3(0, 0, 0); UnityEngine.Mesh meshUnity = (part.GetComponent <MeshFilter>() as MeshFilter).mesh; meshUnity.vertices = vertices; meshUnity.uv = uvs; meshUnity.triangles = triangles; meshUnity.normals = normals; UnityEngine.Material mat = (part.AddComponent("MeshRenderer") as MeshRenderer).material; mat = m; } avatars.Add(av.avatar.LocalID, avatarGameObject); renderAvatars.Add(av.avatar.LocalID, av); avatarGameObject.transform.parent = avatarObjects.transform; }
void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e) { if (e.Avatar.PrimData.PCode == PCode.Avatar) { Debug.Log("Recieve an Avatar!!!"); } Radegast.Rendering.GLAvatar ga = new Radegast.Rendering.GLAvatar(); OpenMetaverse.Avatar av = e.Avatar; Radegast.Rendering.RenderAvatar ra = new Radegast.Rendering.RenderAvatar(); ra.avatar = av; ra.glavatar = ga; newAvatars.Add(av.LocalID, ra); ra.glavatar.morph(av); }
//Receive all the avatars' models void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e) { //leave other regions out temporarily if (e.Simulator.Handle != Client.Network.CurrentSim.Handle) { return; } Radegast.Rendering.GLAvatar ga = new Radegast.Rendering.GLAvatar(); OpenMetaverse.Avatar av = e.Avatar; Radegast.Rendering.RenderAvatar ra = new Radegast.Rendering.RenderAvatar(); ra.avatar = av; ra.glavatar = ga; newAvatars.Add(av.LocalID, ra); ra.glavatar.morph(av); }
void MoveAvatars() { //althouth TerseObjectUpdate event can give us the new coord of the avatar, but the coord is updated by openmetaverse in the background already. foreach (var item in avatars) { GameObject av = item.Value; Radegast.Rendering.RenderAvatar ra = renderAvatars[item.Key]; UnityEngine.Vector3 pos; pos.x = ra.BasePrim.Position.X; pos.y = ra.BasePrim.Position.Y; pos.z = -(ra.BasePrim.Position.Z - 0.7f); //hack: fix foot to ground av.transform.position = pos; UnityEngine.Quaternion rot; rot.x = ra.BasePrim.Rotation.X; rot.y = ra.BasePrim.Rotation.Y; rot.z = ra.BasePrim.Rotation.Z; rot.w = ra.BasePrim.Rotation.W; av.transform.rotation = rot; } }
void UpdateAvTexture(uint avLocalID) { bool del = true; GameObject avatarGameObject = avatars[avLocalID]; Radegast.Rendering.RenderAvatar ra = renderAvatars[avLocalID]; foreach (Radegast.Rendering.GLMesh mesh in ra.glavatar._meshes.Values) { if (mesh.Name == "skirtMesh") { continue; } UUID texID = ra.avatar.Textures.GetFace((uint)mesh.teFaceID).TextureID; Transform child = avatarGameObject.transform.FindChild(mesh.Name); UnityEngine.Material mat = child.GetComponent <MeshRenderer>().material; if (textures.ContainsKey(texID)) { mat.mainTexture = textures[texID]; } else if (bitmaps.ContainsKey(texID)) { Texture2D tex = Bitmap2Texture2D(bitmaps[texID]); textures[texID] = tex; mat.mainTexture = tex; bitmaps.Remove(texID); } else { del = false; } } if (del) { avHasTex.Remove(avLocalID); } }