Ejemplo n.º 1
0
        public RGBA_Bytes gradient(RGBA_Bytes c_8, double k)
        {
            RGBA_Floats c = c_8.GetAsRGBA_Floats();
            RGBA_Floats ret;

            ret.red   = (float)(red + (c.red - red) * k);
            ret.green = (float)(green + (c.green - green) * k);
            ret.blue  = (float)(blue + (c.blue - blue) * k);
            ret.alpha = (float)(alpha + (c.alpha - alpha) * k);
            return(ret.GetAsRGBA_Bytes());
        }
Ejemplo n.º 2
0
 public override void Render(IVertexSource vertexSource, int pathIndexToRender, RGBA_Bytes colorBytes)
 {
     rasterizer.reset();
     Affine transform = GetTransform();
     if (!transform.is_identity())
     {
         vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
     }
     rasterizer.add_path(vertexSource, pathIndexToRender);
     if (destImageByte != null)
     {
         scanlineRenderer.render_scanlines_aa_solid(destImageByte, rasterizer, m_ScanlineCache, colorBytes);
         DestImage.MarkImageChanged();
     }
     else
     {
         scanlineRenderer.RenderSolid(destImageFloat, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Floats());
         destImageFloat.MarkImageChanged();
     }
 }
Ejemplo n.º 3
0
		public RGBA_Bytes gradient(RGBA_Bytes c_8, double k)
		{
			RGBA_Floats c = c_8.GetAsRGBA_Floats();
			RGBA_Floats ret;
			ret.red = (float)(red + (c.red - red) * k);
			ret.green = (float)(green + (c.green - green) * k);
			ret.blue = (float)(blue + (c.blue - blue) * k);
			ret.alpha = (float)(alpha + (c.alpha - alpha) * k);
			return ret.GetAsRGBA_Bytes();
		}
Ejemplo n.º 4
0
		private void AddTestMesh(List<MeshGroup> meshGroups)
		{
			if (meshGroups != null)
			{
				AxisAlignedBoundingBox totalMeshBounds = GetAxisAlignedBoundingBox(meshGroups);
				loadedMeshGroups = meshGroups;
				Vector3 meshCenter = totalMeshBounds.Center;
				foreach (MeshGroup meshGroup in meshGroups)
				{
					meshGroup.Translate(-meshCenter);
				}

				ScaleMeshToView(loadedMeshGroups);

				RGBA_Bytes partColor = new RGBA_Bytes(0, 130, 153);
				partColor = RGBA_Bytes.White;
				IPrimitive bvhCollection = MeshToBVH.Convert(loadedMeshGroups, new SolidMaterial(partColor.GetAsRGBA_Floats(), .01, 0.0, 2.0));

				renderCollection.Add(bvhCollection);
			}
		}
Ejemplo n.º 5
0
		public void DrawTo(Graphics2D graphics2D, Mesh meshToDraw, RGBA_Bytes partColorIn, double minZ, double maxZ)
		{
			RGBA_Floats partColor = partColorIn.GetAsRGBA_Floats();
			graphics2D.Rasterizer.gamma(new gamma_power(.3));
			RenderPoint[] points = new RenderPoint[3] { new RenderPoint(), new RenderPoint(), new RenderPoint() };

			foreach (Face face in meshToDraw.Faces)
			{
				int i = 0;
				Vector3 normal = Vector3.TransformVector(face.normal, trackballTumbleWidget.ModelviewMatrix).GetNormal();
				if (normal.z > 0)
				{
					foreach (FaceEdge faceEdge in face.FaceEdges())
					{
						points[i].position = trackballTumbleWidget.GetScreenPosition(faceEdge.firstVertex.Position);

						Vector3 transformedPosition = Vector3.TransformPosition(faceEdge.firstVertex.Position, trackballTumbleWidget.ModelviewMatrix);
						points[i].z = transformedPosition.z;
						i++;
					}

					RGBA_Floats polyDrawColor = new RGBA_Floats();
					double L = Vector3.Dot(lightNormal, normal);
					if (L > 0.0f)
					{
						polyDrawColor = partColor * lightIllumination * L;
					}

					polyDrawColor = RGBA_Floats.ComponentMax(polyDrawColor, partColor * ambiantIllumination);
					for (i = 0; i < 3; i++)
					{
						double ratio = (points[i].z - minZ) / (maxZ - minZ);
						int ratioInt16 = (int)(ratio * 65536);
						points[i].color = new RGBA_Bytes(polyDrawColor.Red0To255, ratioInt16 >> 8, ratioInt16 & 0xFF);
					}


#if true
					scanline_unpacked_8 sl = new scanline_unpacked_8();
					ScanlineRasterizer ras = new ScanlineRasterizer();
					render_gouraud(graphics2D.DestImage, sl, ras, points);
#else
					IRecieveBlenderByte oldBlender = graphics2D.DestImage.GetRecieveBlender();
					graphics2D.DestImage.SetRecieveBlender(new BlenderZBuffer());
					graphics2D.Render(polygonProjected, renderColor);
					graphics2D.DestImage.SetRecieveBlender(oldBlender);
#endif

					byte[] buffer = graphics2D.DestImage.GetBuffer();
					int pixels = graphics2D.DestImage.Width * graphics2D.DestImage.Height;
					for (int pixelIndex = 0; pixelIndex < pixels; pixelIndex++)
					{
						buffer[pixelIndex * 4 + ImageBuffer.OrderR] = buffer[pixelIndex * 4 + ImageBuffer.OrderR];
						buffer[pixelIndex * 4 + ImageBuffer.OrderG] = buffer[pixelIndex * 4 + ImageBuffer.OrderR];
						buffer[pixelIndex * 4 + ImageBuffer.OrderB] = buffer[pixelIndex * 4 + ImageBuffer.OrderR];
					}
				}
			}
		}
Ejemplo n.º 6
0
        public override void Render(IVertexSource vertexSource, int pathIndexToRender, RGBA_Bytes colorBytes)
        {
            rasterizer.reset();
            Affine transform = GetTransform();

            if (!transform.is_identity())
            {
                vertexSource = new VertexSourceApplyTransform(vertexSource, transform);
            }
            rasterizer.add_path(vertexSource, pathIndexToRender);
            if (destImageByte != null)
            {
                scanlineRenderer.render_scanlines_aa_solid(destImageByte, rasterizer, m_ScanlineCache, colorBytes);
                DestImage.MarkImageChanged();
            }
            else
            {
                scanlineRenderer.RenderSolid(destImageFloat, rasterizer, m_ScanlineCache, colorBytes.GetAsRGBA_Floats());
                destImageFloat.MarkImageChanged();
            }
        }
Ejemplo n.º 7
0
		public void DrawTo(Graphics2D graphics2D, Mesh meshToDraw, RGBA_Bytes partColorIn, double minZ, double maxZ)
		{
			RGBA_Floats partColor = partColorIn.GetAsRGBA_Floats();
			graphics2D.Rasterizer.gamma(new gamma_power(.3));
			PathStorage polygonProjected = new PathStorage();

			foreach (Face face in meshToDraw.Faces)
			{
				double averageZ = 0;
				Vector3 normal = Vector3.TransformVector(face.normal, trackballTumbleWidget.ModelviewMatrix).GetNormal();
				if (normal.z > 0)
				{
					polygonProjected.remove_all();
					bool first = true;
					foreach (FaceEdge faceEdge in face.FaceEdges())
					{
						Vector2 screenPosition = trackballTumbleWidget.GetScreenPosition(faceEdge.firstVertex.Position);
						if (first)
						{
							polygonProjected.MoveTo(screenPosition.x, screenPosition.y);
							first = false;
						}
						else
						{
							polygonProjected.LineTo(screenPosition.x, screenPosition.y);
						}

						Vector3 transsformedPosition = Vector3.TransformPosition(faceEdge.firstVertex.Position, trackballTumbleWidget.ModelviewMatrix);
						averageZ += transsformedPosition.z;
					}

					averageZ /= 3;

					RGBA_Floats polyDrawColor = new RGBA_Floats();
					double L = Vector3.Dot(lightNormal, normal);
					if (L > 0.0f)
					{
						polyDrawColor = partColor * lightIllumination * L;
					}

					polyDrawColor = RGBA_Floats.ComponentMax(polyDrawColor, partColor * ambiantIllumination);
					double ratio = (averageZ - minZ) / (maxZ - minZ);
					int ratioInt16 = (int)(ratio * 65536);

					//RGBA_Bytes renderColor = new RGBA_Bytes(polyDrawColor.Red0To255, ratioInt16 >> 8, ratioInt16 & 256);
					RGBA_Bytes renderColor = new RGBA_Bytes(ratioInt16 >> 8, ratioInt16 >> 8, ratioInt16 >> 8);

					//IRecieveBlenderByte oldBlender = graphics2D.DestImage.GetRecieveBlender();
					//graphics2D.DestImage.SetRecieveBlender(new BlenderZBuffer());
					graphics2D.Render(polygonProjected, renderColor);
					//graphics2D.DestImage.SetRecieveBlender(oldBlender);

					byte[] buffer = graphics2D.DestImage.GetBuffer();
					int pixels = graphics2D.DestImage.Width * graphics2D.DestImage.Height;
					for (int i = 0; i < pixels; i++)
					{
						//buffer[i * 4 + 0] = buffer[i * 4 + 2];
						//buffer[i * 4 + 1] = buffer[i * 4 + 2];
					}
				}
			}
		}