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 */