@@ -456,95 +456,127 @@ void Renderer::renderLoop() {
456
456
457
457
if (debugLeafNavMesh) {
458
458
glLineWidth (1 );
459
+ glDisable (GL_DEPTH_TEST);
459
460
460
461
Bsp* map = mapRenderers[0 ]->map ;
461
462
int leafIdx = map->get_leaf (cameraOrigin, 3 );
462
- int leafNavIdx = MAX_NAV_LEAVES ;
463
+ int leafNavIdx = - 1 ;
463
464
464
465
if (leafIdx >= 0 && leafIdx < MAX_MAP_CLIPNODE_LEAVES) {
465
466
leafNavIdx = debugLeafNavMesh->leafMap [leafIdx];
466
467
}
467
468
468
- if (leafNavIdx < MAX_NAV_LEAVES ) {
469
+ if (leafNavIdx >= 0 && leafNavIdx < debugLeafNavMesh-> nodes . size () ) {
469
470
470
471
if (pickInfo.valid && pickInfo.ent && pickInfo.entIdx != 0 ) {
471
472
glDisable (GL_DEPTH_TEST);
472
473
473
474
int endNode = debugLeafNavMesh->getNodeIdx (map, pickInfo.ent );
474
- vector<int > route = debugLeafNavMesh->AStarRoute (map, leafNavIdx, endNode);
475
+ // vector<int> route = debugLeafNavMesh->AStarRoute(leafNavIdx, endNode);
476
+ vector<int > route = debugLeafNavMesh->dijkstraRoute (leafNavIdx, endNode);
475
477
476
478
if (route.size ()) {
477
- LeafMesh& firstNode = debugLeafNavMesh->leaves [route[route.size () - 1 ]];
478
-
479
- vec3 lastPos = firstNode.center ;
480
- drawBox (firstNode.center , 2 , COLOR4 (0 , 255 , 255 , 255 ));
481
-
482
- for (int i = route.size () - 2 ; i >= 0 ; i--) {
483
- LeafNavNode& node = debugLeafNavMesh->nodes [route[i]];
484
- LeafMesh& mesh = debugLeafNavMesh->leaves [route[i]];
485
-
486
- vec3 nodeCenter = mesh.center ;
487
-
488
- for (int k = 0 ; k < MAX_NAV_LEAF_LINKS; k++) {
489
- LeafNavLink& link = node.links [k];
490
-
491
- if (link.node == route[i + 1 ]) {
492
- vec3 linkPoint = link.linkArea .center ;
493
-
494
- drawLine (lastPos, linkPoint, COLOR4 (0 , 255 , 255 , 255 ));
495
- drawLine (linkPoint, mesh.center , COLOR4 (0 , 255 , 255 , 255 ));
479
+ LeafNode* lastNode = &debugLeafNavMesh->nodes [route[0 ]];
480
+
481
+ vec3 lastPos = lastNode->bottom ;
482
+ drawBox (lastNode->bottom , 2 , COLOR4 (0 , 255 , 255 , 255 ));
483
+
484
+ for (int i = 1 ; i < route.size (); i++) {
485
+ LeafNode& node = debugLeafNavMesh->nodes [route[i]];
486
+
487
+ vec3 nodeCenter = node.bottom ;
488
+
489
+ for (int k = 0 ; k < lastNode->links .size (); k++) {
490
+ LeafLink& link = lastNode->links [k];
491
+
492
+ if (link.node == route[i]) {
493
+ vec3 linkPoint = link.bottom ;
494
+
495
+ if (link.baseCost > 16000 ) {
496
+ drawLine (lastPos, linkPoint, COLOR4 (255 , 0 , 0 , 255 ));
497
+ drawLine (linkPoint, node.bottom , COLOR4 (255 , 0 , 0 , 255 ));
498
+ }
499
+ else if (link.baseCost > 0 ) {
500
+ drawLine (lastPos, linkPoint, COLOR4 (255 , 255 , 0 , 255 ));
501
+ drawLine (linkPoint, node.bottom , COLOR4 (255 , 255 , 0 , 255 ));
502
+ }
503
+ else {
504
+ drawLine (lastPos, linkPoint, COLOR4 (0 , 255 , 255 , 255 ));
505
+ drawLine (linkPoint, node.bottom , COLOR4 (0 , 255 , 255 , 255 ));
506
+ }
496
507
drawBox (nodeCenter, 2 , COLOR4 (0 , 255 , 255 , 255 ));
497
508
lastPos = nodeCenter;
498
509
break ;
499
510
}
500
511
}
512
+
513
+ lastNode = &node;
501
514
}
502
515
503
516
drawLine (lastPos, pickInfo.ent ->getHullOrigin (map), COLOR4 (0 , 255 , 255 , 255 ));
504
517
}
505
518
}
506
519
else {
507
- LeafNavNode& node = debugLeafNavMesh->nodes [leafNavIdx];
508
- LeafMesh& leaf = debugLeafNavMesh->leaves [leafNavIdx];
520
+ LeafNode& node = debugLeafNavMesh->nodes [leafNavIdx];
509
521
510
- drawBox (leaf. center , 2 , COLOR4 (0 , 255 , 0 , 255 ));
522
+ drawBox (node. bottom , 2 , COLOR4 (0 , 255 , 0 , 255 ));
511
523
512
524
std::string linkStr;
513
525
514
- for (int i = 0 ; i < MAX_NAV_LEAF_LINKS ; i++) {
515
- LeafNavLink & link = node.links [i];
526
+ for (int i = 0 ; i < node. links . size () ; i++) {
527
+ LeafLink & link = node.links [i];
516
528
if (link.node == -1 ) {
517
529
break ;
518
530
}
519
- LeafMesh & linkLeaf = debugLeafNavMesh->leaves [link.node ];
531
+ LeafNode & linkLeaf = debugLeafNavMesh->nodes [link.node ];
520
532
Polygon3D& linkArea = link.linkArea ;
521
533
522
- drawLine (leaf.center , linkArea.center , COLOR4 (0 , 255 , 255 , 255 ));
523
- drawLine (linkArea.center , linkLeaf.center , COLOR4 (0 , 255 , 255 , 255 ));
534
+ if (link.baseCost > 16000 ) {
535
+ drawLine (node.bottom , link.bottom , COLOR4 (255 , 0 , 0 , 255 ));
536
+ drawLine (link.bottom , linkLeaf.bottom , COLOR4 (255 , 0 , 0 , 255 ));
537
+ }
538
+ else if (link.baseCost > 0 ) {
539
+ drawLine (node.bottom , link.bottom , COLOR4 (255 , 255 , 0 , 255 ));
540
+ drawLine (link.bottom , linkLeaf.bottom , COLOR4 (255 , 255 , 0 , 255 ));
541
+ }
542
+ else {
543
+ drawLine (node.bottom , link.bottom , COLOR4 (0 , 255 , 255 , 255 ));
544
+ drawLine (link.bottom , linkLeaf.bottom , COLOR4 (0 , 255 , 255 , 255 ));
545
+ }
524
546
525
547
for (int k = 0 ; k < linkArea.verts .size (); k++) {
526
- drawBox (linkArea.verts [k], 1 , COLOR4 (255 , 255 , 0 , 255 ));
548
+ // drawBox(linkArea.verts[k], 1, COLOR4(255, 255, 0, 255));
527
549
}
528
- drawBox (linkArea. center , 1 , COLOR4 (0 , 255 , 0 , 255 ));
529
- drawBox (linkLeaf.center , 2 , COLOR4 (0 , 255 , 255 , 255 ));
550
+ drawBox (link. bottom , 1 , COLOR4 (0 , 255 , 0 , 255 ));
551
+ drawBox (linkLeaf.bottom , 2 , COLOR4 (0 , 255 , 255 , 255 ));
530
552
linkStr += to_string (link.node ) + " (" + to_string (linkArea.verts .size ()) + " v), " ;
531
553
}
532
554
533
555
// logf("Leaf node idx: %d, links: %s\n", leafNavIdx, linkStr.c_str());
534
556
}
535
557
536
558
}
537
-
538
- glDisable (GL_DEPTH_TEST);
539
559
/*
560
+ Polygon3D linkPoly;
561
+ LeafNode& node = debugLeafNavMesh->nodes[1441];
562
+ for (int i = 0; i < MAX_NAV_LEAF_LINKS; i++) {
563
+ LeafLink& link = node.links[i];
564
+
565
+ if (link.node == 1442) {
566
+ linkPoly = link.linkArea;
567
+ break;
568
+ }
569
+ }
570
+
571
+ drawPolygon3D(linkPoly, COLOR4(255, 255, 255, 255));
572
+
540
573
colorShader->pushMatrix(MAT_PROJECTION);
541
574
colorShader->pushMatrix(MAT_VIEW);
542
575
projection.ortho(0, windowWidth, windowHeight, 0, -1.0f, 1.0f);
543
576
view.loadIdentity();
544
577
colorShader->updateMatrixes();
545
578
546
- Line2D edge(vec2(1000, 400), vec2(1400, 630));
547
- drawLine2D(edge.start, edge.end, COLOR4(255, 0, 0, 255));
579
+ drawPolygon2D(linkPoly, vec2(800, 100), vec2(500, 500), COLOR4(255, 0, 0, 255));
548
580
549
581
colorShader->popMatrix(MAT_PROJECTION);
550
582
colorShader->popMatrix(MAT_VIEW);
@@ -1799,20 +1831,38 @@ void Renderer::drawBox(vec3 mins, vec3 maxs, COLOR4 color) {
1799
1831
buffer.draw (GL_TRIANGLES);
1800
1832
}
1801
1833
1834
+ void Renderer::drawPolygon3D (Polygon3D& poly, COLOR4 color) {
1835
+ static cVert verts[64 ];
1836
+
1837
+ for (int i = 0 ; i < poly.verts .size () && i < 64 ; i++) {
1838
+ vec3 pos = poly.verts [i];
1839
+ verts[i].x = pos.x ;
1840
+ verts[i].y = pos.z ;
1841
+ verts[i].z = -pos.y ;
1842
+ verts[i].c = color;
1843
+ }
1844
+
1845
+ VertexBuffer buffer (colorShader, COLOR_4B | POS_3F, verts, poly.verts .size ());
1846
+ buffer.draw (GL_TRIANGLE_FAN);
1847
+ }
1848
+
1802
1849
float Renderer::drawPolygon2D (Polygon3D poly, vec2 pos, vec2 maxSz, COLOR4 color) {
1803
1850
vec2 sz = poly.localMaxs - poly.localMins ;
1804
1851
float scale = min (maxSz.y / sz.y , maxSz.x / sz.x );
1805
1852
1806
- vec2 offset = poly.localMins * -scale;
1853
+ vec2 offset = poly.localMins * -scale + pos ;
1807
1854
1808
1855
for (int i = 0 ; i < poly.verts .size (); i++) {
1809
1856
vec2 v1 = poly.localVerts [i];
1810
- vec2 v2 = poly.localVerts [(i + 1 ) % debugPoly .verts .size ()];
1857
+ vec2 v2 = poly.localVerts [(i + 1 ) % poly .verts .size ()];
1811
1858
drawLine2D (offset + v1*scale, offset + v2 * scale, color);
1859
+ if (i == 0 ) {
1860
+ drawLine2D (offset + v1 * scale, offset + (v1 + (v2-v1)*0 .5f ) * scale, COLOR4 (0 ,255 ,0 ,255 ));
1861
+ }
1812
1862
}
1813
1863
1814
1864
{
1815
- vec2 cam = debugPoly .project (cameraOrigin);
1865
+ vec2 cam = poly .project (cameraOrigin);
1816
1866
drawBox2D (offset + cam*scale, 16 , poly.isInside (cam) ? COLOR4 (0 , 255 , 0 , 255 ) : COLOR4 (255 , 32 , 0 , 255 ));
1817
1867
}
1818
1868
0 commit comments