本文整理汇总了C#中ColorRgba类的典型用法代码示例。如果您正苦于以下问题:C# ColorRgba类的具体用法?C# ColorRgba怎么用?C# ColorRgba使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ColorRgba类属于命名空间,在下文中一共展示了ColorRgba类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: Create
public static void Create(Vector3 pos, string text, ColorRgba color)
{
GameObject pe = new GameObject(GameRes.Data.Prefabs.PowerupEffect_Prefab);
pe.GetComponent<PowerupEffect>().Text = text;
pe.GetComponent<TextRenderer>().ColorTint = color;
pe.Transform.Pos = pos;
Scene.Current.RegisterObj(pe);
}
开发者ID:Andrea,项目名称:duality-withsvn-history,代码行数:8,代码来源:PowerupEffect.cs
示例2: PixelData
public PixelData(int width, int height, ColorRgba[] data)
{
if (data == null) throw new ArgumentNullException("data");
if (width < 0) throw new ArgumentException("Width may not be negative.", "width");
if (height < 0) throw new ArgumentException("Height may not be negative.", "height");
this.SetPixelDataRgba(data, width, height);
}
开发者ID:gitMaxim,项目名称:duality,代码行数:8,代码来源:PixelData.cs
示例3: PixelData
public PixelData(int width, int height, ColorRgba backColor)
{
if (width < 0) throw new ArgumentException("Width may not be negative.", "width");
if (height < 0) throw new ArgumentException("Height may not be negative.", "height");
this.width = width;
this.height = height;
this.data = new ColorRgba[width * height];
for (int i = 0; i < this.data.Length; i++)
this.data[i] = backColor;
}
开发者ID:ChrisLakeZA,项目名称:duality,代码行数:12,代码来源:PixelData.cs
示例4: GetPixelDataRgba
/// <summary>
/// Extracts a Bitmaps pixel data.
/// </summary>
/// <param name="bm"></param>
/// <returns></returns>
public static ColorRgba[] GetPixelDataRgba(this Bitmap bm)
{
int[] argbValues = GetPixelDataIntArgb(bm);
// Convert to ColorRGBA
ColorRgba[] result = new ColorRgba[argbValues.Length];
unchecked
{
for (int i = 0; i < argbValues.Length; i++)
result[i].SetIntArgb(argbValues[i]);
}
return result;
}
开发者ID:Scottyaim,项目名称:duality,代码行数:18,代码来源:ExtMethodsBitmap.cs
示例5: VisualizeAtlas
public static void VisualizeAtlas(Bitmap bitmap, List<Rect> atlas)
{
ColorRgba atlasColor = new ColorRgba(255, 128, 128, 164);
// Draw atlas rects
if (atlas != null)
{
Pen atlasPen = new Pen(Color.FromArgb(atlasColor.A, atlasColor.R, atlasColor.G, atlasColor.B));
using (Graphics g = Graphics.FromImage(bitmap))
{
foreach (Rect r in atlas) g.DrawRectangle(atlasPen, r.X, r.Y, r.W, r.H);
}
}
}
开发者ID:SirePi,项目名称:duality,代码行数:14,代码来源:PixmapAtlasVisualizer.cs
示例6: if
void ICmpUpdatable.OnUpdate()
{
Trigger trig = this.GameObj.GetComponent<Trigger>();
SpriteRenderer sprite = this.GameObj.GetComponent<SpriteRenderer>();
if (trig.Triggered && !this.wasTriggered)
{
this.oldColorTint = sprite.ColorTint;
sprite.ColorTint = ColorRgba.Mix(this.oldColorTint, ColorRgba.Red, 0.5f);
}
else if (!trig.Triggered && this.wasTriggered)
{
sprite.ColorTint = this.oldColorTint;
}
this.wasTriggered = trig.Triggered;
}
开发者ID:Andrea,项目名称:dualityTechDemos,代码行数:16,代码来源:TriggerDebugRenderer.cs
示例7: SetPixelDataArgb
public static void SetPixelDataArgb(this PixelData pixelData, int[] data, int width = -1, int height = -1)
{
if (width < 0) width = pixelData.Width;
if (height < 0) height = pixelData.Height;
if (data.Length != width * height) throw new ArgumentException("Data length doesn't match width * height", "pixelData");
ColorRgba[] tempData = new ColorRgba[width * height];
Parallel.ForEach(Partitioner.Create(0, tempData.Length), range =>
{
for (int i = range.Item1; i < range.Item2; i++)
{
tempData[i].A = (byte)((data[i] & 0xFF000000) >> 24);
tempData[i].R = (byte)((data[i] & 0x00FF0000) >> 16);
tempData[i].G = (byte)((data[i] & 0x0000FF00) >> 8);
tempData[i].B = (byte)((data[i] & 0x000000FF) >> 0);
}
});
pixelData.SetData(tempData, width, height);
}
开发者ID:ChrisLakeZA,项目名称:duality,代码行数:20,代码来源:ExtMethodsPixelData.cs
示例8: Read
public PixelData Read(Stream stream)
{
ColorRgba[] rawColorData;
int width;
int height;
PixelData pixelData = new PixelData();
using (Bitmap bitmap = Bitmap.FromStream(stream) as Bitmap)
{
// Retrieve data
BitmapData bitmapData = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb);
int pixelCount = bitmapData.Width * bitmapData.Height;
int[] argbValues = new int[pixelCount];
Marshal.Copy(bitmapData.Scan0, argbValues, 0, pixelCount);
bitmap.UnlockBits(bitmapData);
width = bitmapData.Width;
height = bitmapData.Height;
rawColorData = new ColorRgba[width * height];
Parallel.ForEach(Partitioner.Create(0, rawColorData.Length), range =>
{
for (int i = range.Item1; i < range.Item2; i++)
{
rawColorData[i].A = (byte)((argbValues[i] & 0xFF000000) >> 24);
rawColorData[i].R = (byte)((argbValues[i] & 0x00FF0000) >> 16);
rawColorData[i].G = (byte)((argbValues[i] & 0x0000FF00) >> 8);
rawColorData[i].B = (byte)((argbValues[i] & 0x000000FF) >> 0);
}
});
}
pixelData.SetData(rawColorData, width, height);
pixelData.ColorTransparentPixels();
return pixelData;
}
开发者ID:ChrisLakeZA,项目名称:duality,代码行数:40,代码来源:BitmapImageCodec.cs
示例9: ColorChangeElement
public ColorChangeElement(ColorRgba color)
{
this.color = color;
}
开发者ID:ninja2003,项目名称:duality,代码行数:4,代码来源:FormattedText.cs
示例10: PrepareVertices
protected void PrepareVertices(ref VertexC1P3T2[] vertices, IDrawDevice device, ColorRgba mainClr, Rect uvRect)
{
Vector3 posTemp = this.gameobj.Transform.Pos;
float scaleTemp = 1.0f;
device.PreprocessCoords(ref posTemp, ref scaleTemp);
Vector2 xDot, yDot;
MathF.GetTransformDotVec(this.GameObj.Transform.Angle, scaleTemp, out xDot, out yDot);
Rect rectTemp = this.rect.Transformed(this.gameobj.Transform.Scale, this.gameobj.Transform.Scale);
Vector2 edge1 = rectTemp.TopLeft;
Vector2 edge2 = rectTemp.BottomLeft;
Vector2 edge3 = rectTemp.BottomRight;
Vector2 edge4 = rectTemp.TopRight;
MathF.TransformDotVec(ref edge1, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge2, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge3, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge4, ref xDot, ref yDot);
float left = uvRect.X;
float right = uvRect.RightX;
float top = uvRect.Y;
float bottom = uvRect.BottomY;
if ((this.flipMode & FlipMode.Horizontal) != FlipMode.None)
MathF.Swap(ref left, ref right);
if ((this.flipMode & FlipMode.Vertical) != FlipMode.None)
MathF.Swap(ref top, ref bottom);
if (vertices == null || vertices.Length != 4) vertices = new VertexC1P3T2[4];
vertices[0].Pos.X = posTemp.X + edge1.X;
vertices[0].Pos.Y = posTemp.Y + edge1.Y;
vertices[0].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[0].TexCoord.X = left;
vertices[0].TexCoord.Y = top;
vertices[0].Color = mainClr;
vertices[1].Pos.X = posTemp.X + edge2.X;
vertices[1].Pos.Y = posTemp.Y + edge2.Y;
vertices[1].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[1].TexCoord.X = left;
vertices[1].TexCoord.Y = bottom;
vertices[1].Color = mainClr;
vertices[2].Pos.X = posTemp.X + edge3.X;
vertices[2].Pos.Y = posTemp.Y + edge3.Y;
vertices[2].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[2].TexCoord.X = right;
vertices[2].TexCoord.Y = bottom;
vertices[2].Color = mainClr;
vertices[3].Pos.X = posTemp.X + edge4.X;
vertices[3].Pos.Y = posTemp.Y + edge4.Y;
vertices[3].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[3].TexCoord.X = right;
vertices[3].TexCoord.Y = top;
vertices[3].Color = mainClr;
if (this.pixelGrid)
{
vertices[0].Pos.X = MathF.Round(vertices[0].Pos.X);
vertices[1].Pos.X = MathF.Round(vertices[1].Pos.X);
vertices[2].Pos.X = MathF.Round(vertices[2].Pos.X);
vertices[3].Pos.X = MathF.Round(vertices[3].Pos.X);
if (MathF.RoundToInt(device.TargetSize.X) != (MathF.RoundToInt(device.TargetSize.X) / 2) * 2)
{
vertices[0].Pos.X += 0.5f;
vertices[1].Pos.X += 0.5f;
vertices[2].Pos.X += 0.5f;
vertices[3].Pos.X += 0.5f;
}
vertices[0].Pos.Y = MathF.Round(vertices[0].Pos.Y);
vertices[1].Pos.Y = MathF.Round(vertices[1].Pos.Y);
vertices[2].Pos.Y = MathF.Round(vertices[2].Pos.Y);
vertices[3].Pos.Y = MathF.Round(vertices[3].Pos.Y);
if (MathF.RoundToInt(device.TargetSize.Y) != (MathF.RoundToInt(device.TargetSize.Y) / 2) * 2)
{
vertices[0].Pos.Y += 0.5f;
vertices[1].Pos.Y += 0.5f;
vertices[2].Pos.Y += 0.5f;
vertices[3].Pos.Y += 0.5f;
}
}
}
开发者ID:ChrisLakeZA,项目名称:duality,代码行数:90,代码来源:SpriteRenderer.cs
示例11: DrawOnto
/// <summary>
/// Performs a drawing operation from this Layer to a target layer.
/// </summary>
/// <param name="target"></param>
/// <param name="blend"></param>
/// <param name="destX"></param>
/// <param name="destY"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="srcX"></param>
/// <param name="srcY"></param>
/// <param name="colorTint"></param>
public void DrawOnto(Layer target, BlendMode blend, int destX, int destY, int width, int height, int srcX, int srcY, ColorRgba colorTint)
{
if (colorTint == ColorRgba.White)
{
this.DrawOnto(target, blend, destX, destY, width, height, srcX, srcY);
return;
}
if (width == -1) width = this.width;
if (height == -1) height = this.height;
int beginX = MathF.Max(0, -destX, -srcX);
int beginY = MathF.Max(0, -destY, -srcY);
int endX = MathF.Min(width, this.width, target.width - destX, this.width - srcX);
int endY = MathF.Min(height, this.height, target.height - destY, this.height - srcY);
if (endX - beginX < 1) return;
if (endY - beginY < 1) return;
ColorRgba clrSource;
ColorRgba clrTarget;
System.Threading.Tasks.Parallel.For(beginX, endX, i =>
//for (int i = beginX; i < endX; i++)
{
for (int j = beginY; j < endY; j++)
{
int sourceN = srcX + i + this.width * (srcY + j);
int targetN = destX + i + target.width * (destY + j);
clrSource = this.data[sourceN] * colorTint;
if (blend == BlendMode.Solid)
{
target.data[targetN] = clrSource;
}
else if (blend == BlendMode.Mask)
{
if (clrSource.A >= 0) target.data[targetN] = this.data[sourceN];
}
else if (blend == BlendMode.Add)
{
clrTarget = target.data[targetN];
float alphaTemp = (float)clrSource.A / 255.0f;
target.data[targetN].R = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.R + clrSource.R * alphaTemp)));
target.data[targetN].G = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.G + clrSource.G * alphaTemp)));
target.data[targetN].B = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.B + clrSource.B * alphaTemp)));
target.data[targetN].A = (byte)Math.Min(255, Math.Max(0, (int)clrTarget.A + (int)clrSource.A));
}
else if (blend == BlendMode.Alpha)
{
clrTarget = target.data[targetN];
float alphaTemp = (float)clrSource.A / 255.0f;
target.data[targetN].R = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.R * (1.0f - alphaTemp) + clrSource.R * alphaTemp)));
target.data[targetN].G = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.G * (1.0f - alphaTemp) + clrSource.G * alphaTemp)));
target.data[targetN].B = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.B * (1.0f - alphaTemp) + clrSource.B * alphaTemp)));
target.data[targetN].A = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrTarget.A * (1.0f - alphaTemp) + clrSource.A)));
}
else if (blend == BlendMode.Multiply)
{
clrTarget = target.data[targetN];
float clrTempR = (float)clrTarget.R / 255.0f;
float clrTempG = (float)clrTarget.G / 255.0f;
float clrTempB = (float)clrTarget.B / 255.0f;
float clrTempA = (float)clrTarget.A / 255.0f;
target.data[targetN].R = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.R * clrTempR)));
target.data[targetN].G = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.G * clrTempG)));
target.data[targetN].B = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.B * clrTempB)));
target.data[targetN].A = (byte)Math.Min(255, Math.Max(0, (int)clrTarget.A + (int)clrSource.A));
}
else if (blend == BlendMode.Light)
{
clrTarget = target.data[targetN];
float clrTempR = (float)clrTarget.R / 255.0f;
float clrTempG = (float)clrTarget.G / 255.0f;
float clrTempB = (float)clrTarget.B / 255.0f;
float clrTempA = (float)clrTarget.A / 255.0f;
target.data[targetN].R = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.R * clrTempR + clrTarget.R)));
target.data[targetN].G = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.G * clrTempG + clrTarget.G)));
target.data[targetN].B = (byte)Math.Min(255, Math.Max(0, (int)Math.Round(clrSource.B * clrTempB + clrTarget.B)));
target.data[targetN].A = (byte)Math.Min(255, Math.Max(0, (int)clrTarget.A + (int)clrSource.A));
}
else if (blend == BlendMode.Invert)
{
clrTarget = target.data[targetN];
float clrTempR = (float)clrTarget.R / 255.0f;
float clrTempG = (float)clrTarget.G / 255.0f;
float clrTempB = (float)clrTarget.B / 255.0f;
float clrTempA = (float)clrTarget.A / 255.0f;
float clrTempR2 = (float)clrSource.R / 255.0f;
float clrTempG2 = (float)clrSource.G / 255.0f;
//.........这里部分代码省略.........
开发者ID:sorceron2000,项目名称:duality,代码行数:101,代码来源:Pixmap.cs
示例12: ColorTransparentPixels
/// <summary>
/// Sets the color of all transparent pixels to the specified color.
/// </summary>
/// <param name="transparentColor"></param>
public void ColorTransparentPixels(ColorRgba transparentColor)
{
for (int i = 0; i < this.data.Length; i++)
{
if (this.data[i].A != 0) continue;
this.data[i] = transparentColor;
}
}
开发者ID:sorceron2000,项目名称:duality,代码行数:12,代码来源:Pixmap.cs
示例13: CloneSubImage
/// <summary>
/// Extracts a rectangular region of this Layer. If the extracted region is bigger than the original Layer,
/// all new space is filled with a background color.
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="w"></param>
/// <param name="h"></param>
/// <param name="backColor"></param>
public Layer CloneSubImage(int x, int y, int w, int h, ColorRgba backColor)
{
Layer tempLayer = new Layer(w, h, backColor);
this.DrawOnto(tempLayer, BlendMode.Solid, -x, -y);
return tempLayer;
}
开发者ID:sorceron2000,项目名称:duality,代码行数:15,代码来源:Pixmap.cs
示例14: InternalRescale
private ColorRgba[] InternalRescale(int w, int h, FilterMethod filter)
{
if (this.width == w && this.height == h) return null;
ColorRgba[] tempDestData = new ColorRgba[w * h];
if (filter == FilterMethod.Nearest)
{
// Don't use Parallel.For here, the overhead is too big and the compiler
// does a great job optimizing this piece of code without, so don't get in the way.
for (int i = 0; i < tempDestData.Length; i++)
{
int y = i / w;
int x = i - (y * w);
int xTmp = (x * this.width) / w;
int yTmp = (y * this.height) / h;
int nTmp = xTmp + (yTmp * this.width);
tempDestData[i] = this.data[nTmp];
}
}
else if (filter == FilterMethod.Linear)
{
//for (int i = 0; i < tempDestData.Length; i++)
System.Threading.Tasks.Parallel.For(0, tempDestData.Length, i =>
{
int y = i / w;
int x = i - (y * w);
float xRatio = ((float)(x * this.width) / (float)w) + 0.5f;
float yRatio = ((float)(y * this.height) / (float)h) + 0.5f;
int xTmp = (int)xRatio;
int yTmp = (int)yRatio;
xRatio -= xTmp;
yRatio -= yTmp;
int xTmp2 = xTmp + 1;
int yTmp2 = yTmp + 1;
xTmp = xTmp < this.width ? xTmp : this.width - 1;
yTmp = (yTmp < this.height ? yTmp : this.height - 1) * this.width;
xTmp2 = xTmp2 < this.width ? xTmp2 : this.width - 1;
yTmp2 = (yTmp2 < this.height ? yTmp2 : this.height - 1) * this.width;
int nTmp0 = xTmp + yTmp;
int nTmp1 = xTmp2 + yTmp;
int nTmp2 = xTmp + yTmp2;
int nTmp3 = xTmp2 + yTmp2;
tempDestData[i].R =
(byte)
(
((float)this.data[nTmp0].R * (1.0f - xRatio) * (1.0f - yRatio)) +
((float)this.data[nTmp1].R * xRatio * (1.0f - yRatio)) +
((float)this.data[nTmp2].R * yRatio * (1.0f - xRatio)) +
((float)this.data[nTmp3].R * xRatio * yRatio)
);
tempDestData[i].G =
(byte)
(
((float)this.data[nTmp0].G * (1.0f - xRatio) * (1.0f - yRatio)) +
((float)this.data[nTmp1].G * xRatio * (1.0f - yRatio)) +
((float)this.data[nTmp2].G * yRatio * (1.0f - xRatio)) +
((float)this.data[nTmp3].G * xRatio * yRatio)
);
tempDestData[i].B =
(byte)
(
((float)this.data[nTmp0].B * (1.0f - xRatio) * (1.0f - yRatio)) +
((float)this.data[nTmp1].B * xRatio * (1.0f - yRatio)) +
((float)this.data[nTmp2].B * yRatio * (1.0f - xRatio)) +
((float)this.data[nTmp3].B * xRatio * yRatio)
);
tempDestData[i].A =
(byte)
(
((float)this.data[nTmp0].A * (1.0f - xRatio) * (1.0f - yRatio)) +
((float)this.data[nTmp1].A * xRatio * (1.0f - yRatio)) +
((float)this.data[nTmp2].A * yRatio * (1.0f - xRatio)) +
((float)this.data[nTmp3].A * xRatio * yRatio)
);
});
}
return tempDestData;
}
开发者ID:sorceron2000,项目名称:duality,代码行数:84,代码来源:Pixmap.cs
示例15: EmitVertices
/// <summary>
/// Emits sets of vertices for glyphs and icons based on this formatted text. To render it, use each set of vertices combined with
/// the corresponding Fonts <see cref="Material"/>.
/// </summary>
/// <param name="vertText">One set of vertices for each Font that is available to this ForattedText.</param>
/// <param name="vertIcons">A set of icon vertices.</param>
/// <param name="x">An X-Offset applied to the position of each emitted vertex.</param>
/// <param name="y">An Y-Offset applied to the position of each emitted vertex.</param>
/// <param name="z">An Z-Offset applied to the position of each emitted vertex.</param>
/// <param name="clr">The color value that is applied to each emitted vertex.</param>
/// <param name="angle">An angle by which the text is rotated (before applying the offset).</param>
/// <param name="scale">A factor by which the text is scaled (before applying the offset).</param>
/// <returns>
/// Returns an array of vertex counts for each emitted vertex array.
/// Index 0 represents the number of emitted icon vertices, Index n represents the number of vertices emitted using Font n - 1.
/// </returns>
public int[] EmitVertices(ref VertexC1P3T2[][] vertText, ref VertexC1P3T2[] vertIcons, float x, float y, float z, ColorRgba clr, float angle = 0.0f, float scale = 1.0f)
{
Vector2 xDot, yDot;
MathF.GetTransformDotVec(angle, scale, out xDot, out yDot);
return this.EmitVertices(ref vertText, ref vertIcons, x, y, z, clr, xDot, yDot);
}
开发者ID:ninja2003,项目名称:duality,代码行数:22,代码来源:FormattedText.cs
示例16: PrepareVerticesLightSmooth
protected void PrepareVerticesLightSmooth(ref VertexC1P3T4A4A1[] vertices, IDrawDevice device, float curAnimFrameFade, ColorRgba mainClr, Rect uvRect, Rect uvRectNext, DrawTechnique tech)
{
bool perPixel = tech is LightingTechnique;
Vector3 pos = this.GameObj.Transform.Pos;
Vector3 posTemp = pos;
float scaleTemp = 1.0f;
device.PreprocessCoords(ref posTemp, ref scaleTemp);
Vector2 xDot, yDot;
float rotation = this.GameObj.Transform.Angle;
MathF.GetTransformDotVec(rotation, out xDot, out yDot);
Rect rectTemp = this.rect.Transformed(this.GameObj.Transform.Scale, this.GameObj.Transform.Scale);
Vector2 edge1 = rectTemp.TopLeft;
Vector2 edge2 = rectTemp.BottomLeft;
Vector2 edge3 = rectTemp.BottomRight;
Vector2 edge4 = rectTemp.TopRight;
MathF.TransformDotVec(ref edge1, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge2, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge3, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge4, ref xDot, ref yDot);
// Using Per-Vertex Lighting? Calculate vertex light values
Vector4[] vertexLight = null;
if (!perPixel)
{
vertexLight = new Vector4[4];
Light.GetLightAtWorldPos(pos + new Vector3(edge1), out vertexLight[0], this.vertexTranslucency);
Light.GetLightAtWorldPos(pos + new Vector3(edge2), out vertexLight[1], this.vertexTranslucency);
Light.GetLightAtWorldPos(pos + new Vector3(edge3), out vertexLight[2], this.vertexTranslucency);
Light.GetLightAtWorldPos(pos + new Vector3(edge4), out vertexLight[3], this.vertexTranslucency);
}
Vector2.Multiply(ref edge1, scaleTemp, out edge1);
Vector2.Multiply(ref edge2, scaleTemp, out edge2);
Vector2.Multiply(ref edge3, scaleTemp, out edge3);
Vector2.Multiply(ref edge4, scaleTemp, out edge4);
// Using Per-Pixel Lighting? Pass objRotation Matrix via vertex attribute.
Vector4 objRotMat = Vector4.Zero;
if (perPixel)
objRotMat = new Vector4((float)Math.Cos(-rotation), -(float)Math.Sin(-rotation), (float)Math.Sin(-rotation), (float)Math.Cos(-rotation));
if (vertices == null || vertices.Length != 4) vertices = new VertexC1P3T4A4A1[4];
// Calculate UV coordinates
float left = uvRect.X;
float right = uvRect.RightX;
float top = uvRect.Y;
float bottom = uvRect.BottomY;
float nextLeft = uvRectNext.X;
float nextRight = uvRectNext.RightX;
float nextTop = uvRectNext.Y;
float nextBottom = uvRectNext.BottomY;
if ((this.flipMode & FlipMode.Horizontal) != FlipMode.None)
{
MathF.Swap(ref left, ref right);
MathF.Swap(ref nextLeft, ref nextRight);
}
if ((this.flipMode & FlipMode.Vertical) != FlipMode.None)
{
MathF.Swap(ref top, ref bottom);
MathF.Swap(ref nextTop, ref nextBottom);
}
// Directly pass World Position with each vertex, see note in Light.cs
vertices[0].Pos.X = posTemp.X + edge1.X;
vertices[0].Pos.Y = posTemp.Y + edge1.Y;
vertices[0].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[0].TexCoord.X = left;
vertices[0].TexCoord.Y = top;
vertices[0].TexCoord.Z = nextLeft;
vertices[0].TexCoord.W = nextTop;
vertices[0].Color = mainClr;
vertices[0].Attrib = perPixel ? objRotMat : vertexLight[0];
vertices[0].Attrib2 = curAnimFrameFade;
vertices[1].Pos.X = posTemp.X + edge2.X;
vertices[1].Pos.Y = posTemp.Y + edge2.Y;
vertices[1].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[1].TexCoord.X = left;
vertices[1].TexCoord.Y = bottom;
vertices[1].TexCoord.Z = nextLeft;
vertices[1].TexCoord.W = nextBottom;
vertices[1].Color = mainClr;
vertices[1].Attrib = perPixel ? objRotMat : vertexLight[1];
vertices[1].Attrib2 = curAnimFrameFade;
vertices[2].Pos.X = posTemp.X + edge3.X;
vertices[2].Pos.Y = posTemp.Y + edge3.Y;
vertices[2].Pos.Z = posTemp.Z + this.VertexZOffset;
vertices[2].TexCoord.X = right;
vertices[2].TexCoord.Y = bottom;
vertices[2].TexCoord.Z = nextRight;
vertices[2].TexCoord.W = nextBottom;
vertices[2].Color = mainClr;
vertices[2].Attrib = perPixel ? objRotMat : vertexLight[2];
//.........这里部分代码省略.........
开发者ID:ChrisLakeZA,项目名称:duality,代码行数:101,代码来源:LightingAnimSpriteRenderer.cs
示例17: RenderState
public RenderState(FormattedText parent)
{
this.parent = parent;
this.vertTextIndex = new int[this.parent.fonts != null ? this.parent.fonts.Length : 0];
this.font = (this.parent.fonts != null && this.parent.fonts.Length > 0) ? this.parent.fonts[0].Res : null;
this.color = ColorRgba.White;
this.lineAlign = parent.lineAlign;
this.PeekLineStats();
this.offset.X = this.lineBeginX;
}
开发者ID:ninja2003,项目名称:duality,代码行数:11,代码来源:FormattedText.cs
示例18: DrawTileHighlights
private static void DrawTileHighlights(Canvas canvas, ICmpTilemapRenderer renderer, Point2 origin, IReadOnlyGrid<bool> highlight, ColorRgba fillTint, ColorRgba outlineTint, TileHighlightMode mode, List<Vector2[]> outlineCache = null)
{
if (highlight.Width == 0 || highlight.Height == 0) return;
// Generate strippled line texture if not available yet
if (strippledLineTex == null)
{
PixelData pixels = new PixelData(8, 1);
for (int i = 0; i < pixels.Width / 2; i++)
pixels[i, 0] = ColorRgba.White;
for (int i = pixels.Width / 2; i < pixels.Width; i++)
pixels[i, 0] = ColorRgba.TransparentWhite;
using (Pixmap pixmap = new Pixmap(pixels))
{
strippledLineTex = new Texture(pixmap,
TextureSizeMode.Default,
TextureMagFilter.Nearest,
TextureMinFilter.Nearest,
TextureWrapMode.Repeat,
TextureWrapMode.Repeat,
TexturePixelFormat.Rgba);
}
}
BatchInfo defaultMaterial = new BatchInfo(DrawTechnique.Alpha, canvas.State.Material.MainColor);
BatchInfo strippleMaterial = new BatchInfo(DrawTechnique.Alpha, canvas.State.Material.MainColor, strippledLineTex);
bool uncertain = (mode & TileHighlightMode.Uncertain) != 0;
bool selection = (mode & TileHighlightMode.Selection) != 0;
Component component = renderer as Component;
Transform transform = component.GameObj.Transform;
Tilemap tilemap = renderer.ActiveTilemap;
Tileset tileset = tilemap != null ? tilemap.Tileset.Res : null;
Vector2 tileSize = tileset != null ? tileset.TileSize : Tileset.DefaultTileSize;
Rect localRect = renderer.LocalTilemapRect;
// Determine the object's local coordinate system (rotated, scaled) in world space
Vector2 worldAxisX = Vector2.UnitX;
Vector2 worldAxisY = Vector2.UnitY;
MathF.TransformCoord(ref worldAxisX.X, ref worldAxisX.Y, transform.Angle, transform.Scale);
MathF.TransformCoord(ref worldAxisY.X, ref worldAxisY.Y, transform.Angle, transform.Scale);
Vector2 localOriginPos = tileSize * origin;
Vector2 worldOriginPos = localOriginPos.X * worldAxisX + localOriginPos.Y * worldAxisY;
canvas.PushState();
{
// Configure the canvas so our shapes are properly rotated and scaled
canvas.State.TransformHandle = -localRect.TopLeft;
canvas.State.TransformAngle = transform.Angle;
canvas.State.TransformScale = new Vector2(transform.Scale);
// Fill all highlighted tiles that are currently visible
{
canvas.State.SetMaterial(defaultMaterial);
canvas.State.ColorTint = fillTint * ColorRgba.White.WithAlpha(selection ? 0.2f : 0.375f);
// Determine tile visibility
Vector2 worldTilemapOriginPos = localRect.TopLeft;
MathF.TransformCoord(ref worldTilemapOriginPos.X, ref worldTilemapOriginPos.Y, transform.Angle, transform.Scale);
TilemapCulling.TileInput cullingIn = new TilemapCulling.TileInput
{
// Remember: All these transform values are in world space
TilemapPos = transform.Pos + new Vector3(worldTilemapOriginPos) + new Vector3(worldOriginPos),
TilemapScale = transform.Scale,
TilemapAngle = transform.Angle,
TileCount = new Point2(highlight.Width, highlight.Height),
TileSize = tileSize
};
TilemapCulling.TileOutput cullingOut = TilemapCulling.GetVisibleTileRect(canvas.DrawDevice, cullingIn);
int renderedTileCount = cullingOut.VisibleTileCount.X * cullingOut.VisibleTileCount.Y;
// Draw all visible highlighted tiles
{
Point2 tileGridPos = cullingOut.VisibleTileStart;
Vector2 renderStartPos = worldOriginPos + tileGridPos.X * tileSize.X * worldAxisX + tileGridPos.Y * tileSize.Y * worldAxisY;;
Vector2 renderPos = renderStartPos;
Vector2 tileXStep = worldAxisX * tileSize.X;
Vector2 tileYStep = worldAxisY * tileSize.Y;
int lineMergeCount = 0;
int totalRects = 0;
for (int tileIndex = 0; tileIndex < renderedTileCount; tileIndex++)
{
bool current = highlight[tileGridPos.X, tileGridPos.Y];
if (current)
{
// Try to merge consecutive rects in the same line to reduce drawcalls / CPU load
bool hasNext = (tileGridPos.X + 1 < highlight.Width) && ((tileGridPos.X + 1 - cullingOut.VisibleTileStart.X) < cullingOut.VisibleTileCount.X);
bool next = hasNext ? highlight[tileGridPos.X + 1, tileGridPos.Y] : false;
if (next)
{
lineMergeCount++;
}
else
{
totalRects++;
canvas.FillRect(
transform.Pos.X + renderPos.X - lineMergeCount * tileXStep.X,
transform.Pos.Y + renderPos.Y - lineMergeCount * tileXStep.Y,
//.........这里部分代码省略.........
开发者ID:SirePi,项目名称:duality,代码行数:101,代码来源:TilemapEditorCamViewState.cs
示例19: PrepareVertices
protected void PrepareVertices(ref VertexC1P3T2[] vertices, IDrawDevice device, ColorRgba mainClr, Rect uvRect)
{
Vector3 posTemp = this.gameobj.Transform.Pos;
float scaleTemp = 1.0f;
device.PreprocessCoords(ref posTemp, ref scaleTemp);
Vector2 xDot, yDot;
MathF.GetTransformDotVec(this.GameObj.Transform.Angle, scaleTemp, out xDot, out yDot);
Rect rectTemp = this.rect.Transform(this.gameobj.Transform.Scale, this.gameobj.Transform.Scale);
Vector2 edge1 = rectTemp.TopLeft;
Vector2 edge2 = rectTemp.BottomLeft;
Vector2 edge3 = rectTemp.BottomRight;
Vector2 edge4 = rectTemp.TopRight;
MathF.TransformDotVec(ref edge1, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge2, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge3, ref xDot, ref yDot);
MathF.TransformDotVec(ref edge4, ref xDot, ref yDot);
if (vertices == null || vertices.Length != 4) vertices = new VertexC1P3T2[4];
vertices[0].SetVertex(posTemp.X + edge1.X,
posTemp.Y + edge1.Y,
posTemp.Z + this.VertexZOffset,
uvRect.X, uvRect.Y, mainClr);
vertices[1].SetVertex(posTemp.X + edge2.X,
posTemp.Y + edge2.Y,
posTemp.Z + this.VertexZOffset,
uvRect.X, uvRect.MaximumY, mainClr);
vertices[2].SetVertex(posTemp.X + edge3.X,
posTemp.Y + edge3.Y,
posTemp.Z + this.VertexZOffset,
uvRect.MaximumX, uvRect.MaximumY, mainClr);
vertices[3].SetVertex(posTemp.X + edge4.X,
posTemp.Y + edge4.Y,
posTemp.Z + this.VertexZOffset,
uvRect.MaximumX, uvRect.Y, mainClr);
if (this.pixelGrid)
{
vertices[0].Pos.X = MathF.Round(vertices[0].Pos.X);
vertices[1].Pos.X = MathF.Round(vertices[1].Pos.X);
vertices[2].Pos.X = MathF.Round(vertices[2].Pos.X);
vertices[3].Pos.X = MathF.Round(vertices[3].Pos.X);
if (MathF.RoundToInt(device.TargetSize.X) != (MathF.RoundToInt(device.TargetSize.X) / 2) * 2)
{
vertices[0].Pos.X += 0.5f;
vertices[1].Pos.X += 0.5f;
vertices[2].Pos.X += 0.5f;
vertices[3].Pos.X += 0.5f;
}
vertices[0].Pos.Y = MathF.Round(vertices[0].Pos.Y);
vertices[1].Pos.Y = MathF.Round(vertices[1].Pos.Y);
vertices[2].Pos.Y = MathF.Round(vertices[2].Pos.Y);
vertices[3].Pos.Y = MathF.Round(vertices[3].Pos.Y);
if (MathF.RoundToInt(device.TargetSize.Y) != (MathF.RoundToInt(device.TargetSize.Y) / 2) * 2)
{
vertices[0].Pos.Y += 0.5f;
vertices[1].Pos.Y += 0.5f;
vertices[2].Pos.Y += 0.5f;
vertices[3].Pos.Y += 0.5f;
}
}
}
开发者ID:nicstop,项目名称:duality,代码行数:71,代码来源:SpriteRenderer.cs
示例20: PrepareVerticesSmooth
protected void PrepareVertices
|
请发表评论