| 1196 | #define STEPSIZE .01f |
| 1197 | #define STEPSIZE_MIN .1f |
| 1198 | void RenderFloatingTrig(room *rp, face *fp) { |
| 1199 | if (!Render_floating_triggers) |
| 1200 | return; |
| 1201 | vector leftvec, rightvec; |
| 1202 | vector left, right; |
| 1203 | vector left_step, right_step; |
| 1204 | int n_steps, i, j; |
| 1205 | g3Point p3; |
| 1206 | float stepsize; |
| 1207 | left = rp->verts[fp->face_verts[0]]; |
| 1208 | right = rp->verts[fp->face_verts[1]]; |
| 1209 | g3_RotatePoint(&p3, &left); |
| 1210 | stepsize = STEPSIZE * p3.p3_z; |
| 1211 | if (stepsize < STEPSIZE_MIN) |
| 1212 | stepsize = STEPSIZE_MIN; |
| 1213 | leftvec = rp->verts[fp->face_verts[3]] - rp->verts[fp->face_verts[0]]; |
| 1214 | rightvec = rp->verts[fp->face_verts[2]] - rp->verts[fp->face_verts[1]]; |
| 1215 | n_steps = (vm_GetMagnitude(&leftvec) / stepsize + 0.5) + 1; |
| 1216 | left_step = leftvec / n_steps; |
| 1217 | right_step = rightvec / n_steps; |
| 1218 | for (i = 0; i < n_steps; i++) { |
| 1219 | vector p; |
| 1220 | g3Point p3; |
| 1221 | vector crossvec, cross_step; |
| 1222 | int n_crosssteps; |
| 1223 | |
| 1224 | crossvec = right - left; |
| 1225 | n_crosssteps = (vm_GetMagnitude(&crossvec) / stepsize + 0.5) + 1; |
| 1226 | cross_step = crossvec / n_steps; |
| 1227 | p = left; |
| 1228 | for (j = 0; j < n_crosssteps; j++) { |
| 1229 | if (g3_RotatePoint(&p3, &p) == 0) { // on screen |
| 1230 | g3_ProjectPoint(&p3); |
| 1231 | rend_SetPixel(GR_RGB(255, 100, 100), p3.p3_sx, p3.p3_sy); |
| 1232 | } |
| 1233 | p += cross_step; |
| 1234 | } |
| 1235 | left += left_step; |
| 1236 | right += right_step; |
| 1237 | } |
| 1238 | } |
| 1239 | #endif // ifdef EDITOR |
| 1240 | void RenderSpecularFaces(room *rp) { |
| 1241 | ASSERT(Num_specular_faces_to_render > 0); |
no test coverage detected