View Javadoc

1   package com.insanityengine.ghia.renderer.Edjo;
2   
3   import com.insanityengine.ghia.m3.Pt3;
4   
5   /*** 
6    * 
7    * <P>
8    * Edge class
9    * </P>
10   *
11   * $Header: /usr/local/cvsroot/ghia/src/java/com/insanityengine/ghia/renderer/Edjo/Edge.java,v 1.2 2005/03/26 05:06:38 brian Exp $
12   * 
13   * @author BrianHammond 
14   * 
15   */
16  public class Edge {
17  	
18  	/*** 
19  	 * 
20  	 * Constructor
21  	 * 
22  	 */
23  	public Edge() {
24  	}
25  
26  	/*** 
27  	 * 
28  	 * set
29  	 * 
30  	 * @param min
31  	 * @param max
32  	 * 
33  	 */
34  	public void set( Pt3 min, Pt3 max ) {
35  		
36  		if ( min.getY() > max.getY() ) {
37  			set( max, min );
38  			return;
39  		}
40  		
41  		miny = ( int ) min.getY();
42  		maxy = ( int ) max.getY();
43  		if ( maxy == miny ) {
44  			dy = 1;
45  		} else {
46  			dy = maxy - miny;
47  		}
48  
49  		minx = min.getX();
50  		minz = min.getZ();
51  		mins = min.getS();
52  		mint = min.getT();
53  
54  		maxx = max.getX();
55  
56  		dx = ( maxx - minx );
57  		dz = ( max.getZ() - minz );
58  		
59  		ds = ( max.getS() - mins );
60  		dt = ( max.getT() - mint );
61  	}
62  
63  	/*** 
64  	 * 
65  	 * hit
66  	 * 
67  	 * @param y
68  	 * @param hit
69  	 * 
70  	 * @return a boolean
71  	 * 
72  	 */
73  	public boolean hit( int y, Hit hit ) {
74  		if ( y < miny || y > maxy ) {
75  			return false;
76  		}
77  
78  		if ( miny == maxy ) {
79  			hit.me( this, 1, minx, maxx );
80  		} else {
81  			float when = when( y );
82  			hit.me( this, when, xAt( when ) );
83  		}
84  		return true;
85  	}
86  
87  	/*** 
88  	 * 
89  	 * getMin
90  	 * 
91  	 * @return a float
92  	 * 
93  	 */
94  	public float getMin() {
95  		return miny;
96  	}
97  
98  	/*** 
99  	 * 
100 	 * getMax
101 	 * 
102 	 * @return a float
103 	 * 
104 	 */
105 	public float getMax() {
106 		return maxy;
107 	}
108 
109 	/*** 
110 	 * 
111 	 * when
112 	 * 
113 	 * @param y
114 	 * 
115 	 * @return a float
116 	 * 
117 	 */
118 	public float when( int y ) {
119 		return ( y - miny ) / dy;
120 	}
121 
122 	/*** 
123 	 * 
124 	 * xWhen
125 	 * 
126 	 * @param y
127 	 * 
128 	 * @return a float
129 	 * 
130 	 */
131 	public float xWhen( int y ) {
132 		return xAt( when( y ) );
133 	}
134 
135 	/*** 
136 	 * 
137 	 * tex
138 	 * 
139 	 * @param hit
140 	 * 
141 	 */
142 	public void tex( Hit hit ) {
143 		hit.set( 
144 			this,
145 			hit.when,
146 			mins + hit.when * ds,
147 			mint + hit.when * dt
148 		);
149 	}
150 
151 	/*** 
152 	 * 
153 	 * xAt
154 	 * 
155 	 * @param when
156 	 * 
157 	 * @return a float
158 	 * 
159 	 */
160 	public final float xAt( float when ) {
161 		return minx + when * dx;
162 	}
163 	
164 	/*** 
165 	 * 
166 	 * zAt
167 	 * 
168 	 * @param when
169 	 * 
170 	 * @return a float
171 	 * 
172 	 */
173 	public final float zAt( float when ) {
174 		return minz + when * dz;
175 	}
176 
177 	/*** 
178 	 * 
179 	 * sAt
180 	 * 
181 	 * @param when
182 	 * 
183 	 * @return a float
184 	 * 
185 	 */
186 	public final float sAt( float when ) {
187 		return mins + when * ds;
188 	}
189 
190 	/*** 
191 	 * 
192 	 * tAt
193 	 * 
194 	 * @param when
195 	 * 
196 	 * @return a float
197 	 * 
198 	 */
199 	public final float tAt( float when ) {
200 		return mint + when * dt;
201 	}
202 
203 	///////////
204 	
205 	private float dx, minx, maxx;
206 	private float dy, miny, maxy;
207 
208 	private float dz, minz;
209 
210 	private float ds, mins;
211 	private float dt, mint;
212 };
213 
214 /***
215  *
216  * $Log: Edge.java,v $
217  * Revision 1.2  2005/03/26 05:06:38  brian
218  * refactor
219  *
220  *
221  */