generated from sigonasr2/JavaProjectTemplate
	FillTexturePolygon bugs fixed
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
		
							parent
							
								
									f307b36e76
								
							
						
					
					
						commit
						519ce6d10a
					
				| @ -9,6 +9,7 @@ import sig.engine.Panel; | ||||
| import sig.engine.Point; | ||||
| import sig.engine.Sprite; | ||||
| import sig.engine.Transform; | ||||
| import sig.engine.PolygonStructure; | ||||
| 
 | ||||
| import java.awt.event.KeyEvent; | ||||
| import java.util.List; | ||||
| @ -69,25 +70,28 @@ public class JavaProjectTemplate { | ||||
| 		game.Draw_Text(10,40,"Mouse X: "+Mouse.x+"  Mouse Y:"+Mouse.y,Font.PROFONT_12); //Draw Mouse coordinates in tiny font | ||||
| 		game.Draw_Text_Ext(10,52,"Hello World 2!",Font.PROFONT_36,Color.MAGENTA); //Draw in larger font | ||||
| 
 | ||||
| 		game.Fill_Triangle(160,160,190,190,50,250,new Color(255,0,0,150)); //Draw a colored triangle | ||||
| 		//game.Fill_Triangle(160,160,190,190,50,250,new Color(255,0,0,150)); //Draw a colored triangle | ||||
| 
 | ||||
| 		game.FillTexturedTriangle( //Define the uv tex coords of a triangle and a sprite and draw a texture onto it | ||||
| 
 | ||||
| 		game.FillTexturedPolygon( //Define the uv tex coords of a triangle and a sprite and draw a texture onto it | ||||
| 			List.of( | ||||
| 				new Point<Double>(400d,400d), | ||||
| 				new Point<Double>(400d,550d), | ||||
| 				new Point<Double>(550d,550d) | ||||
| 				new Point<Double>(600d,400d), | ||||
| 				new Point<Double>(600d,550d), | ||||
| 				new Point<Double>(750d,550d), | ||||
| 				new Point<Double>(750d,0d) | ||||
| 			),  | ||||
| 			List.of( | ||||
| 				new Point<Double>(0d,0d), | ||||
| 				new Point<Double>(0d,1d), | ||||
| 				new Point<Double>(1d,1d) | ||||
| 			) | ||||
| 			,  | ||||
| 				new Point<Double>(1d,1d), | ||||
| 				new Point<Double>(1d,0d) | ||||
| 			),  | ||||
| 			List.of( | ||||
| 				new Color(0,0,0,0), | ||||
| 				new Color(0,0,0,255), | ||||
| 				Color.WHITE, | ||||
| 				Color.RED | ||||
| 			), bookSpr); | ||||
| 				Color.RED, | ||||
| 				Color.WHITE | ||||
| 			), bookSpr, PolygonStructure.FAN); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void main(String[] args) { | ||||
|  | ||||
| @ -771,17 +771,16 @@ public class Panel extends JPanel implements Runnable,KeyListener { | ||||
| 
 | ||||
| 	public void FillTexturedTriangle(List<Point<Double>>vPoints,List<Point<Double>>vTex,List<Color>vColour,Sprite sprTex){ | ||||
| 		try { | ||||
| 			Point<Double> p1 = vPoints.get(0); | ||||
| 			Point<Double> p2 = vPoints.get(1); | ||||
| 			Point<Double> p3 = vPoints.get(2); | ||||
| 			vColour=new ArrayList<Color>(vColour); | ||||
| 			Point<Double> p1 = vPoints.get(0).clone(); | ||||
| 			Point<Double> p2 = vPoints.get(1).clone(); | ||||
| 			Point<Double> p3 = vPoints.get(2).clone(); | ||||
| 
 | ||||
| 			Double tempP; | ||||
| 			Color tempC; | ||||
| 
 | ||||
| 			if (p2.y < p1.y){tempP=p1.y;p1.y=p2.y;p2.y=tempP;tempP=p1.x;p1.x=p2.x;p2.x=tempP;tempP=vTex.get(0).x;vTex.get(0).x=vTex.get(1).x;vTex.get(1).x=tempP;vTex.get(0).y=vTex.get(1).y;vTex.get(1).y=tempP;tempC=vColour.get(0).clone();vColour.set(0,vColour.get(1));vColour.set(1,tempC);} | ||||
| 			if (p3.y < p1.y){tempP=p1.y;p1.y=p3.y;p3.y=tempP;tempP=p1.x;p1.x=p3.x;p3.x=tempP;tempP=vTex.get(0).x;vTex.get(0).x=vTex.get(2).x;vTex.get(2).x=tempP;vTex.get(0).y=vTex.get(2).y;vTex.get(2).y=tempP;tempC=vColour.get(0).clone();vColour.set(0,vColour.get(2));vColour.set(2,tempC);} | ||||
| 			if (p3.y < p2.y){tempP=p2.y;p2.y=p3.y;p2.y=tempP;tempP=p2.x;p2.x=p3.x;p3.x=tempP;tempP=vTex.get(1).x;vTex.get(1).x=vTex.get(2).x;vTex.get(2).x=tempP;vTex.get(1).y=vTex.get(2).y;vTex.get(2).y=tempP;tempC=vColour.get(1).clone();vColour.set(1,vColour.get(2));vColour.set(2,tempC);} | ||||
| 
 | ||||
| 			if (p2.y < p1.y){tempP=(double)p1.y;p1.y=p2.y;p2.y=tempP;tempP=(double)p1.x;p1.x=p2.x;p2.x=tempP;tempP=vTex.get(0).x;vTex.get(0).x=vTex.get(1).x;vTex.get(1).x=tempP;vTex.get(0).y=vTex.get(1).y;vTex.get(1).y=tempP;tempC=vColour.get(0);vColour.set(0,vColour.get(1));vColour.set(1,tempC);} | ||||
| 			if (p3.y < p1.y){tempP=(double)p1.y;p1.y=p3.y;p3.y=tempP;tempP=(double)p1.x;p1.x=p3.x;p3.x=tempP;tempP=vTex.get(0).x;vTex.get(0).x=vTex.get(2).x;vTex.get(2).x=tempP;vTex.get(0).y=vTex.get(2).y;vTex.get(2).y=tempP;tempC=vColour.get(0);vColour.set(0,vColour.get(2));vColour.set(2,tempC);} | ||||
| 			if (p3.y < p2.y){tempP=(double)p2.y;p2.y=p3.y;p3.y=tempP;tempP=(double)p2.x;p2.x=p3.x;p3.x=tempP;tempP=vTex.get(1).x;vTex.get(1).x=vTex.get(2).x;vTex.get(2).x=tempP;vTex.get(1).y=vTex.get(2).y;vTex.get(2).y=tempP;tempC=vColour.get(1);vColour.set(1,vColour.get(2));vColour.set(2,tempC);} | ||||
| 			Point<Integer> dPos1 = new Point<Integer>((int)(p2.x-p1.x),(int)(p2.y-p1.y)); | ||||
| 			Point<Integer> dTex1 = new Point<Integer>((int)(vTex.get(1).x-vTex.get(0).x),(int)(vTex.get(1).y-vTex.get(0).y)); | ||||
| 			int dcr1 = vColour.get(1).r - vColour.get(0).r; | ||||
| @ -869,7 +868,7 @@ public class Panel extends JPanel implements Runnable,KeyListener { | ||||
| 							vColour.get(0).b + (int)((float)(i - p1.y) * dcb2_step), vColour.get(0).a + (int)((float)(i - p1.y) * dca2_step)); | ||||
| 						int temp; | ||||
| 						Point<Float> tempF; | ||||
| 						if (ax > bx) {temp=ax;ax=bx;bx=temp;tempF=tex_s.clone();tex_s=tex_e.clone();tex_e=tempF;tempC=col_e;tempC=col_s.clone();col_s=col_e;col_e=tempC;} | ||||
| 						if (ax > bx) {temp=ax;ax=bx;bx=temp;tempF=tex_s.clone();tex_s=tex_e.clone();tex_e=tempF;tempC=col_s.clone();col_s=col_e.clone();col_e=tempC;} | ||||
| 
 | ||||
| 						float tstep = 1.0f / ((float)(bx - ax)); | ||||
| 						float t = 0.0f; | ||||
| @ -968,6 +967,50 @@ public class Panel extends JPanel implements Runnable,KeyListener { | ||||
| 			Draw(x, y, col); | ||||
| 	} | ||||
| 
 | ||||
| 	public void FillTexturedPolygon(List<Point<Double>>vPoints,List<Point<Double>>vTex,List<Color>vColour,Sprite sprTex,PolygonStructure structure) { | ||||
| 		try { | ||||
| 			if (vPoints.size() < 3 || vTex.size() < 3 || vColour.size() < 3) | ||||
| 				return; | ||||
| 
 | ||||
| 			if (structure == PolygonStructure.LIST) | ||||
| 			{			 | ||||
| 				for (int tri = 0; tri < vPoints.size() / 3; tri++) | ||||
| 				{ | ||||
| 					List<Point<Double>> vP = new ArrayList<Point<Double>>(List.of(vPoints.get(tri * 3 + 0), vPoints.get(tri * 3 + 1), vPoints.get(tri * 3 + 2))); | ||||
| 					List<Point<Double>> vT = new ArrayList<Point<Double>>(List.of(vTex.get(tri * 3 + 0), vTex.get(tri * 3 + 1), vTex.get(tri * 3 + 2))); | ||||
| 					List<Color> vC = new ArrayList<Color>(List.of(vColour.get(tri * 3 + 0), vColour.get(tri * 3 + 1), vColour.get(tri * 3 + 2))); | ||||
| 					FillTexturedTriangle(vP, vT, vC, sprTex); | ||||
| 				} | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			if (structure == PolygonStructure.STRIP) | ||||
| 			{ | ||||
| 				for (int tri = 2; tri < vPoints.size(); tri++) | ||||
| 				{ | ||||
| 					List<Point<Double>> vP = new ArrayList<Point<Double>>(List.of(vPoints.get(tri - 2), vPoints.get(tri - 1), vPoints.get(tri))); | ||||
| 					List<Point<Double>> vT = new ArrayList<Point<Double>>(List.of(vTex.get(tri - 2), vTex.get(tri - 1), vTex.get(tri))); | ||||
| 					List<Color> vC = new ArrayList<Color>(List.of(vColour.get(tri - 2), vColour.get(tri - 1), vColour.get(tri))); | ||||
| 					FillTexturedTriangle(vP, vT, vC, sprTex); | ||||
| 				} | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			if (structure == PolygonStructure.FAN) | ||||
| 			{ | ||||
| 				for (int tri = 2; tri < vPoints.size(); tri++) | ||||
| 				{ | ||||
| 					List<Point<Double>> vP; | ||||
| 					vP = new ArrayList<Point<Double>>(List.of(vPoints.get(0).clone(), vPoints.get(tri - 1).clone(), vPoints.get(tri).clone())); | ||||
| 					List<Point<Double>> vT = new ArrayList<Point<Double>>(List.of(vTex.get(0).clone(), vTex.get(tri - 1).clone(), vTex.get(tri).clone())); | ||||
| 					List<Color> vC = new ArrayList<Color>(List.of(vColour.get(0).clone(), vColour.get(tri - 1).clone(), vColour.get(tri).clone())); | ||||
| 					FillTexturedTriangle(vP, vT, vC, sprTex); | ||||
| 				} | ||||
| 				return; | ||||
| 			} | ||||
| 		} catch (CloneNotSupportedException e) {} | ||||
| 	} | ||||
| 
 | ||||
| 	Color ColorLerp(Color c1, Color c2, float t) | ||||
| 	{ return new Color((int)((c2.r * t) + c1.r * (1.0f - t)),(int)((c2.g * t) + c1.g * (1.0f - t)),(int)((c2.b * t) + c1.b * (1.0f - t)),(int)((c2.a * t) + c1.a * (1.0f - t))); } | ||||
| 
 | ||||
|  | ||||
| @ -39,7 +39,7 @@ public class Point<T>{ | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	protected Point<T> clone() throws CloneNotSupportedException { | ||||
|     public Point<T> clone() throws CloneNotSupportedException { | ||||
| 		return new Point<T>(x,y); | ||||
| 	} | ||||
| } | ||||
|  | ||||
							
								
								
									
										7
									
								
								src/sig/engine/PolygonStructure.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/sig/engine/PolygonStructure.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| package sig.engine; | ||||
| 
 | ||||
| public enum PolygonStructure{ | ||||
| 	LIST, | ||||
| 	STRIP, | ||||
| 	FAN, | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user