Normand Briere
2019-04-24 92e4487d01f910c705211ffb5762a5c96bdd6d8c
CameraPane.java
....@@ -191,6 +191,35 @@
191191
192192 /// INTERFACE
193193
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
+
194223 public boolean IsBoxMode()
195224 {
196225 return BOXMODE;
....@@ -1059,7 +1088,336 @@
10591088 gl.glMatrixMode(gl.GL_MODELVIEW);
10601089 }
10611090
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
+
10621393 /// 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
+ }
10631421
10641422 void SetColor(Object3D obj, Vertex p0)
10651423 {
....@@ -16695,10 +17053,11 @@
1669517053 static IntBuffer textbuffer = null; // IntBuffer.allocate(TEXT_WIDTH*8*8 * TEXT_HEIGHT);
1669617054 // Depth buffer format
1669717055 //private int depth_format;
16698
- static public void NextIndex(Object3D o, GL gl)
17056
+
17057
+ public void NextIndex()
1669917058 {
1670017059 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);
1670217061 //objects[indexcount] = o;
1670317062 //System.out.println("indexcount = " + indexcount);
1670417063 }