add rendering for avatar

This commit is contained in:
cqarthur
2013-05-08 20:42:17 +08:00
parent 72aeb61539
commit 6202cd45d5
166 changed files with 23842 additions and 2 deletions
+4
View File
@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 645a156f3902da1448c64094df7f8224
DefaultImporter:
userData:
+4
View File
@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 119df583b9908444baf9d1bb86f6008c
DefaultImporter:
userData:
Binary file not shown.
@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: cebdc449e3df4427c89249abb75ab7a2
NativeFormatImporter:
userData:
+1 -1
View File
@@ -1,4 +1,4 @@
fileFormatVersion: 2
guid: e9397f1cc72425345ae40b516554892b
guid: 43121e4fc44b64b47b464561b5a5e4c8
DefaultImporter:
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: bb0563889a0b8b849b0e0e6ee82d5bb9
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 502fc75f4ed83ab438df2742e48f9a05
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 47b3efd7d12758c43afec3d6a96d4d2d
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0c838acf0293e61479a6bdbb29adc0e2
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ea3da258fbe548d409cd28f34bcf8681
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 069ce17854431444f9b33b5ad95e2f04
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 897bdd45df3315f4389e81f5d805e5fb
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 68379aac2a76c11459fec2559cf65d85
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 834bec4d5f5fe12428755c20f9ffbb26
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
+1 -1
View File
@@ -1,4 +1,4 @@
fileFormatVersion: 2
guid: 89c98088dfae49d4a851fa03b9336396
guid: 1669161240056074ca0257dc0cb4fa67
DefaultImporter:
userData:
Binary file not shown.
+13
View File
@@ -0,0 +1,13 @@
using UnityEngine;
using System.Collections;
using OpenMetaverse;
using Radegast.Rendering;
public class SceneWindow
{
public void StartShiny(){}
public bool TryGetTextureInfo(UUID textureID, out TextureInfo info){
info = new TextureInfo();
return false;}
public void DownloadTexture(TextureLoadItem item, bool force){}
}
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bc2e13b17621a584b86a1c9278b59f28
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
+232
View File
@@ -0,0 +1,232 @@
#region --- MIT License ---
/* Licensed under the MIT/X11 license.
* Copyright (c) 2011 mjt
* This notice may not be removed from any source distribution.
* See license.txt for licensing details.
*/
#endregion
/*
* tutoriaali:
* http://www.crownandcutlass.com/features/technicaldetails/frustum.html
*
*/
using System;
using OpenMetaverse;
//using OpenTK.Graphics.OpenGL;
//using OpenTK;
namespace Radegast.Rendering
{
public class Frustum
{
//static Matrix4 ProjMatrix, ModelMatrix;
static float[] ClipMatrix = new float[16];
static float[,] frustum = new float[6, 4];
const int RIGHT = 0, LEFT = 1, BOTTOM = 2, TOP = 3, BACK = 4, FRONT = 5;
static void NormalizePlane(float[,] frustum, int side)
{
float magnitude = (float)Math.Sqrt((frustum[side, 0] * frustum[side, 0]) + (frustum[side, 1] * frustum[side, 1])
+ (frustum[side, 2] * frustum[side, 2]));
frustum[side, 0] /= magnitude;
frustum[side, 1] /= magnitude;
frustum[side, 2] /= magnitude;
frustum[side, 3] /= magnitude;
}
public static void CalculateFrustum(OpenTK.Matrix4 ProjMatrix, OpenTK.Matrix4 ModelMatrix)
{
ClipMatrix[0] = (ModelMatrix.M11 * ProjMatrix.M11) + (ModelMatrix.M12 * ProjMatrix.M21) + (ModelMatrix.M13 * ProjMatrix.M31) + (ModelMatrix.M14 * ProjMatrix.M41);
ClipMatrix[1] = (ModelMatrix.M11 * ProjMatrix.M12) + (ModelMatrix.M12 * ProjMatrix.M22) + (ModelMatrix.M13 * ProjMatrix.M32) + (ModelMatrix.M14 * ProjMatrix.M42);
ClipMatrix[2] = (ModelMatrix.M11 * ProjMatrix.M13) + (ModelMatrix.M12 * ProjMatrix.M23) + (ModelMatrix.M13 * ProjMatrix.M33) + (ModelMatrix.M14 * ProjMatrix.M43);
ClipMatrix[3] = (ModelMatrix.M11 * ProjMatrix.M14) + (ModelMatrix.M12 * ProjMatrix.M24) + (ModelMatrix.M13 * ProjMatrix.M34) + (ModelMatrix.M14 * ProjMatrix.M44);
ClipMatrix[4] = (ModelMatrix.M21 * ProjMatrix.M11) + (ModelMatrix.M22 * ProjMatrix.M21) + (ModelMatrix.M23 * ProjMatrix.M31) + (ModelMatrix.M24 * ProjMatrix.M41);
ClipMatrix[5] = (ModelMatrix.M21 * ProjMatrix.M12) + (ModelMatrix.M22 * ProjMatrix.M22) + (ModelMatrix.M23 * ProjMatrix.M32) + (ModelMatrix.M24 * ProjMatrix.M42);
ClipMatrix[6] = (ModelMatrix.M21 * ProjMatrix.M13) + (ModelMatrix.M22 * ProjMatrix.M23) + (ModelMatrix.M23 * ProjMatrix.M33) + (ModelMatrix.M24 * ProjMatrix.M43);
ClipMatrix[7] = (ModelMatrix.M21 * ProjMatrix.M14) + (ModelMatrix.M22 * ProjMatrix.M24) + (ModelMatrix.M23 * ProjMatrix.M34) + (ModelMatrix.M24 * ProjMatrix.M44);
ClipMatrix[8] = (ModelMatrix.M31 * ProjMatrix.M11) + (ModelMatrix.M32 * ProjMatrix.M21) + (ModelMatrix.M33 * ProjMatrix.M31) + (ModelMatrix.M34 * ProjMatrix.M41);
ClipMatrix[9] = (ModelMatrix.M31 * ProjMatrix.M12) + (ModelMatrix.M32 * ProjMatrix.M22) + (ModelMatrix.M33 * ProjMatrix.M32) + (ModelMatrix.M34 * ProjMatrix.M42);
ClipMatrix[10] = (ModelMatrix.M31 * ProjMatrix.M13) + (ModelMatrix.M32 * ProjMatrix.M23) + (ModelMatrix.M33 * ProjMatrix.M33) + (ModelMatrix.M34 * ProjMatrix.M43);
ClipMatrix[11] = (ModelMatrix.M31 * ProjMatrix.M14) + (ModelMatrix.M32 * ProjMatrix.M24) + (ModelMatrix.M33 * ProjMatrix.M34) + (ModelMatrix.M34 * ProjMatrix.M44);
ClipMatrix[12] = (ModelMatrix.M41 * ProjMatrix.M11) + (ModelMatrix.M42 * ProjMatrix.M21) + (ModelMatrix.M43 * ProjMatrix.M31) + (ModelMatrix.M44 * ProjMatrix.M41);
ClipMatrix[13] = (ModelMatrix.M41 * ProjMatrix.M12) + (ModelMatrix.M42 * ProjMatrix.M22) + (ModelMatrix.M43 * ProjMatrix.M32) + (ModelMatrix.M44 * ProjMatrix.M42);
ClipMatrix[14] = (ModelMatrix.M41 * ProjMatrix.M13) + (ModelMatrix.M42 * ProjMatrix.M23) + (ModelMatrix.M43 * ProjMatrix.M33) + (ModelMatrix.M44 * ProjMatrix.M43);
ClipMatrix[15] = (ModelMatrix.M41 * ProjMatrix.M14) + (ModelMatrix.M42 * ProjMatrix.M24) + (ModelMatrix.M43 * ProjMatrix.M34) + (ModelMatrix.M44 * ProjMatrix.M44);
// laske frustumin tasot ja normalisoi ne
frustum[RIGHT, 0] = ClipMatrix[3] - ClipMatrix[0];
frustum[RIGHT, 1] = ClipMatrix[7] - ClipMatrix[4];
frustum[RIGHT, 2] = ClipMatrix[11] - ClipMatrix[8];
frustum[RIGHT, 3] = ClipMatrix[15] - ClipMatrix[12];
NormalizePlane(frustum, RIGHT);
frustum[LEFT, 0] = ClipMatrix[3] + ClipMatrix[0];
frustum[LEFT, 1] = ClipMatrix[7] + ClipMatrix[4];
frustum[LEFT, 2] = ClipMatrix[11] + ClipMatrix[8];
frustum[LEFT, 3] = ClipMatrix[15] + ClipMatrix[12];
NormalizePlane(frustum, LEFT);
frustum[BOTTOM, 0] = ClipMatrix[3] + ClipMatrix[1];
frustum[BOTTOM, 1] = ClipMatrix[7] + ClipMatrix[5];
frustum[BOTTOM, 2] = ClipMatrix[11] + ClipMatrix[9];
frustum[BOTTOM, 3] = ClipMatrix[15] + ClipMatrix[13];
NormalizePlane(frustum, BOTTOM);
frustum[TOP, 0] = ClipMatrix[3] - ClipMatrix[1];
frustum[TOP, 1] = ClipMatrix[7] - ClipMatrix[5];
frustum[TOP, 2] = ClipMatrix[11] - ClipMatrix[9];
frustum[TOP, 3] = ClipMatrix[15] - ClipMatrix[13];
NormalizePlane(frustum, TOP);
frustum[BACK, 0] = ClipMatrix[3] - ClipMatrix[2];
frustum[BACK, 1] = ClipMatrix[7] - ClipMatrix[6];
frustum[BACK, 2] = ClipMatrix[11] - ClipMatrix[10];
frustum[BACK, 3] = ClipMatrix[15] - ClipMatrix[14];
NormalizePlane(frustum, BACK);
frustum[FRONT, 0] = ClipMatrix[3] + ClipMatrix[2];
frustum[FRONT, 1] = ClipMatrix[7] + ClipMatrix[6];
frustum[FRONT, 2] = ClipMatrix[11] + ClipMatrix[10];
frustum[FRONT, 3] = ClipMatrix[15] + ClipMatrix[14];
NormalizePlane(frustum, FRONT);
}
/// <summary>
/// tasojen normaalit osoittaa sisäänpäin joten jos testattava vertex on
/// kaikkien tasojen "edessä", se on ruudulla ja rendataan
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns></returns>
public static bool PointInFrustum(float x, float y, float z)
{
// tasoyhtälö: A*x + B*y + C*z + D = 0
// ABC on normaalin X, Y ja Z
// D on tason etäisyys origosta
// =0 vertex on tasolla
// <0 tason takana
// >0 tason edessä
for (int a = 0; a < 6; a++)
{
// jos vertex jonkun tason takana, niin palauta false (ei rendata)
if (((frustum[a, 0] * x) + (frustum[a, 1] * y) + (frustum[a, 2] * z) + frustum[a, 3]) <= 0)
{
return false;
}
}
// ruudulla
return true;
}
/// <summary>
/// palauttaa etäisyyden kameraan jos pallo frustumissa, muuten 0.
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <param name="radius"></param>
/// <returns></returns>
public static float SphereInFrustum(float x, float y, float z, float radius)
{
float d = 0;
for (int p = 0; p < 6; p++)
{
d = frustum[p, 0] * x + frustum[p, 1] * y + frustum[p, 2] * z + frustum[p, 3];
if (d <= -radius) // jos pallo ei ole ruudulla
{
return 0;
}
}
// kaikkien tasojen edessä eli näkyvissä.
return d + radius; // palauta matka kameraan
}
public static bool ObjectInFrustum(Vector3 position, BoundingVolume bound)
{
return ObjectInFrustum(position.X, position.Y, position.Z, bound);
}
public static bool ObjectInFrustum(float x, float y, float z, BoundingVolume bound)
{
if (bound == null) return true;
if (SphereInFrustum(x, y, z, bound.ScaledR) == 0) return false;
return true;
}
}
public class BoundingVolume
{
Vector3 Min = new Vector3(99999, 99999, 99999);
Vector3 Max = new Vector3(-99999, -99999, -99999);
float R = 0f;
public Vector3 ScaledMin = new Vector3(99999, 99999, 99999);
public Vector3 ScaledMax = new Vector3(-99999, -99999, -99999);
public float ScaledR = 0f;
public void CalcScaled(Vector3 scale)
{
ScaledMin = Min * scale;
ScaledMax = Max * scale;
Vector3 dist = ScaledMax - ScaledMin;
ScaledR = dist.Length();
}
public void CreateBoundingVolume(OpenMetaverse.Rendering.Face mesh, Vector3 scale)
{
for (int q = 0; q < mesh.Vertices.Count; q++)
{
if (mesh.Vertices[q].Position.X < Min.X) Min.X = mesh.Vertices[q].Position.X;
if (mesh.Vertices[q].Position.Y < Min.Y) Min.Y = mesh.Vertices[q].Position.Y;
if (mesh.Vertices[q].Position.Z < Min.Z) Min.Z = mesh.Vertices[q].Position.Z;
if (mesh.Vertices[q].Position.X > Max.X) Max.X = mesh.Vertices[q].Position.X;
if (mesh.Vertices[q].Position.Y > Max.Y) Max.Y = mesh.Vertices[q].Position.Y;
if (mesh.Vertices[q].Position.Z > Max.Z) Max.Z = mesh.Vertices[q].Position.Z;
}
Vector3 dist = Max - Min;
R = dist.Length();
mesh.Center = Min + (dist / 2);
CalcScaled(scale);
}
public void FromScale(Vector3 scale)
{
ScaledMax = scale / 2f;
ScaledMin = -ScaledMax;
Vector3 dist = ScaledMax - ScaledMin;
ScaledR = dist.Length();
}
public void AddVolume(BoundingVolume vol, Vector3 scale)
{
if (vol.Min.X < this.Min.X) this.Min.X = vol.Min.X;
if (vol.Min.Y < this.Min.Y) this.Min.Y = vol.Min.Y;
if (vol.Min.Z < this.Min.Z) this.Min.Z = vol.Min.Z;
if (vol.Max.X > this.Max.X) this.Max.X = vol.Max.X;
if (vol.Max.Y > this.Max.Y) this.Max.Y = vol.Max.Y;
if (vol.Max.Z > this.Max.Z) this.Max.Z = vol.Max.Z;
Vector3 dist = Max - Min;
R = dist.Length();
CalcScaled(scale);
}
//public void CreateBoundingVolume(Model mesh, Vector3 min, Vector3 max)
//{
// Min = min;
// Max = max;
// Vector3 dist = Max - Min;
// R = dist.Length;
// mesh.ObjCenter = Min + (dist / 2); // objektin keskikohta
//}
}
}
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e19611bacca8d7146a836d68c7e01fe9
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
Binary file not shown.
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d243fd7b3fb9db640a3640c91d510f2f
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
+665
View File
@@ -0,0 +1,665 @@
//
// Radegast Metaverse Client
// Copyright (c) 2009-2013, Radegast Development Team
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the application "Radegast", nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior CreateReflectionTexture permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// $Id$
//
using System;
using System.Collections.Generic;
using OpenTK.Graphics.OpenGL;
using OpenMetaverse;
using OpenMetaverse.Rendering;
namespace Radegast.Rendering
{
/// <summary>
/// Contains per primitive face data
/// </summary>
public class FaceData : IDisposable
{
public float[] Vertices;
public ushort[] Indices;
public float[] TexCoords;
public float[] Normals;
public int PickingID = -1;
public int VertexVBO = -1;
public int IndexVBO = -1;
public TextureInfo TextureInfo = new TextureInfo();
public BoundingVolume BoundingVolume = new BoundingVolume();
public static int VertexSize = 32; // sizeof (vertex), 2 x vector3 + 1 x vector2 = 8 floats x 4 bytes = 32 bytes
public TextureAnimationInfo AnimInfo;
public int QueryID = 0;
public bool VBOFailed = false;
/// <summary>
/// Dispose VBOs if we have them in graphics card memory
/// </summary>
public void Dispose()
{//hack
// if (VertexVBO != -1) Compat.DeleteBuffer(VertexVBO);
// if (IndexVBO != -1) Compat.DeleteBuffer(IndexVBO);
// VertexVBO = -1;
// IndexVBO = -1;
}
/// <summary>
/// Checks if VBOs are created, if they are, bind them, if not create new
/// </summary>
/// <param name="face">Which face's mesh is uploaded in this VBO</param>
/// <returns>True, if face data was succesfully uploaded to the graphics card memory</returns>
public bool CheckVBO(Face face)
{//hack
// if (VertexVBO == -1)
// {
// Vertex[] vArray = face.Vertices.ToArray();
// Compat.GenBuffers(out VertexVBO);
// Compat.BindBuffer(BufferTarget.ArrayBuffer, VertexVBO);
// Compat.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vArray.Length * VertexSize), vArray, BufferUsageHint.StaticDraw);
// if (Compat.BufferSize(BufferTarget.ArrayBuffer) != vArray.Length * VertexSize)
// {
// VBOFailed = true;
// Compat.BindBuffer(BufferTarget.ArrayBuffer, 0);
// Compat.DeleteBuffer(VertexVBO);
// VertexVBO = -1;
// return false;
// }
// }
//
// if (IndexVBO == -1)
// {
// ushort[] iArray = face.Indices.ToArray();
// Compat.GenBuffers(out IndexVBO);
// Compat.BindBuffer(BufferTarget.ElementArrayBuffer, IndexVBO);
// Compat.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(iArray.Length * sizeof(ushort)), iArray, BufferUsageHint.StaticDraw);
// if (Compat.BufferSize(BufferTarget.ElementArrayBuffer) != iArray.Length * sizeof(ushort))
// {
// VBOFailed = true;
// Compat.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
// Compat.DeleteBuffer(IndexVBO);
// IndexVBO = -1;
// return false;
// }
// }
return true;
}
}
/// <summary>
/// Class handling texture animations
/// </summary>
public class TextureAnimationInfo
{
public Primitive.TextureAnimation PrimAnimInfo;
public float CurrentFrame;
public float CurrentTime;
public bool PingPong;
float LastTime = 0f;
float TotalTime = 0f;
/// <summary>
/// Perform texture manupulation to implement texture animations
/// </summary>
/// <param name="lastFrameTime">Time passed since the last run (in seconds)</param>
public void Step(float lastFrameTime)
{
float numFrames = 1f;
float fullLength = 1f;
if (PrimAnimInfo.Length > 0)
{
numFrames = PrimAnimInfo.Length;
}
else
{
numFrames = Math.Max(1f, (float)(PrimAnimInfo.SizeX * PrimAnimInfo.SizeY));
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.PING_PONG) != 0)
{
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) != 0)
{
fullLength = 2f * numFrames;
}
else if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.LOOP) != 0)
{
fullLength = 2f * numFrames - 2f;
fullLength = Math.Max(1f, fullLength);
}
else
{
fullLength = 2f * numFrames - 1f;
fullLength = Math.Max(1f, fullLength);
}
}
else
{
fullLength = numFrames;
}
float frameCounter;
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) != 0)
{
frameCounter = lastFrameTime * PrimAnimInfo.Rate + LastTime;
}
else
{
TotalTime += lastFrameTime;
frameCounter = TotalTime * PrimAnimInfo.Rate;
}
LastTime = frameCounter;
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.LOOP) != 0)
{
frameCounter %= fullLength;
}
else
{
frameCounter = Math.Min(fullLength - 1f, frameCounter);
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) == 0)
{
frameCounter = (float)Math.Floor(frameCounter + 0.01f);
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.PING_PONG) != 0)
{
if (frameCounter > numFrames)
{
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) != 0)
{
frameCounter = numFrames - (frameCounter - numFrames);
}
else
{
frameCounter = (numFrames - 1.99f) - (frameCounter - numFrames);
}
}
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.REVERSE) != 0)
{
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) != 0)
{
frameCounter = numFrames - frameCounter;
}
else
{
frameCounter = (numFrames - 0.99f) - frameCounter;
}
}
frameCounter += PrimAnimInfo.Start;
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) == 0)
{
frameCounter = (float)Math.Round(frameCounter);
}
GL.MatrixMode(MatrixMode.Texture);
GL.LoadIdentity();
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.ROTATE) != 0)
{
GL.Translate(0.5f, 0.5f, 0f);
GL.Rotate(Utils.RAD_TO_DEG * frameCounter, OpenTK.Vector3d.UnitZ);
GL.Translate(-0.5f, -0.5f, 0f);
}
else if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SCALE) != 0)
{
GL.Scale(frameCounter, frameCounter, 0);
}
else // Translate
{
float sizeX = Math.Max(1f, (float)PrimAnimInfo.SizeX);
float sizeY = Math.Max(1f, (float)PrimAnimInfo.SizeY);
GL.Scale(1f / sizeX, 1f / sizeY, 0);
GL.Translate(frameCounter % sizeX, Math.Floor(frameCounter / sizeY), 0);
}
GL.MatrixMode(MatrixMode.Modelview);
}
[Obsolete("Use Step() instead")]
public void ExperimentalStep(float time)
{
int reverseFactor = 1;
float rate = PrimAnimInfo.Rate;
if (rate < 0)
{
rate = -rate;
reverseFactor = -reverseFactor;
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.REVERSE) != 0)
{
reverseFactor = -reverseFactor;
}
CurrentTime += time;
float totalTime = 1 / rate;
uint x = Math.Max(1, PrimAnimInfo.SizeX);
uint y = Math.Max(1, PrimAnimInfo.SizeY);
uint nrFrames = x * y;
if (PrimAnimInfo.Length > 0 && PrimAnimInfo.Length < nrFrames)
{
nrFrames = (uint)PrimAnimInfo.Length;
}
GL.MatrixMode(MatrixMode.Texture);
GL.LoadIdentity();
if (CurrentTime >= totalTime)
{
CurrentTime = 0;
CurrentFrame++;
if (CurrentFrame > nrFrames) CurrentFrame = (uint)PrimAnimInfo.Start;
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.PING_PONG) != 0)
{
PingPong = !PingPong;
}
}
float smoothOffset = 0f;
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.SMOOTH) != 0)
{
smoothOffset = (CurrentTime / totalTime) * reverseFactor;
}
float f = CurrentFrame;
if (reverseFactor < 0)
{
f = nrFrames - CurrentFrame;
}
if ((PrimAnimInfo.Flags & Primitive.TextureAnimMode.ROTATE) == 0) // not rotating
{
GL.Scale(1f / x, 1f / y, 0f);
GL.Translate((f % x) + smoothOffset, f / y, 0);
}
else
{
smoothOffset = (CurrentTime * PrimAnimInfo.Rate);
float startAngle = PrimAnimInfo.Start;
float endAngle = PrimAnimInfo.Length;
float angle = startAngle + (endAngle - startAngle) * smoothOffset;
GL.Translate(0.5f, 0.5f, 0f);
GL.Rotate(Utils.RAD_TO_DEG * angle, OpenTK.Vector3d.UnitZ);
GL.Translate(-0.5f, -0.5f, 0f);
}
GL.MatrixMode(MatrixMode.Modelview);
}
}
/// <summary>
/// Class that handle rendering of objects: simple primitives, scupties, and meshes
/// </summary>
public class RenderPrimitive : SceneObject
{
#region Public fields
/// <summary>Base simulator object</summary>
public Primitive Prim;
public List<Face> Faces;
/// <summary>Is this object attached to an avatar</summary>
public bool Attached;
/// <summary>Do we know if object is attached</summary>
public bool AttachedStateKnown;
/// <summary>Are meshes constructed and ready for this prim</summary>
public bool Meshed;
/// <summary>Process of creating a mesh is underway</summary>
public bool Meshing;
#endregion Public fields
#region Private fields
int prevTEHash;
int prevSculptHash;
int prevShapeHash;
#endregion Private fields
/// <summary>
/// Default constructor
/// </summary>
public RenderPrimitive()
{
Type = SceneObjectType.Primitive;
}
/// <summary>
/// Remove any GL resource we may still have in use
/// </summary>
public override void Dispose()
{
if (Faces != null)
{
foreach (Face f in Faces)
{
if (f.UserData != null && f.UserData is FaceData)
{
FaceData data = (FaceData)f.UserData;
data.Dispose();
data = null;
}
}
Faces = null;
}
base.Dispose();
}
/// <summary>
/// Simulator object that is basis for this SceneObject
/// </summary>
public override Primitive BasePrim
{
get { return Prim; }
set
{
Prim = value;
int TEHash = Prim.Textures == null ? 0 : Prim.Textures.GetHashCode();
int sculptHash, shapeHash;
if (Meshed)
{
if (Prim.Type == PrimType.Sculpt || Prim.Type == PrimType.Mesh)
{
sculptHash = Prim.Sculpt.GetHashCode();
if (Prim.Sculpt.GetHashCode() != prevSculptHash || TEHash != prevTEHash)
{
Meshed = false;
}
prevSculptHash = sculptHash;
}
else
{
shapeHash = Prim.PrimData.GetHashCode();
if (shapeHash != prevShapeHash)
{
Meshed = false;
}
else if (TEHash != prevTEHash)
{
Meshed = false;
}
prevShapeHash = shapeHash;
}
}
prevTEHash = TEHash;
}
}
/// <summary>
/// Set initial state of the object
/// </summary>
public override void Initialize()
{
AttachedStateKnown = false;
base.Initialize();
}
/// <summary>
/// Render Primitive
/// </summary>
/// <param name="pass">Which pass are we currently in</param>
/// <param name="pickingID">ID used to identify which object was picked</param>
/// <param name="scene">Main scene renderer</param>
/// <param name="time">Time it took to render the last frame</param>
public override void Render(RenderPass pass, int pickingID, SceneWindow scene, float time)
{
//if (!RenderSettings.AvatarRenderingEnabled && Attached) return;//hack
// Individual prim matrix
GL.PushMatrix();
// Prim roation and position and scale
GL.MultMatrix(Math3D.CreateSRTMatrix(Prim.Scale, RenderRotation, RenderPosition));
// Do we have animated texture on this face
bool animatedTexture = false;
// Initialise flags tracking what type of faces this prim has
if (pass == RenderPass.Simple)
{
HasSimpleFaces = false;
}
else if (pass == RenderPass.Alpha)
{
HasAlphaFaces = false;
}
else if (pass == RenderPass.Invisible)
{
HasInvisibleFaces = false;
}
// Draw the prim faces
for (int j = 0; j < Faces.Count; j++)
{
Primitive.TextureEntryFace teFace = Prim.Textures.GetFace((uint)j);
Face face = Faces[j];
FaceData data = (FaceData)face.UserData;
if (data == null)
continue;
if (teFace == null)
continue;
// Don't render transparent faces
Color4 RGBA = teFace.RGBA;
if (data.TextureInfo.FullAlpha || RGBA.A <= 0.01f) continue;
bool switchedLightsOff = false;
if (pass == RenderPass.Picking)
{
data.PickingID = pickingID;
var primNrBytes = Utils.UInt16ToBytes((ushort)pickingID);
var faceColor = new byte[] { primNrBytes[0], primNrBytes[1], (byte)j, 255 };
GL.Color4(faceColor);
}
else if (pass == RenderPass.Invisible)
{
if (!data.TextureInfo.IsInvisible) continue;
HasInvisibleFaces = true;
}
else
{
if (data.TextureInfo.IsInvisible) continue;
bool belongToAlphaPass = (RGBA.A < 0.99f) || (data.TextureInfo.HasAlpha && !data.TextureInfo.IsMask);
if (belongToAlphaPass && pass != RenderPass.Alpha) continue;
if (!belongToAlphaPass && pass == RenderPass.Alpha) continue;
if (pass == RenderPass.Simple)
{
HasSimpleFaces = true;
}
else if (pass == RenderPass.Alpha)
{
HasAlphaFaces = true;
}
if (teFace.Fullbright)
{
GL.Disable(EnableCap.Lighting);
switchedLightsOff = true;
}
float shiny = 0f;
switch (teFace.Shiny)
{
case Shininess.High:
shiny = 0.96f;
break;
case Shininess.Medium:
shiny = 0.64f;
break;
case Shininess.Low:
shiny = 0.24f;
break;
}
if (shiny > 0f)
{
scene.StartShiny();
}
GL.Material(MaterialFace.Front, MaterialParameter.Shininess, shiny);
var faceColor = new float[] { RGBA.R, RGBA.G, RGBA.B, RGBA.A };
GL.Color4(faceColor);
GL.Material(MaterialFace.Front, MaterialParameter.Specular, new float[] { 0.5f, 0.5f, 0.5f, 1f });
if (data.TextureInfo.TexturePointer == 0)
{
TextureInfo teInfo;
if (scene.TryGetTextureInfo(teFace.TextureID, out teInfo))
{
data.TextureInfo = teInfo;
}
}
if (data.TextureInfo.TexturePointer == 0)
{
GL.Disable(EnableCap.Texture2D);
if (!data.TextureInfo.FetchFailed)
{
scene.DownloadTexture(new TextureLoadItem()
{
Prim = this.Prim,
TeFace = teFace,
Data = data
}, false);
}
}
else
{
// Is this face using texture animation
if ((Prim.TextureAnim.Flags & Primitive.TextureAnimMode.ANIM_ON) != 0
&& (Prim.TextureAnim.Face == j || Prim.TextureAnim.Face == 255))
{
if (data.AnimInfo == null)
{
data.AnimInfo = new TextureAnimationInfo();
}
data.AnimInfo.PrimAnimInfo = Prim.TextureAnim;
data.AnimInfo.Step(time);
animatedTexture = true;
}
else if (data.AnimInfo != null) // Face texture not animated. Do we have previous anim setting?
{
data.AnimInfo = null;
}
GL.Enable(EnableCap.Texture2D);
GL.BindTexture(TextureTarget.Texture2D, data.TextureInfo.TexturePointer);
}
}
//hack
/*
if (!RenderSettings.UseVBO || data.VBOFailed)
{
Vertex[] verts = face.Vertices.ToArray();
ushort[] indices = face.Indices.ToArray();
unsafe
{
fixed (float* normalPtr = &verts[0].Normal.X)
fixed (float* texPtr = &verts[0].TexCoord.X)
{
GL.NormalPointer(NormalPointerType.Float, FaceData.VertexSize, (IntPtr)normalPtr);
GL.TexCoordPointer(2, TexCoordPointerType.Float, FaceData.VertexSize, (IntPtr)texPtr);
GL.VertexPointer(3, VertexPointerType.Float, FaceData.VertexSize, verts);
GL.DrawElements(BeginMode.Triangles, indices.Length, DrawElementsType.UnsignedShort, indices);
}
}
}
else
{
if (data.CheckVBO(face))
{
Compat.BindBuffer(BufferTarget.ArrayBuffer, data.VertexVBO);
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, data.IndexVBO);
GL.NormalPointer(NormalPointerType.Float, FaceData.VertexSize, (IntPtr)12);
GL.TexCoordPointer(2, TexCoordPointerType.Float, FaceData.VertexSize, (IntPtr)(24));
GL.VertexPointer(3, VertexPointerType.Float, FaceData.VertexSize, (IntPtr)(0));
GL.DrawElements(BeginMode.Triangles, face.Indices.Count, DrawElementsType.UnsignedShort, IntPtr.Zero);
}
Compat.BindBuffer(BufferTarget.ArrayBuffer, 0);
Compat.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
}
*/
if (switchedLightsOff)
{
GL.Enable(EnableCap.Lighting);
switchedLightsOff = false;
}
}
GL.BindTexture(TextureTarget.Texture2D, 0);
RHelp.ResetMaterial();
// Reset texture coordinates if we modified them in texture animation
if (animatedTexture)
{
GL.MatrixMode(MatrixMode.Texture);
GL.LoadIdentity();
GL.MatrixMode(MatrixMode.Modelview);
}
// Pop the prim matrix
GL.PopMatrix();
base.Render(pass, pickingID, scene, time);
}
/// <summary>
/// String representation of the object
/// </summary>
/// <returns>String containing local ID of the object and it's distance from the camera</returns>
public override string ToString()
{
uint id = Prim == null ? 0 : Prim.LocalID;
float distance = (float)Math.Sqrt(DistanceSquared);
return string.Format("LocalID: {0}, distance {0.00}", id, distance);
}
}
}
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a39f315ba92417d43a168eddc202ecaa
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
View File
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ce6bf542a1ac7004b867d58c64071494
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 07e0dbb908f9e9941a7484343bd3b3b1
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
+4
View File
@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: af545c64be0618b4086c843e2287aef3
DefaultImporter:
userData:
+4
View File
@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: eccc668e6519a6e428cfcac8c6644358
DefaultImporter:
userData:
Binary file not shown.
@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: bc86e1f68d31db0448a4bff74807e574
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 512
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: 0
buildTargetSettings: []
userData:
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: 935cf88c386d9cc4ca156b2a5fd9c992
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: -1
buildTargetSettings: []
userData:
Binary file not shown.
@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: c768927e55bffbe4cb64587121132353
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 512
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: 0
buildTargetSettings: []
userData:
Binary file not shown.
@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: 709280674f0ca3c4491270f799ff59f5
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: -1
buildTargetSettings: []
userData:
Binary file not shown.
@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: dc88bc4dfec18ec429107ce352ce5144
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: -1
buildTargetSettings: []
userData:
Binary file not shown.
@@ -0,0 +1,35 @@
fileFormatVersion: 2
guid: 18b19e7d34063ae4dbef0c911511e1fc
TextureImporter:
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
textureType: -1
buildTargetSettings: []
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 48ebc8f37c0643742a40533aa83e3ba9
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 03f10af4406b42a47a96951cb7129f03
MonoAssemblyImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
userData:
Binary file not shown.
+51
View File
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<!--
Default values for "Look At" controls.
Various events compete for avatar attention. I.E. control where the
user's avatar looks.
The avatar's head will turn to look towards the source of those events
as much as is possible.
If the head cannot turn due to an animation override, the eyes will still
track those events.
Avatar attention will be taken by events of equal of greater priorities
and will last for timeout number of seconds before reverting to idle.
Negative timeout values indicate attentions that never time out.
Avatar sex determines which set of attention settings are used.
Within each set, the following named attentions relate to the indicated events:
IDLE: Tracks the mouse pointer movement.
AUTO LISTEN: Tracks nearby chat.
FREELOOK: Tracks "target objects" and a case of mouse moved in 3rd person mode.
RESPOND: Tracks the beginning of typing.
HOVER: Tracks objects the mouse lingers over when "show hover tooltips" is on.
CONVERSATION: Tracks avatars and other objects clicked on.
SEOECT: Tracks objects grabbed and being moved.
FOCUS: Freezes during avatar customization and when focused on object or point.
MOUSELOOK: Tracks center of view when in mouselook view mode.
-->
<linden_attentions version="1.0">
<gender name="Masculine">
<param attention="idle" priority="1.0" timeout="3.0" />
<param attention="auto_listen" priority="3.0" timeout="4.0" />
<param attention="freelook" priority="2.0" timeout="2.0" />
<param attention="respond" priority="3.0" timeout="4.0" />
<param attention="hover" priority="4.0" timeout="1.0" />
<param attention="conversation" priority="0.0" timeout="-1" />
<param attention="select" priority="6.0" timeout="-1" />
<param attention="focus" priority="6.0" timeout="-1" />
<param attention="mouselook" priority="7.0" timeout="-1" />
</gender>
<gender name="Feminine">
<param attention="idle" priority="1.0" timeout="3.0" />
<param attention="auto_listen" priority="3.0" timeout="4.0" />
<param attention="freelook" priority="2.0" timeout="2.0" />
<param attention="respond" priority="3.0" timeout="4.0" />
<param attention="hover" priority="4.0" timeout="1.0" />
<param attention="conversation" priority="0.0" timeout="-1" />
<param attention="select" priority="6.0" timeout="-1" />
<param attention="focus" priority="6.0" timeout="-1" />
<param attention="mouselook" priority="7.0" timeout="-1" />
</gender>
</linden_attentions>
+51
View File
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<!--
Default values for "Look At" controls.
Various events compete for avatar attention. I.E. control where the
user's avatar looks.
The avatar's head will turn to look towards the source of those events
as much as is possible.
If the head cannot turn due to an animation override, the eyes will still
track those events.
Avatar attention will be taken by events of equal of greater priorities
and will last for timeout number of seconds before reverting to idle.
Negative timeout values indicate attentions that never time out.
Avatar sex determines which set of attention settings are used.
Within each set, the following named attentions relate to the indicated events:
IDLE: Tracks the mouse pointer movement.
AUTO LISTEN: Tracks nearby chat.
FREELOOK: Tracks "target objects" and a case of mouse moved in 3rd person mode.
RESPOND: Tracks the beginning of typing.
HOVER: Tracks objects the mouse lingers over when "show hover tooltips" is on.
CONVERSATION: Tracks avatars and other objects clicked on.
SEOECT: Tracks objects grabbed and being moved.
FOCUS: Freezes during avatar customization and when focused on object or point.
MOUSELOOK: Tracks center of view when in mouselook view mode.
-->
<linden_attentions version="1.0">
<gender name="Masculine">
<param attention="idle" priority="1.0" timeout="3.0" />
<param attention="auto_listen" priority="3.0" timeout="4.0" />
<param attention="freelook" priority="2.0" timeout="2.0" />
<param attention="respond" priority="3.0" timeout="3.0" />
<param attention="hover" priority="4.0" timeout="1.0" />
<param attention="conversation" priority="5.0" timeout="3.0" />
<param attention="select" priority="3.5" timeout="-1" />
<param attention="focus" priority="3.5" timeout="20.0" />
<param attention="mouselook" priority="7.0" timeout="-1" />
</gender>
<gender name="Feminine">
<param attention="idle" priority="1.0" timeout="3.0" />
<param attention="auto_listen" priority="3.0" timeout="4.0" />
<param attention="freelook" priority="2.0" timeout="2.0" />
<param attention="respond" priority="3.0" timeout="6.0" />
<param attention="hover" priority="4.0" timeout="1.0" />
<param attention="conversation" priority="5.0" timeout="6.0" />
<param attention="select" priority="2.5" timeout="-1" />
<param attention="focus" priority="2.5" timeout="10.0" />
<param attention="mouselook" priority="7.0" timeout="-1" />
</gender>
</linden_attentions>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+74
View File
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<linden_skeleton version="1.0" num_bones="46" num_collision_volumes="19">
<bone name="mPelvis" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 1.067015">
<collision_volume name="PELVIS" pos = "-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17"/>
<bone name="mTorso" pos="0.000 0.000 0.084" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.084073">
<collision_volume name="BELLY" pos = "0.028 0 0.04" rot="0.000000 8.00000 0.000000" scale="0.09 0.13 0.15"/>
<bone name="mChest" pos="-0.015 0.000 0.205" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.015368 0.000000 0.204877">
<collision_volume name="CHEST" pos = "0.028 0 0.07" rot="0.000000 -10.00000 0.000000" scale="0.11 0.15 0.2"/>
<bone name="mNeck" pos="-0.010 0.000 0.251" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.009507 0.000000 0.251108">
<collision_volume name="NECK" pos = "0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08"/>
<bone name="mHead" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.000000 0.075630">
<collision_volume name="HEAD" pos = "0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12"/>
<bone name="mSkull" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.000000 0.079000">
</bone>
<bone name="mEyeRight" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" pivot="0.098466 -0.036000 0.079000">
</bone>
<bone name="mEyeLeft" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.098461 0.036000 0.079000">
</bone>
</bone>
</bone>
<bone name="mCollarLeft" pos="-0.021 0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 0.084665 0.165396">
<collision_volume name="L_CLAVICLE" pos = "0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05"/>
<bone name="mShoulderLeft" pos="0.000 0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.079000 -0.000000">
<collision_volume name="L_UPPER_ARM" pos = "0.0 0.12 0.01" rot="-5.000000 0.00000 0.000000" scale="0.05 0.17 0.05"/>
<bone name="mElbowLeft" pos="0.000 0.248 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 0.248000 0.000000">
<collision_volume name="L_LOWER_ARM" pos = "0.0 0.1 0.0" rot="-3.000000 0.00000 0.000000" scale="0.04 0.14 0.04"/>
<bone name="mWristLeft" pos="-0.000 0.205 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 0.204846 0.000000">
<collision_volume name="L_HAND" pos = "0.01 0.05 0.0" rot="-3.000000 0.00000 -10.000000" scale="0.05 0.08 0.03"/>
</bone>
</bone>
</bone>
</bone>
<bone name="mCollarRight" pos="-0.021 -0.085 0.165" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.020927 -0.085000 0.165396">
<collision_volume name="R_CLAVICLE" pos = "0.02 0 0.02" rot="0.000000 0.00000 0.000000" scale="0.07 0.14 0.05"/>
<bone name="mShoulderRight" pos="0.000 -0.079 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.079418 -0.000000">
<collision_volume name="R_UPPER_ARM" pos = "0.0 -0.12 0.01" rot="5.000000 0.00000 0.000000" scale="0.05 0.17 0.05"/>
<bone name="mElbowRight" pos="0.000 -0.248 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.000000 -0.248000 -0.000000">
<collision_volume name="R_LOWER_ARM" pos = "0.0 -0.1 0.0" rot="3.000000 0.00000 0.000000" scale="0.04 0.14 0.04"/>
<bone name="mWristRight" pos="0.000 -0.205 -0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000000 -0.205000 -0.000000">
<collision_volume name="R_HAND" pos = "0.01 -0.05 0.0" rot="3.000000 0.00000 10.000000" scale="0.05 0.08 0.03"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="mHipRight" pos="0.034 -0.129 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033620 -0.128806 -0.041086">
<collision_volume name="R_UPPER_LEG" pos = "-0.02 0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32"/>
<bone name="mKneeRight" pos="-0.001 0.049 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000780 0.048635 -0.490922">
<collision_volume name="R_LOWER_LEG" pos = "-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25"/>
<bone name="mAnkleRight" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028869 0.000000 -0.468494">
<collision_volume name="R_FOOT" pos = "0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05"/>
<bone name="mFootRight" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060637">
<bone name="mToeRight" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105399 -0.010408 -0.000104">
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="mHipLeft" pos="0.034 0.127 -0.041" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.033757 0.126765 -0.040998">
<collision_volume name="L_UPPER_LEG" pos = "-0.02 -0.05 -0.22" rot="0.000000 0.00000 0.000000" scale="0.09 0.09 0.32"/>
<bone name="mKneeLeft" pos="-0.001 -0.046 -0.491" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.000887 -0.045568 -0.491053">
<collision_volume name="L_LOWER_LEG" pos = "-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25"/>
<bone name="mAnkleLeft" pos="-0.029 0.001 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="-0.028887 0.001378 -0.468449">
<collision_volume name="L_FOOT" pos = "0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05"/>
<bone name="mFootLeft" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.111956 -0.000000 -0.060620">
<bone name="mToeLeft" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" pivot="0.105387 0.008270 0.000871">
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</linden_skeleton>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More