本文整理汇总了C#中Quaternion.Equals方法的典型用法代码示例。如果您正苦于以下问题:C# Quaternion.Equals方法的具体用法?C# Quaternion.Equals怎么用?C# Quaternion.Equals使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Quaternion
的用法示例。
在下文中一共展示了Quaternion.Equals方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: QuaternionNormaliseTest
public void QuaternionNormaliseTest()
{
var a = new Quaternion(3.0f, 4.0f, 3.0f, 1.0f);
var expectedResult = new Quaternion(0.5070925f, 0.6761234f, 0.5070925f, 0.1690308f);
a.Normalise();
Assert.True(a.Equals(expectedResult, 1e-3f));
}
示例2: RelativeRotation
/// <summary>
/// Returns the rotation around x, y, and z axis from two given quaternions. If both quaternions are equal it will result in zero vector.
/// The angle with the lesser absolute value should be used as rotation.
/// </summary>
/// <param name="start">the start quaternion</param>
/// <param name="target">the target quaternion</param>
/// <returns></returns>
public static Vector3 RelativeRotation(Quaternion start, Quaternion target)
{
if (start.Equals(target))
{
return Vector3.Zero;
}
var normalizedStart = Quaternion.Normalize(start);
var normalizedTarget = Quaternion.Normalize(target);
var rotation = normalizedStart * Quaternion.Inverse(normalizedTarget);
return rotation.GetYawPitchRollVector();
}
示例3: TestEquals
public void TestEquals()
{
Quaternion q1 = new Quaternion(.25f, .75f, .5f, 1.0f);
Quaternion q2 = new Quaternion(.25f, .75f, .5f, 1.0f);
Quaternion q3 = new Quaternion(.55f, .17f, 1.0f, .15f);
//Test IEquatable Equals
Assert.IsTrue(q1.Equals(q2), "Test IEquatable equals");
Assert.IsFalse(q1.Equals(q3), "Test IEquatable equals");
//Test object equals override
Assert.IsTrue(q1.Equals((object) q2), "Tests object equals");
Assert.IsFalse(q1.Equals((object) q3), "Tests object equals");
//Test op equals
Assert.IsTrue(q1 == q2, "Testing OpEquals");
Assert.IsFalse(q1 == q3, "Testing OpEquals");
//Test op not equals
Assert.IsTrue(q1 != q3, "Testing OpNotEquals");
Assert.IsFalse(q1 != q2, "Testing OpNotEquals");
}
示例4: BuildVertexBuffer
/// <inheritdoc />
public override unsafe int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter)
{
// Get all the required particle fields
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0;
var sizeField = sorter.GetField(ParticleFields.Size);
var orderField = sorter.GetField(ParticleFields.Order);
// Check if the draw space is identity - in this case we don't need to transform the position, scale and rotation vectors
// ReSharper disable once CompareOfFloatsByEqualityOperator
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(Quaternion.Identity));
var ribbonizer = new Ribbonizer(this, currentTotalParticles, currentQuadsPerParticle);
var renderedParticles = 0;
bufferState.StartOver();
uint oldOrderValue = 0;
foreach (var particle in sorter)
{
if (orderField.IsValid())
{
var orderValue = (*((uint*)particle[orderField]));
if ((orderValue >> SpawnOrderConst.GroupBitOffset) != (oldOrderValue >> SpawnOrderConst.GroupBitOffset))
{
ribbonizer.Ribbonize(ref bufferState, invViewX, invViewY, QuadsPerParticle);
ribbonizer.RibbonSplit();
}
oldOrderValue = orderValue;
}
var centralPos = particle.Get(positionField);
var particleSize = sizeField.IsValid() ? particle.Get(sizeField) : 1f;
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
particleSize *= spaceScale;
}
ribbonizer.AddParticle(ref centralPos, particleSize);
renderedParticles++;
}
ribbonizer.Ribbonize(ref bufferState, invViewX, invViewY, QuadsPerParticle);
ribbonizer.Free();
var vtxPerShape = 4 * QuadsPerParticle;
return renderedParticles * vtxPerShape;
}
示例5: TestEquality
// Test Operator: Equality //-----------------------------------------//
/// <summary>
/// Helper method for testing equality.
/// </summary>
void TestEquality (Quaternion a, Quaternion b, Boolean expected )
{
// This test asserts the following:
// (a == b) == expected
// (b == a) == expected
// (a != b) == !expected
// (b != a) == !expected
Boolean result_1a = (a == b);
Boolean result_1b = (a.Equals(b));
Boolean result_1c = (a.Equals((Object)b));
Boolean result_2a = (b == a);
Boolean result_2b = (b.Equals(a));
Boolean result_2c = (b.Equals((Object)a));
Boolean result_3a = (a != b);
Boolean result_4a = (b != a);
Assert.That(result_1a, Is.EqualTo(expected));
Assert.That(result_1b, Is.EqualTo(expected));
Assert.That(result_1c, Is.EqualTo(expected));
Assert.That(result_2a, Is.EqualTo(expected));
Assert.That(result_2b, Is.EqualTo(expected));
Assert.That(result_2c, Is.EqualTo(expected));
Assert.That(result_3a, Is.EqualTo(!expected));
Assert.That(result_4a, Is.EqualTo(!expected));
}
示例6: CreateNewTile
private Transform CreateNewTile( string blockID, Vector3 pos = default(Vector3), Vector3 size = default(Vector3), Quaternion rot = default(Quaternion) ){ //optional parameters!
Transform tile;
if(m_TileListManager.GetTile( blockID) != null)
tile= (Transform)Instantiate(m_TileListManager.GetTile( blockID ));
else{
print(blockID + " missing.");
return null;
// tile = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
// tile.gameObject.AddComponent<TileProperties>();
//
// string[] split = blockID.Split ( new char[]{'/'} );
// tile.name = split[1];
// tile.GetComponent<TileProperties>().tileID = blockID;
}
if ( !rot.Equals(default(Quaternion)) ){
tile.rotation = rot;
} else {
tile.GetComponent<TileProperties>().SetRotation( m_CurrentRotation, m_CurrentPivotType );
}
tile.position = pos;
// we always want it to be kinematic/trigger.
tile.gameObject.GetComponent<TileProperties>().Init( true, false );
tile.gameObject.SetActive( true );
// Apply any stored scale values.
tile.GetComponent<TileProperties>().ApplyScaleRecursively();
if ( tile.GetComponent<TileProperties>().scalable ){
Vector3 scale = Vector3.Scale(tile.localScale, size);
scale.x = scale.x - scaleModifier;
scale.y = scale.y - scaleModifier;
scale.z = scale.z - scaleModifier;
tile.GetComponent<TileProperties>().SetScale( scale );
}
return tile;
}
示例7: BuildVertexBuffer
/// <inheritdoc />
public override unsafe int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter)
{
// Update the curve samplers if required
base.BuildVertexBuffer(ref bufferState, invViewX, invViewY, ref spaceTranslation, ref spaceRotation, spaceScale, ref sorter);
// Get all required particle fields
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0;
var sizeField = sorter.GetField(ParticleFields.Size);
var lifeField = sorter.GetField(ParticleFields.Life);
var angleField = sorter.GetField(ParticleFields.Angle);
var hasAngle = angleField.IsValid() || (SamplerRotation != null);
// Check if the draw space is identity - in this case we don't need to transform the position, scale and rotation vectors
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(Quaternion.Identity));
var renderedParticles = 0;
var posAttribute = bufferState.GetAccessor(VertexAttributes.Position);
var texAttribute = bufferState.GetAccessor(bufferState.DefaultTexCoords);
foreach (var particle in sorter)
{
var centralPos = GetParticlePosition(particle, positionField, lifeField);
var particleSize = GetParticleSize(particle, sizeField, lifeField);
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
particleSize *= spaceScale;
}
// Use half size to make a Size = 1 result in a Billboard of 1m x 1m
var unitX = invViewX * (particleSize * 0.5f);
var unitY = invViewY * (particleSize * 0.5f);
// Particle rotation. Positive value means clockwise rotation.
if (hasAngle)
{
var rotationAngle = GetParticleRotation(particle, angleField, lifeField);
var cosA = (float)Math.Cos(rotationAngle);
var sinA = (float)Math.Sin(rotationAngle);
var tempX = unitX * cosA - unitY * sinA;
unitY = unitY * cosA + unitX * sinA;
unitX = tempX;
}
// vertex.Size = particleSize;
const float Sqrt3Half = 0.86602540378f;
unitY *= Sqrt3Half;
var halfX = unitX * 0.5f;
var particlePos = centralPos - halfX + unitY;
var uvCoord = new Vector2(0.25f, 0.5f - Sqrt3Half * 0.5f);
// Upper half
// 0f 0f
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 0f
particlePos += unitX;
uvCoord.X = 0.75f;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 1f
particlePos += halfX;
particlePos -= unitY;
uvCoord.X = 1;
uvCoord.Y = 0.5f;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 0f 1f
particlePos -= unitX * 2;
uvCoord.X = 0;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// Upper half
//.........这里部分代码省略.........
示例8: BuildVertexBuffer
/// <inheritdoc />
public unsafe override int BuildVertexBuffer(ParticleVertexBuilder vtxBuilder, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ParticleSorter sorter)
{
// Get all the required particle fields
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0;
var sizeField = sorter.GetField(ParticleFields.Size);
var directionField = sorter.GetField(ParticleFields.Direction);
// Check if the draw space is identity - in this case we don't need to transform the position, scale and rotation vectors
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(Quaternion.Identity));
var renderedParticles = 0;
vtxBuilder.RestartBuffer();
uint oldOrderValue = 0;
var orderField = sorter.GetField(ParticleFields.Order);
foreach (var particle in sorter)
{
if (orderField.IsValid())
{
var orderValue = (*((uint*)particle[orderField]));
if ((orderValue >> 16) != (oldOrderValue >> 16))
{
ribbonizer.Ribbonize(vtxBuilder, QuadsPerParticle);
ribbonizer.RibbonSplit();
}
oldOrderValue = orderValue;
}
var centralPos = particle.Get(positionField);
var particleSize = sizeField.IsValid() ? particle.Get(sizeField) : 1f;
var particleDirection = directionField.IsValid() ? particle.Get(directionField) * particleSize : new Vector3(0f, particleSize, 0f);
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
// Direction
spaceRotation.Rotate(ref particleDirection);
particleDirection *= spaceScale;
}
ribbonizer.AddParticle(ref centralPos, ref particleDirection);
renderedParticles++;
}
ribbonizer.Ribbonize(vtxBuilder, QuadsPerParticle);
var vtxPerShape = 4 * QuadsPerParticle;
return renderedParticles * vtxPerShape;
}
示例9: QuaternionConjugateTest
public void QuaternionConjugateTest()
{
var a = new Quaternion(3.0f, 4.0f, 3.0f, 1.0f);
var expectedResult = new Quaternion(-3.0f, -4.0f, -3.0f, 1.0f);
a.Conjugate();
Assert.True(a.Equals(expectedResult, 1e-3f));
}
示例10: BuildVertexBuffer
/// <inheritdoc />
public unsafe override int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter)
{
// Update the curve samplers if required
base.BuildVertexBuffer(ref bufferState, invViewX, invViewY, ref spaceTranslation, ref spaceRotation, spaceScale, ref sorter);
// Get all required particle fields
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0;
var lifeField = sorter.GetField(ParticleFields.Life);
var sizeField = sorter.GetField(ParticleFields.Size);
var rotField = sorter.GetField(ParticleFields.Quaternion);
var hasRotation = rotField.IsValid() || (SamplerRotation != null);
// Check if the draw space is identity - in this case we don't need to transform the position, scale and rotation vectors
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(Quaternion.Identity));
var renderedParticles = 0;
var posAttribute = bufferState.GetAccessor(VertexAttributes.Position);
var texAttribute = bufferState.GetAccessor(bufferState.DefaultTexCoords);
foreach (var particle in sorter)
{
var centralPos = GetParticlePosition(particle, positionField, lifeField);
var particleSize = GetParticleSize(particle, sizeField, lifeField);
var unitX = new Vector3(1, 0, 0);
var unitY = new Vector3(0, 0, 1);
if (hasRotation)
{
var particleRotation = GetParticleRotation(particle, rotField, lifeField);
particleRotation.Rotate(ref unitX);
particleRotation.Rotate(ref unitY);
}
// The TRS matrix is not an identity, so we need to transform the quad
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
particleSize *= spaceScale;
spaceRotation.Rotate(ref unitX);
spaceRotation.Rotate(ref unitY);
}
// Use half size to make a Size = 1 result in a Billboard of 1m x 1m
unitX *= (particleSize * 0.5f);
unitY *= (particleSize * 0.5f);
var particlePos = centralPos - unitX + unitY;
var uvCoord = new Vector2(0, 0);
// 0f 0f
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 0f
particlePos += unitX * 2;
uvCoord.X = 1;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 1f
particlePos -= unitY * 2;
uvCoord.Y = 1;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 0f 1f
particlePos -= unitX * 2;
uvCoord.X = 0;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
renderedParticles++;
}
var vtxPerShape = 4 * QuadsPerParticle;
return renderedParticles * vtxPerShape;
}
示例11: GetPos
private Vector3 GetPos(XmlNode node, Quaternion rot, Vector3 shift, float scale)
{
Vector3 pos = Vector3.Zero;
pos = Vector3.Multiply(GetVector(node), scale);
if (!rot.Equals(Quaternion.Identity)) {
Matrix4 x = Matrix4.CreateFromQuaternion(rot);
Vector3 diff = pos;
pos = Vector3.Transform(diff, x);
}
return pos + shift;
}
示例12: BuildVertexBuffer
/// <inheritdoc />
public unsafe override int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter)
{
// Update the curve samplers if required
base.BuildVertexBuffer(ref bufferState, invViewX, invViewY, ref spaceTranslation, ref spaceRotation, spaceScale, ref sorter);
// Get all the required particle fields
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0;
var lifeField = sorter.GetField(ParticleFields.Life);
var sizeField = sorter.GetField(ParticleFields.Size);
var directionField = sorter.GetField(ParticleFields.Direction);
// Check if the draw space is identity - in this case we don't need to transform the position, scale and rotation vectors
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(Quaternion.Identity));
var renderedParticles = 0;
var posAttribute = bufferState.GetAccessor(VertexAttributes.Position);
var texAttribute = bufferState.GetAccessor(bufferState.DefaultTexCoords);
Vector3 invViewZ;
Vector3.Cross(ref invViewX, ref invViewY, out invViewZ);
invViewZ.Normalize();
foreach (var particle in sorter)
{
var centralPos = GetParticlePosition(particle, positionField, lifeField);
var centralOffset = (directionField.IsValid()) ? particle.Get(directionField) : new Vector3(0, 1, 0);
var particleSize = GetParticleSize(particle, sizeField, lifeField);
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
spaceRotation.Rotate(ref centralOffset);
centralOffset = centralOffset * spaceScale;
particleSize *= spaceScale;
}
var unitX = invViewX;
var unitY = invViewY;
{
var centralAxis = centralOffset;
float dotZ;
Vector3.Dot(ref centralAxis, ref invViewZ, out dotZ);
centralAxis -= invViewZ*dotZ;
centralAxis.Normalize();
float dotX;
Vector3.Dot(ref centralAxis, ref unitX, out dotX);
float dotY;
Vector3.Dot(ref centralAxis, ref unitY, out dotY);
unitX = unitX*dotY - unitY*dotX;
unitX.Normalize();
unitY = centralOffset;
}
// Use half size to make a Size = 1 result in a Billboard of 1m x 1m
unitX *= (particleSize * 0.5f);
if (ScaleLength)
{
unitY *= (LengthFactor * particleSize * 0.5f);
}
else
{
unitY *= (LengthFactor * 0.5f);
}
var particlePos = centralPos - unitX + unitY;
var uvCoord = new Vector2(0, 0);
// 0f 0f
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 0f
particlePos += unitX * 2;
uvCoord.X = 1;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 1f
//.........这里部分代码省略.........
示例13: BuildVertexBuffer
/// <inheritdoc />
public override unsafe int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY,
ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter)
{
// Step 1 - get all required fields to build the particle shapes. Some fields may not exist if no initializer or updater operates on them
// In that case we just decide on a default value for that field and skip the update
var positionField = sorter.GetField(ParticleFields.Position);
if (!positionField.IsValid())
return 0; // We can't display the particles without position. All other fields are optional
var sizeField = sorter.GetField(ParticleFields.Size);
var angleField = sorter.GetField(ParticleFields.Angle);
var hasAngle = angleField.IsValid();
var rectField = sorter.GetField(CustomParticleFields.RectangleXY);
var isRectangle = rectField.IsValid();
// In case of Local space particles they are simulated in local emitter space, but drawn in world space
// If the draw space is identity (i.e. simulation space = draw space) skip transforming the particle's location later
var trsIdentity = (spaceScale == 1f);
trsIdentity = trsIdentity && (spaceTranslation.Equals(new Vector3(0, 0, 0)));
trsIdentity = trsIdentity && (spaceRotation.Equals(new Quaternion(0, 0, 0, 1)));
// Custom feature - fix the Y axis to always point up in world space rather than screen space
if (FixYAxis)
{
invViewY = new Vector3(0, 1, 0);
invViewX.Y = 0;
invViewX.Normalize();
}
var renderedParticles = 0;
var posAttribute = bufferState.GetAccessor(VertexAttributes.Position);
var texAttribute = bufferState.GetAccessor(bufferState.DefaultTexCoords);
foreach (var particle in sorter)
{
var centralPos = particle.Get(positionField);
var particleSize = sizeField.IsValid() ? particle.Get(sizeField) : 1f;
if (!trsIdentity)
{
spaceRotation.Rotate(ref centralPos);
centralPos = centralPos * spaceScale + spaceTranslation;
particleSize *= spaceScale;
}
var unitX = invViewX * particleSize;
var unitY = invViewY * particleSize;
if (isRectangle)
{
var rectSize = particle.Get(rectField);
unitX *= rectSize.X;
unitY *= rectSize.Y;
}
// Particle rotation. Positive value means clockwise rotation.
if (hasAngle)
{
var rotationAngle = particle.Get(angleField);
var cosA = (float)Math.Cos(rotationAngle);
var sinA = (float)Math.Sin(rotationAngle);
var tempX = unitX * cosA - unitY * sinA;
unitY = unitY * cosA + unitX * sinA;
unitX = tempX;
}
var particlePos = centralPos - unitX + unitY;
var uvCoord = new Vector2(0, 0);
// 0f 0f
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 0f
particlePos += unitX * 2;
uvCoord.X = 1;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 1f 1f
particlePos -= unitY * 2;
uvCoord.Y = 1;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
bufferState.SetAttribute(texAttribute, (IntPtr)(&uvCoord));
bufferState.NextVertex();
// 0f 1f
particlePos -= unitX * 2;
uvCoord.X = 0;
bufferState.SetAttribute(posAttribute, (IntPtr)(&particlePos));
//.........这里部分代码省略.........
示例14: MRMPrim
public MRMPrim(MRMPrimFactory factory, string name, Vector3 position, Color colour = default(Color), Vector3 scale = default(Vector3), PrimType shape = PrimType.Unknown, Quaternion rotation = default(Quaternion))
{
_exists = true;
_editable = true;
_factory = factory;
_name = name;
_obj = factory.RegisterPrim(this, name, position);
_id = _obj.GlobalID;
_child = !ID.Equals(_obj.Root.GlobalID);
Glow = 0d;
Name = _name;
Colour = !colour.Equals(default(Color)) ? colour : Color.White;
Shape = !shape.Equals(PrimType.Unknown) ? shape : PrimType.Box;
Rotation = !rotation.Equals(default(Quaternion)) ? rotation : Quaternion.Identity;
Scale = !scale.Equals(default(Vector3)) ? scale : new Vector3(.5f, .5f, .5f);
_updateListener = Update;
factory.Update += _updateListener;
}