.. | .. |
---|
191 | 191 | |
---|
192 | 192 | /// INTERFACE |
---|
193 | 193 | |
---|
| 194 | + public javax.media.opengl.GL GetGL0() |
---|
| 195 | + { |
---|
| 196 | + return null; |
---|
| 197 | + } |
---|
| 198 | + |
---|
| 199 | + public int GenList() |
---|
| 200 | + { |
---|
| 201 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 202 | + return gl.glGenLists(1); |
---|
| 203 | + } |
---|
| 204 | + |
---|
| 205 | + public void NewList(int id) |
---|
| 206 | + { |
---|
| 207 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 208 | + gl.glNewList(id, gl.GL_COMPILE); //_AND_EXECUTE); |
---|
| 209 | + } |
---|
| 210 | + |
---|
| 211 | + public void CallList(int id) |
---|
| 212 | + { |
---|
| 213 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 214 | + gl.glCallList(id); |
---|
| 215 | + } |
---|
| 216 | + |
---|
| 217 | + public void EndList() |
---|
| 218 | + { |
---|
| 219 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 220 | + gl.glEndList(); |
---|
| 221 | + } |
---|
| 222 | + |
---|
194 | 223 | public boolean IsBoxMode() |
---|
195 | 224 | { |
---|
196 | 225 | return BOXMODE; |
---|
.. | .. |
---|
1059 | 1088 | gl.glMatrixMode(gl.GL_MODELVIEW); |
---|
1060 | 1089 | } |
---|
1061 | 1090 | |
---|
| 1091 | + public void DrawBox(cVector min, cVector max) |
---|
| 1092 | + { |
---|
| 1093 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 1094 | + gl.glBegin(gl.GL_LINES); |
---|
| 1095 | + |
---|
| 1096 | + gl.glVertex3d(min.x, min.y, min.z); |
---|
| 1097 | + gl.glVertex3d(min.x, min.y, max.z); |
---|
| 1098 | + gl.glVertex3d(min.x, min.y, min.z); |
---|
| 1099 | + gl.glVertex3d(min.x, max.y, min.z); |
---|
| 1100 | + gl.glVertex3d(min.x, min.y, min.z); |
---|
| 1101 | + gl.glVertex3d(max.x, min.y, min.z); |
---|
| 1102 | + |
---|
| 1103 | + gl.glVertex3d(max.x, max.y, max.z); |
---|
| 1104 | + gl.glVertex3d(min.x, max.y, max.z); |
---|
| 1105 | + gl.glVertex3d(max.x, max.y, max.z); |
---|
| 1106 | + gl.glVertex3d(max.x, min.y, max.z); |
---|
| 1107 | + gl.glVertex3d(max.x, max.y, max.z); |
---|
| 1108 | + gl.glVertex3d(max.x, max.y, min.z); |
---|
| 1109 | + |
---|
| 1110 | + gl.glEnd(); |
---|
| 1111 | + } |
---|
| 1112 | + |
---|
| 1113 | + public void DrawGeometry(BoundaryRep bRep, boolean flipV, boolean selectmode) |
---|
| 1114 | + { |
---|
| 1115 | + int[] strips = bRep.getRawIndices(); |
---|
| 1116 | + |
---|
| 1117 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 1118 | + |
---|
| 1119 | + // TRIANGLE STRIP ARRAY |
---|
| 1120 | + if (bRep.trimmed) |
---|
| 1121 | + { |
---|
| 1122 | + float[] v = bRep.getRawVertices(); |
---|
| 1123 | + float[] n = bRep.getRawNormals(); |
---|
| 1124 | + float[] c = bRep.getRawColors(); |
---|
| 1125 | + float[] uv = bRep.getRawUVMap(); |
---|
| 1126 | + |
---|
| 1127 | + int count2 = 0; |
---|
| 1128 | + int count3 = 0; |
---|
| 1129 | + |
---|
| 1130 | + if (n.length > 0) |
---|
| 1131 | + { |
---|
| 1132 | + for (int i = 0; i < strips.length; i++) |
---|
| 1133 | + { |
---|
| 1134 | + gl.glBegin(gl.GL_TRIANGLE_STRIP); |
---|
| 1135 | + |
---|
| 1136 | + /* |
---|
| 1137 | + boolean locked = false; |
---|
| 1138 | + float eps = 0.1f; |
---|
| 1139 | + boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice |
---|
| 1140 | + |
---|
| 1141 | + int dot = 0; |
---|
| 1142 | + |
---|
| 1143 | + if ((dot&1) == 0) |
---|
| 1144 | + dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1; |
---|
| 1145 | + |
---|
| 1146 | + if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) |
---|
| 1147 | + gl.glTexCoord2f((float) qv.s, (float) qv.t); |
---|
| 1148 | + else |
---|
| 1149 | + { |
---|
| 1150 | + locked = true; |
---|
| 1151 | + gl.glTexCoord2f((float) pv.s, (float) pv.t); |
---|
| 1152 | + } |
---|
| 1153 | + //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z); |
---|
| 1154 | + gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z); |
---|
| 1155 | + if (hasnorm) |
---|
| 1156 | + { |
---|
| 1157 | + //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z); |
---|
| 1158 | + gl.glNormal3f((float) rv.norm.x, (float) rv.norm.y, (float) rv.norm.z); |
---|
| 1159 | + } |
---|
| 1160 | + |
---|
| 1161 | + if ((dot&4) == 0) |
---|
| 1162 | + dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4; |
---|
| 1163 | + |
---|
| 1164 | + if (wrap || !locked && (dot&8) != 0) |
---|
| 1165 | + gl.glTexCoord2f((float) rv.s, (float) rv.t); |
---|
| 1166 | + else |
---|
| 1167 | + gl.glTexCoord2f((float) pv.s, (float) pv.t); |
---|
| 1168 | + |
---|
| 1169 | + f.dot = dot; |
---|
| 1170 | + */ |
---|
| 1171 | + |
---|
| 1172 | + if (!selectmode) |
---|
| 1173 | + { |
---|
| 1174 | + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) |
---|
| 1175 | + { |
---|
| 1176 | + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); |
---|
| 1177 | + } else |
---|
| 1178 | + { |
---|
| 1179 | + gl.glNormal3f(0, 0, 1); |
---|
| 1180 | + } |
---|
| 1181 | + |
---|
| 1182 | + if (c != null) |
---|
| 1183 | + //System.out.println("glcolor = " + c[count3] + ", " + c[count3+1] + ", " + c[count3+2]); |
---|
| 1184 | + { |
---|
| 1185 | + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); |
---|
| 1186 | + } |
---|
| 1187 | + } |
---|
| 1188 | + if (flipV) |
---|
| 1189 | + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
---|
| 1190 | + else |
---|
| 1191 | + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
---|
| 1192 | + //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); |
---|
| 1193 | + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
---|
| 1194 | + |
---|
| 1195 | + count2 += 2; |
---|
| 1196 | + count3 += 3; |
---|
| 1197 | + if (!selectmode) |
---|
| 1198 | + { |
---|
| 1199 | + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) |
---|
| 1200 | + { |
---|
| 1201 | + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); |
---|
| 1202 | + } else |
---|
| 1203 | + { |
---|
| 1204 | + gl.glNormal3f(0, 0, 1); |
---|
| 1205 | + } |
---|
| 1206 | + if (c != null) |
---|
| 1207 | + { |
---|
| 1208 | + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); |
---|
| 1209 | + } |
---|
| 1210 | + } |
---|
| 1211 | + if (flipV) |
---|
| 1212 | + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
---|
| 1213 | + else |
---|
| 1214 | + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
---|
| 1215 | + //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); |
---|
| 1216 | + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
---|
| 1217 | + |
---|
| 1218 | + count2 += 2; |
---|
| 1219 | + count3 += 3; |
---|
| 1220 | + for (int j = 0; j < strips[i] - 2; j++) |
---|
| 1221 | + { |
---|
| 1222 | + //gl.glTexCoord2d(...); |
---|
| 1223 | + if (!selectmode) |
---|
| 1224 | + { |
---|
| 1225 | + if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) |
---|
| 1226 | + { |
---|
| 1227 | + gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); |
---|
| 1228 | + } else |
---|
| 1229 | + { |
---|
| 1230 | + gl.glNormal3f(0, 0, 1); |
---|
| 1231 | + } |
---|
| 1232 | + if (c != null) |
---|
| 1233 | + { |
---|
| 1234 | + gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); |
---|
| 1235 | + } |
---|
| 1236 | + } |
---|
| 1237 | + |
---|
| 1238 | + if (flipV) |
---|
| 1239 | + gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); |
---|
| 1240 | + else |
---|
| 1241 | + gl.glTexCoord2f(uv[count2], uv[count2 + 1]); |
---|
| 1242 | + //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]); |
---|
| 1243 | + gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); |
---|
| 1244 | + count2 += 2; |
---|
| 1245 | + count3 += 3; |
---|
| 1246 | + } |
---|
| 1247 | + |
---|
| 1248 | + gl.glEnd(); |
---|
| 1249 | + } |
---|
| 1250 | + } |
---|
| 1251 | + |
---|
| 1252 | + assert count3 == v.length; |
---|
| 1253 | + } |
---|
| 1254 | + else // !trimmed |
---|
| 1255 | + { |
---|
| 1256 | + int count = 0; |
---|
| 1257 | + for (int i = 0; i < strips.length; i++) |
---|
| 1258 | + { |
---|
| 1259 | + gl.glBegin(gl.GL_TRIANGLE_STRIP); |
---|
| 1260 | + |
---|
| 1261 | + Vertex p = bRep.GetVertex(bRep.indices[count++]); |
---|
| 1262 | + Vertex q = bRep.GetVertex(bRep.indices[count++]); |
---|
| 1263 | + |
---|
| 1264 | + drawVertex(gl, p, flipV, selectmode); |
---|
| 1265 | + drawVertex(gl, q, flipV, selectmode); |
---|
| 1266 | + |
---|
| 1267 | + for (int j = 0; j < strips[i] - 2; j++) |
---|
| 1268 | + { |
---|
| 1269 | + Vertex r = bRep.GetVertex(bRep.indices[count++]); |
---|
| 1270 | + |
---|
| 1271 | + // if (j%2 == 0) |
---|
| 1272 | + // drawFace(p, q, r, display, null); |
---|
| 1273 | + // else |
---|
| 1274 | + // drawFace(p, r, q, display, null); |
---|
| 1275 | + |
---|
| 1276 | + // p = q; |
---|
| 1277 | + // q = r; |
---|
| 1278 | + drawVertex(gl, r, flipV, selectmode); |
---|
| 1279 | + } |
---|
| 1280 | + |
---|
| 1281 | + gl.glEnd(); |
---|
| 1282 | + } |
---|
| 1283 | + } |
---|
| 1284 | + } |
---|
| 1285 | + |
---|
| 1286 | + static cSpring.Point3D temp = new cSpring.Point3D(); |
---|
| 1287 | + static cSpring.Point3D temp2 = new cSpring.Point3D(); |
---|
| 1288 | + static cSpring.Point3D temp3 = new cSpring.Point3D(); |
---|
| 1289 | + |
---|
| 1290 | + public void DrawDynamicMesh(cMesh mesh) |
---|
| 1291 | + { |
---|
| 1292 | + GL gl = GetGL(); // getGL(); |
---|
| 1293 | + |
---|
| 1294 | + cSpring.PhysicsController3D Phys = mesh.Phys; |
---|
| 1295 | + |
---|
| 1296 | + gl.glDisable(gl.GL_LIGHTING); |
---|
| 1297 | + |
---|
| 1298 | + gl.glLineWidth(1); |
---|
| 1299 | + gl.glColor3f(1,1,1); |
---|
| 1300 | + gl.glBegin(gl.GL_LINES); |
---|
| 1301 | + double scale = 0; |
---|
| 1302 | + int count = 0; |
---|
| 1303 | + for (int s=0; s<Phys.allSprings.size(); s++) |
---|
| 1304 | + { |
---|
| 1305 | + cSpring.Spring spring = Phys.allSprings.get(s); |
---|
| 1306 | + if(s == 0) |
---|
| 1307 | + { |
---|
| 1308 | + //System.out.println(" spring : " + spring.a.position + "; " + spring.b.position); |
---|
| 1309 | + } |
---|
| 1310 | + if (mesh.showsprings) |
---|
| 1311 | + { |
---|
| 1312 | + temp.set(spring.a.position); |
---|
| 1313 | + temp.add(spring.b.position); |
---|
| 1314 | + temp.mul(0.5); |
---|
| 1315 | + temp2.set(spring.a.position); |
---|
| 1316 | + temp2.sub(spring.b.position); |
---|
| 1317 | + temp2.mul(spring.restLength/2); |
---|
| 1318 | + temp.sub(temp2); |
---|
| 1319 | + gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); |
---|
| 1320 | + temp.add(temp2); |
---|
| 1321 | + temp.add(temp2); |
---|
| 1322 | + gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z); |
---|
| 1323 | + } |
---|
| 1324 | + |
---|
| 1325 | + if (spring.isHandle) |
---|
| 1326 | + continue; |
---|
| 1327 | + |
---|
| 1328 | + //if (scale < spring.restLength) |
---|
| 1329 | + scale += spring.restLength; |
---|
| 1330 | + count++; |
---|
| 1331 | + } |
---|
| 1332 | + gl.glEnd(); |
---|
| 1333 | + |
---|
| 1334 | + if (count == 0) |
---|
| 1335 | + scale = 0.01; |
---|
| 1336 | + else |
---|
| 1337 | + scale /= count * 3; |
---|
| 1338 | + |
---|
| 1339 | + //scale = 0.25; |
---|
| 1340 | + |
---|
| 1341 | + if (mesh.ShowInfo()) |
---|
| 1342 | + { |
---|
| 1343 | + gl.glLineWidth(4); |
---|
| 1344 | + for (int s=0; s<Phys.allNodes.size(); s++) |
---|
| 1345 | + { |
---|
| 1346 | + cSpring.DynamicNode node = Phys.allNodes.get(s); |
---|
| 1347 | + if (node.mass == 0) |
---|
| 1348 | + continue; |
---|
| 1349 | + |
---|
| 1350 | + int i = node.springs==null?-1:node.springs.size(); |
---|
| 1351 | + gl.glColor3f((i>>2)&1,(i>>1)&1,i&1); |
---|
| 1352 | + //temp.set(node.springForce.x, node.springForce.y, node.springForce.z); |
---|
| 1353 | + //temp.normalize(); |
---|
| 1354 | + //gl.glColor3d((temp.x+1)/2, (temp.y+1)/2, (temp.z+1)/2); |
---|
| 1355 | + gl.glBegin(gl.GL_LINES); |
---|
| 1356 | + gl.glVertex3d(node.position.x, node.position.y, node.position.z); |
---|
| 1357 | + //gl.glVertex3d(node.position.x + node.normal.x*scale, node.position.y + node.normal.y*scale, node.position.z + node.normal.z*scale); |
---|
| 1358 | + gl.glVertex3d(node.position.x + mesh.bRep.GetVertex(s).norm.x*scale, |
---|
| 1359 | + node.position.y + mesh.bRep.GetVertex(s).norm.y*scale, |
---|
| 1360 | + node.position.z + mesh.bRep.GetVertex(s).norm.z*scale); |
---|
| 1361 | + gl.glEnd(); |
---|
| 1362 | + } |
---|
| 1363 | + |
---|
| 1364 | + gl.glLineWidth(8); |
---|
| 1365 | + for (int s=0; s<Phys.allNodes.size(); s++) |
---|
| 1366 | + { |
---|
| 1367 | + cSpring.DynamicNode node = Phys.allNodes.get(s); |
---|
| 1368 | + |
---|
| 1369 | + if (node.springs != null) |
---|
| 1370 | + { |
---|
| 1371 | + for (int i=0; i<node.springs.size(); i+=1) |
---|
| 1372 | + { |
---|
| 1373 | + cSpring.DynamicNode f = node.springs.get(i).GetOther(node); |
---|
| 1374 | + |
---|
| 1375 | + int c = i+1; |
---|
| 1376 | + // c = node.springs.get(i).nbcopies; |
---|
| 1377 | + |
---|
| 1378 | + gl.glColor3f((c>>2)&1,(c>>1)&1,c&1); |
---|
| 1379 | + gl.glBegin(gl.GL_LINES); |
---|
| 1380 | + gl.glVertex3d(node.position.x, node.position.y, node.position.z); |
---|
| 1381 | + gl.glVertex3d(f.position.x/3+node.position.x*2/3, f.position.y/3+node.position.y*2/3, f.position.z/3+node.position.z*2/3); |
---|
| 1382 | + gl.glEnd(); |
---|
| 1383 | + } |
---|
| 1384 | + } |
---|
| 1385 | + } |
---|
| 1386 | + |
---|
| 1387 | + gl.glLineWidth(1); |
---|
| 1388 | + } |
---|
| 1389 | + |
---|
| 1390 | + gl.glEnable(gl.GL_LIGHTING); |
---|
| 1391 | + } |
---|
| 1392 | + |
---|
1062 | 1393 | /// INTERFACE |
---|
| 1394 | + |
---|
| 1395 | + public void StartTriangles() |
---|
| 1396 | + { |
---|
| 1397 | + javax.media.opengl.GL gl = GetGL(); |
---|
| 1398 | + gl.glBegin(gl.GL_TRIANGLES); |
---|
| 1399 | + } |
---|
| 1400 | + |
---|
| 1401 | + public void EndTriangles() |
---|
| 1402 | + { |
---|
| 1403 | + GetGL().glEnd(); |
---|
| 1404 | + } |
---|
| 1405 | + |
---|
| 1406 | + void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean flipV, boolean selectmode) |
---|
| 1407 | + { |
---|
| 1408 | + if (!selectmode) |
---|
| 1409 | + { |
---|
| 1410 | + gl.glNormal3f((float) pv.norm.x, (float) pv.norm.y, (float) pv.norm.z); |
---|
| 1411 | + gl.glColor4f(pv.AO, pv.AO, pv.AO, 1); |
---|
| 1412 | + |
---|
| 1413 | + if (flipV) |
---|
| 1414 | + gl.glTexCoord2f((float) pv.s, 1-(float) pv.t); |
---|
| 1415 | + else |
---|
| 1416 | + gl.glTexCoord2f((float) pv.s, (float) pv.t); |
---|
| 1417 | + } |
---|
| 1418 | + |
---|
| 1419 | + gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z); |
---|
| 1420 | + } |
---|
1063 | 1421 | |
---|
1064 | 1422 | void SetColor(Object3D obj, Vertex p0) |
---|
1065 | 1423 | { |
---|
.. | .. |
---|
16695 | 17053 | static IntBuffer textbuffer = null; // IntBuffer.allocate(TEXT_WIDTH*8*8 * TEXT_HEIGHT); |
---|
16696 | 17054 | // Depth buffer format |
---|
16697 | 17055 | //private int depth_format; |
---|
16698 | | - static public void NextIndex(Object3D o, GL gl) |
---|
| 17056 | + |
---|
| 17057 | + public void NextIndex() |
---|
16699 | 17058 | { |
---|
16700 | 17059 | indexcount+=16; |
---|
16701 | | - gl.glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0); |
---|
| 17060 | + GetGL().glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0); |
---|
16702 | 17061 | //objects[indexcount] = o; |
---|
16703 | 17062 | //System.out.println("indexcount = " + indexcount); |
---|
16704 | 17063 | } |
---|