[{"data":1,"prerenderedAt":17785},["ShallowReactive",2],{"page-\u002Fgraphy\u002Fopengel\u002F摄像机":3},{"id":4,"title":5,"body":6,"description":19,"extension":17779,"meta":17780,"navigation":1183,"path":17781,"seo":17782,"stem":17783,"__hash__":17784},"content\u002Fgraphy\u002Fopengel\u002F摄像机.md","摄像机",{"type":7,"value":8,"toc":17745},"minimark",[9,20,24,29,49,55,59,66,126,137,140,150,216,228,231,242,311,314,325,348,366,370,385,391,401,411,418,533,539,542,548,695,699,702,815,820,846,849,856,1076,1090,1106,1109,6272,6275,6286,6297,6300,9346,9350,9354,9358,9392,9396,9473,9477,9484,9522,9528,9556,9563,9577,9581,9585,9623,9643,9647,9653,9771,9777,9874,9878,9910,9914,9940,9944,9958,9961,14151,17741],[10,11,16],"pre",{"className":12,"code":14,"language":15},[13],"language-text","前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景（我们向后移动了一点）。OpenGL本身没有**摄像机**(Camera)的概念，但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机，产生一种**我们**在移动的感觉，而不是场景在移动。\n","text",[17,18,14],"code",{"__ignoreMap":19},"",[21,22,23],"p",{},"​\t本节我们将会讨论如何在OpenGL中配置一个摄像机，并且将会讨论FPS风格的摄像机，让你能够在3D场景中自由移动。我们也会讨论键盘和鼠标输入，最终完成一个自定义的摄像机类。",[25,26,28],"h2",{"id":27},"摄像机观察空间","摄像机\u002F观察空间",[21,30,31,32,36,37,40,41,44,45,48],{},"​\t当我们",[33,34,35],"strong",{},"讨论摄像机\u002F观察空间(Camera\u002FView Space)的时候","，是在讨论",[33,38,39],{},"以摄像机的视角作为场景原点时场景中所有的顶点坐标：观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标","。要定义一个摄像机，我们需要",[33,42,43],{},"它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及一个指向它上方的向量","。细心的读者可能已经注意到我们实际上",[33,46,47],{},"创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系","。",[21,50,51],{},[52,53],"img",{"alt":52,"src":54},".\u002Fassets\u002Fcamera_axes.png",[56,57,58],"h3",{"id":58},"摄像机位置",[21,60,61,62,65],{},"​\t获取摄像机位置很简单。",[33,63,64],{},"摄像机位置简单来说就是世界空间中一个指向摄像机位置的向量","。我们把摄像机位置设置为上一节中的那个相同的位置：",[10,67,71],{"className":68,"code":69,"language":70,"meta":19,"style":19},"language-c++ shiki shiki-themes github-light github-dark","glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);\n","c++",[17,72,73],{"__ignoreMap":19},[74,75,78,82,86,90,93,96,99,102,106,109,112,114,116,118,121,123],"span",{"class":76,"line":77},"line",1,[74,79,81],{"class":80},"sScJk","glm",[74,83,85],{"class":84},"sVt8B","::vec3 cameraPos ",[74,87,89],{"class":88},"szBVR","=",[74,91,92],{"class":80}," glm",[74,94,95],{"class":84},"::",[74,97,98],{"class":80},"vec3",[74,100,101],{"class":84},"(",[74,103,105],{"class":104},"sj4cs","0.0",[74,107,108],{"class":88},"f",[74,110,111],{"class":84},", ",[74,113,105],{"class":104},[74,115,108],{"class":88},[74,117,111],{"class":84},[74,119,120],{"class":104},"3.0",[74,122,108],{"class":88},[74,124,125],{"class":84},");\n",[127,128,129,134],"blockquote",{},[21,130,131],{},[74,132,133],{},"!NOTE",[21,135,136],{},"不要忘记正z轴是从屏幕指向你的，如果我们希望摄像机向后移动，我们就沿着z轴的正方向移动。",[56,138,139],{"id":139},"摄像机方向",[21,141,142,143,146,147],{},"​\t下一个需要的向量是摄像机的方向，",[33,144,145],{},"这里指的是摄像机指向哪个方向。现在我们让摄像机指向场景原点：(0, 0, 0)。还记得如果将两个矢量相减","，我们就能得到这两个矢量的差吗？用场景原点向量减去摄像机位置向量的结果就是摄像机的指向向量。由于我们知道摄像机指向z轴负方向，但我们希望方向向量(Direction Vector)指向摄像机的z轴正方向。",[33,148,149],{},"如果我们交换相减的顺序，我们就会获得一个指向摄像机正z轴方向的向量：",[10,151,153],{"className":68,"code":152,"language":70,"meta":19,"style":19},"glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);\nglm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);\n",[17,154,155,190],{"__ignoreMap":19},[74,156,157,159,162,164,166,168,170,172,174,176,178,180,182,184,186,188],{"class":76,"line":77},[74,158,81],{"class":80},[74,160,161],{"class":84},"::vec3 cameraTarget ",[74,163,89],{"class":88},[74,165,92],{"class":80},[74,167,95],{"class":84},[74,169,98],{"class":80},[74,171,101],{"class":84},[74,173,105],{"class":104},[74,175,108],{"class":88},[74,177,111],{"class":84},[74,179,105],{"class":104},[74,181,108],{"class":88},[74,183,111],{"class":84},[74,185,105],{"class":104},[74,187,108],{"class":88},[74,189,125],{"class":84},[74,191,193,195,198,200,202,204,207,210,213],{"class":76,"line":192},2,[74,194,81],{"class":80},[74,196,197],{"class":84},"::vec3 cameraDirection ",[74,199,89],{"class":88},[74,201,92],{"class":80},[74,203,95],{"class":84},[74,205,206],{"class":80},"normalize",[74,208,209],{"class":84},"(cameraPos ",[74,211,212],{"class":88},"-",[74,214,215],{"class":84}," cameraTarget);\n",[127,217,218,222],{},[21,219,220],{},[74,221,133],{},[21,223,224,227],{},[33,225,226],{},"方向","向量(Direction Vector)并不是最好的名字，因为它实际上指向从它到目标向量的相反方向（译注：注意看前面的那个图，蓝色的方向向量大概指向z轴的正方向，与摄像机实际指向的方向是正好相反的）。",[56,229,230],{"id":230},"右轴",[21,232,233,234,237,238,241],{},"​\t我们需要的另一个向量是一个",[33,235,236],{},"右向量","(Right Vector)，它代表摄像机空间的x轴的正方向。为获取右向量我们需要先使用一个小技巧：先定义一个",[33,239,240],{},"上向量","(Up Vector)。接下来把上向量和第二步得到的方向向量进行叉乘。两个向量叉乘的结果会同时垂直于两向量，因此我们会得到指向x轴正方向的那个向量（如果我们交换两个向量叉乘的顺序就会得到相反的指向x轴负方向的向量）：",[10,243,245],{"className":68,"code":244,"language":70,"meta":19,"style":19},"glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f); \nglm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));\n",[17,246,247,284],{"__ignoreMap":19},[74,248,249,251,254,256,258,260,262,264,266,268,270,273,275,277,279,281],{"class":76,"line":77},[74,250,81],{"class":80},[74,252,253],{"class":84},"::vec3 up ",[74,255,89],{"class":88},[74,257,92],{"class":80},[74,259,95],{"class":84},[74,261,98],{"class":80},[74,263,101],{"class":84},[74,265,105],{"class":104},[74,267,108],{"class":88},[74,269,111],{"class":84},[74,271,272],{"class":104},"1.0",[74,274,108],{"class":88},[74,276,111],{"class":84},[74,278,105],{"class":104},[74,280,108],{"class":88},[74,282,283],{"class":84},"); \n",[74,285,286,288,291,293,295,297,299,301,303,305,308],{"class":76,"line":192},[74,287,81],{"class":80},[74,289,290],{"class":84},"::vec3 cameraRight ",[74,292,89],{"class":88},[74,294,92],{"class":80},[74,296,95],{"class":84},[74,298,206],{"class":80},[74,300,101],{"class":84},[74,302,81],{"class":80},[74,304,95],{"class":84},[74,306,307],{"class":80},"cross",[74,309,310],{"class":84},"(up, cameraDirection));\n",[56,312,313],{"id":313},"上轴",[21,315,316,317,320,321,324],{},"​\t现在我们已经",[33,318,319],{},"有了x轴向量和z轴向量","，获取",[33,322,323],{},"一个指向摄像机的正y轴向量就相对简单了","：我们把右向量和方向向量进行叉乘：",[10,326,328],{"className":68,"code":327,"language":70,"meta":19,"style":19},"glm::vec3 cameraUp = glm::cross(cameraDirection, cameraRight);\n",[17,329,330],{"__ignoreMap":19},[74,331,332,334,337,339,341,343,345],{"class":76,"line":77},[74,333,81],{"class":80},[74,335,336],{"class":84},"::vec3 cameraUp ",[74,338,89],{"class":88},[74,340,92],{"class":80},[74,342,95],{"class":84},[74,344,307],{"class":80},[74,346,347],{"class":84},"(cameraDirection, cameraRight);\n",[21,349,350,351,354,355,362,363,48],{},"​\t",[33,352,353],{},"在叉乘和一些小技巧的帮助下，我们创建了所有构成观察\u002F摄像机空间的向量","。对于想学到更多数学原理的读者，提示一下，在线性代数中这个处理叫做",[356,357,361],"a",{"href":358,"rel":359},"http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGram%E2%80%93Schmidt_process",[360],"nofollow","格拉姆—施密特正交化","(Gram-Schmidt Process)。",[33,364,365],{},"使用这些摄像机向量我们就可以创建一个LookAt矩阵了，它在创建摄像机的时候非常有用",[25,367,369],{"id":368},"look-at","Look At",[21,371,372,373,376,377,380,381,384],{},"​\t使用矩阵的好处之一是",[33,374,375],{},"如果你使用3个相互垂直（或非线性）的轴定义了一个坐标空间","，你可以用",[33,378,379],{},"这3个轴外加一个平移向量来创建一个矩阵","，并且你可以用这个矩阵乘以任何向量来将其变换到那个坐标空间。这正是",[33,382,383],{},"LookAt","矩阵所做的，现在我们有了3个相互垂直的轴和一个定义摄像机空间的位置坐标，我们可以创建我们自己的LookAt矩阵了：",[21,386,387],{},[52,388],{"alt":389,"src":390},"image-20251010231546573",".\u002Fassets\u002Fimage-20251010231546573.png",[21,392,393,394,397,398,48],{},"​\t其中",[33,395,396],{},"R是右向量，U是上向量，D是方向向量P是摄像机位置向量","。注意，位置向量是相反的，因为我们最终希望把世界平移到与我们自身移动的相反方向。把这个LookAt矩阵作为观察矩阵可以很高效地把所有世界坐标变换到刚刚定义的观察空间。",[33,399,400],{},"LookAt矩阵就像它的名字表达的那样：它会创建一个看着(Look at)给定目标的观察矩阵",[127,402,403,408],{},[21,404,405],{},[74,406,407],{},"!WARNING",[21,409,410],{},"注意，这里有个错误，应该是 Ux那一行是 相机正在注视的世界坐标系点，应该是0 0 0 。然后Dx那一行才是上向量，用于告诉opengel屏幕的垂直方向对应世界Y轴。",[21,412,413,414,417],{},"​\t幸运的是，GLM已经提供了这些支持。",[33,415,416],{},"我们要做的只是定义一个摄像机位置，一个目标位置和一个表示世界空间中的上向量的向量（我们计算右向量使用的那个上向量）","。接着GLM就会创建一个LookAt矩阵，我们可以把它当作我们的观察矩阵：",[10,419,421],{"className":68,"code":420,"language":70,"meta":19,"style":19},"glm::mat4 view;\nview = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), \n           glm::vec3(0.0f, 0.0f, 0.0f), \n           glm::vec3(0.0f, 1.0f, 0.0f));\n",[17,422,423,430,473,503],{"__ignoreMap":19},[74,424,425,427],{"class":76,"line":77},[74,426,81],{"class":80},[74,428,429],{"class":84},"::mat4 view;\n",[74,431,432,435,437,439,441,444,446,448,450,452,454,456,458,460,462,464,466,468,470],{"class":76,"line":192},[74,433,434],{"class":84},"view ",[74,436,89],{"class":88},[74,438,92],{"class":80},[74,440,95],{"class":84},[74,442,443],{"class":80},"lookAt",[74,445,101],{"class":84},[74,447,81],{"class":80},[74,449,95],{"class":84},[74,451,98],{"class":80},[74,453,101],{"class":84},[74,455,105],{"class":104},[74,457,108],{"class":88},[74,459,111],{"class":84},[74,461,105],{"class":104},[74,463,108],{"class":88},[74,465,111],{"class":84},[74,467,120],{"class":104},[74,469,108],{"class":88},[74,471,472],{"class":84},"), \n",[74,474,476,479,481,483,485,487,489,491,493,495,497,499,501],{"class":76,"line":475},3,[74,477,478],{"class":80},"           glm",[74,480,95],{"class":84},[74,482,98],{"class":80},[74,484,101],{"class":84},[74,486,105],{"class":104},[74,488,108],{"class":88},[74,490,111],{"class":84},[74,492,105],{"class":104},[74,494,108],{"class":88},[74,496,111],{"class":84},[74,498,105],{"class":104},[74,500,108],{"class":88},[74,502,472],{"class":84},[74,504,506,508,510,512,514,516,518,520,522,524,526,528,530],{"class":76,"line":505},4,[74,507,478],{"class":80},[74,509,95],{"class":84},[74,511,98],{"class":80},[74,513,101],{"class":84},[74,515,105],{"class":104},[74,517,108],{"class":88},[74,519,111],{"class":84},[74,521,272],{"class":104},[74,523,108],{"class":88},[74,525,111],{"class":84},[74,527,105],{"class":104},[74,529,108],{"class":88},[74,531,532],{"class":84},"));\n",[21,534,535,536,48],{},"glm::LookAt函数需要一个",[33,537,538],{},"位置、目标和上向量。它会创建一个和在上一节使用的一样的观察矩阵",[21,540,541],{},"​\t在讨论用户输入之前，我们先来做些有意思的事，把我们的摄像机在场景中旋转。我们会将摄像机的注视点保持在(0, 0, 0)。",[21,543,544,545,48],{},"​\t我们需要用到一点三角学的知识来在每一帧创建一个x和z坐标，它会代表圆上的一点，我们将会使用它作为摄像机的位置。通过重新计算x和y坐标，我们会遍历圆上的所有点，这样摄像机就会绕着场景旋转了。我们预先定义这个圆的半径radius，",[33,546,547],{},"在每次渲染迭代中使用GLFW的glfwGetTime函数重新创建观察矩阵，来扩大这个圆",[10,549,551],{"className":68,"code":550,"language":70,"meta":19,"style":19},"float radius = 10.0f;\nfloat camX = sin(glfwGetTime()) * radius;\nfloat camZ = cos(glfwGetTime()) * radius;\nglm::mat4 view;\nview = glm::lookAt(glm::vec3(camX, 0.0, camZ), glm::vec3(0.0, 0.0, 0.0), glm::vec3(0.0, 1.0, 0.0)); \n",[17,552,553,571,597,619,625],{"__ignoreMap":19},[74,554,555,558,561,563,566,568],{"class":76,"line":77},[74,556,557],{"class":88},"float",[74,559,560],{"class":84}," radius ",[74,562,89],{"class":88},[74,564,565],{"class":104}," 10.0",[74,567,108],{"class":88},[74,569,570],{"class":84},";\n",[74,572,573,575,578,580,583,585,588,591,594],{"class":76,"line":192},[74,574,557],{"class":88},[74,576,577],{"class":84}," camX ",[74,579,89],{"class":88},[74,581,582],{"class":80}," sin",[74,584,101],{"class":84},[74,586,587],{"class":80},"glfwGetTime",[74,589,590],{"class":84},"()) ",[74,592,593],{"class":88},"*",[74,595,596],{"class":84}," radius;\n",[74,598,599,601,604,606,609,611,613,615,617],{"class":76,"line":475},[74,600,557],{"class":88},[74,602,603],{"class":84}," camZ ",[74,605,89],{"class":88},[74,607,608],{"class":80}," cos",[74,610,101],{"class":84},[74,612,587],{"class":80},[74,614,590],{"class":84},[74,616,593],{"class":88},[74,618,596],{"class":84},[74,620,621,623],{"class":76,"line":505},[74,622,81],{"class":80},[74,624,429],{"class":84},[74,626,628,630,632,634,636,638,640,642,644,646,649,651,654,656,658,660,662,664,666,668,670,672,675,677,679,681,683,685,687,689,691,693],{"class":76,"line":627},5,[74,629,434],{"class":84},[74,631,89],{"class":88},[74,633,92],{"class":80},[74,635,95],{"class":84},[74,637,443],{"class":80},[74,639,101],{"class":84},[74,641,81],{"class":80},[74,643,95],{"class":84},[74,645,98],{"class":80},[74,647,648],{"class":84},"(camX, ",[74,650,105],{"class":104},[74,652,653],{"class":84},", camZ), ",[74,655,81],{"class":80},[74,657,95],{"class":84},[74,659,98],{"class":80},[74,661,101],{"class":84},[74,663,105],{"class":104},[74,665,111],{"class":84},[74,667,105],{"class":104},[74,669,111],{"class":84},[74,671,105],{"class":104},[74,673,674],{"class":84},"), ",[74,676,81],{"class":80},[74,678,95],{"class":84},[74,680,98],{"class":80},[74,682,101],{"class":84},[74,684,105],{"class":104},[74,686,111],{"class":84},[74,688,272],{"class":104},[74,690,111],{"class":84},[74,692,105],{"class":104},[74,694,532],{"class":84},[696,697,698],"h1",{"id":698},"自由移动",[21,700,701],{},"​\t让摄像机绕着场景转的确很有趣，但是让我们自己移动摄像机会更有趣！首先我们必须设置一个摄像机系统，所以在我们的程序前面定义一些摄像机变量很有用：",[10,703,705],{"className":68,"code":704,"language":70,"meta":19,"style":19},"glm::vec3 cameraPos   = glm::vec3(0.0f, 0.0f,  3.0f);\nglm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);\nglm::vec3 cameraUp    = glm::vec3(0.0f, 1.0f,  0.0f);\n",[17,706,707,743,780],{"__ignoreMap":19},[74,708,709,711,714,716,718,720,722,724,726,728,730,732,734,737,739,741],{"class":76,"line":77},[74,710,81],{"class":80},[74,712,713],{"class":84},"::vec3 cameraPos   ",[74,715,89],{"class":88},[74,717,92],{"class":80},[74,719,95],{"class":84},[74,721,98],{"class":80},[74,723,101],{"class":84},[74,725,105],{"class":104},[74,727,108],{"class":88},[74,729,111],{"class":84},[74,731,105],{"class":104},[74,733,108],{"class":88},[74,735,736],{"class":84},",  ",[74,738,120],{"class":104},[74,740,108],{"class":88},[74,742,125],{"class":84},[74,744,745,747,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778],{"class":76,"line":192},[74,746,81],{"class":80},[74,748,749],{"class":84},"::vec3 cameraFront ",[74,751,89],{"class":88},[74,753,92],{"class":80},[74,755,95],{"class":84},[74,757,98],{"class":80},[74,759,101],{"class":84},[74,761,105],{"class":104},[74,763,108],{"class":88},[74,765,111],{"class":84},[74,767,105],{"class":104},[74,769,108],{"class":88},[74,771,111],{"class":84},[74,773,212],{"class":88},[74,775,272],{"class":104},[74,777,108],{"class":88},[74,779,125],{"class":84},[74,781,782,784,787,789,791,793,795,797,799,801,803,805,807,809,811,813],{"class":76,"line":475},[74,783,81],{"class":80},[74,785,786],{"class":84},"::vec3 cameraUp    ",[74,788,89],{"class":88},[74,790,92],{"class":80},[74,792,95],{"class":84},[74,794,98],{"class":80},[74,796,101],{"class":84},[74,798,105],{"class":104},[74,800,108],{"class":88},[74,802,111],{"class":84},[74,804,272],{"class":104},[74,806,108],{"class":88},[74,808,736],{"class":84},[74,810,105],{"class":104},[74,812,108],{"class":88},[74,814,125],{"class":84},[21,816,350,817,819],{},[17,818,383],{},"函数现在成了：",[10,821,823],{"className":68,"code":822,"language":70,"meta":19,"style":19},"view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);\n",[17,824,825],{"__ignoreMap":19},[74,826,827,829,831,833,835,837,840,843],{"class":76,"line":77},[74,828,434],{"class":84},[74,830,89],{"class":88},[74,832,92],{"class":80},[74,834,95],{"class":84},[74,836,443],{"class":80},[74,838,839],{"class":84},"(cameraPos, cameraPos ",[74,841,842],{"class":88},"+",[74,844,845],{"class":84}," cameraFront, cameraUp);\n",[21,847,848],{},"​\t我们首先将摄像机位置设置为之前定义的cameraPos。方向是当前的位置加上我们刚刚定义的方向向量。这样能保证无论我们怎么移动，摄像机都会注视着目标方向。让我们摆弄一下这些向量，在按下某些按钮时更新cameraPos向量。",[21,850,851,852,855],{},"​\t我们已经为GLFW的键盘输入定义过一个processInput函数了，我们来新",[33,853,854],{},"添加几个需要检查的按键命令","：",[10,857,859],{"className":68,"code":858,"language":70,"meta":19,"style":19},"void processInput(GLFWwindow *window)\n{\n    ...\n    float cameraSpeed = 0.05f; \u002F\u002F adjust accordingly\n    if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)\n        cameraPos += cameraSpeed * cameraFront;\n    if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)\n        cameraPos -= cameraSpeed * cameraFront;\n    if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)\n        cameraPos -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;\n    if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)\n        cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;\n}\n",[17,860,861,884,889,894,916,936,952,968,982,998,1027,1043,1070],{"__ignoreMap":19},[74,862,863,866,869,871,874,877,881],{"class":76,"line":77},[74,864,865],{"class":88},"void",[74,867,868],{"class":80}," processInput",[74,870,101],{"class":84},[74,872,873],{"class":80},"GLFWwindow",[74,875,876],{"class":88}," *",[74,878,880],{"class":879},"s4XuR","window",[74,882,883],{"class":84},")\n",[74,885,886],{"class":76,"line":192},[74,887,888],{"class":84},"{\n",[74,890,891],{"class":76,"line":475},[74,892,893],{"class":84},"    ...\n",[74,895,896,899,902,904,907,909,912],{"class":76,"line":505},[74,897,898],{"class":88},"    float",[74,900,901],{"class":84}," cameraSpeed ",[74,903,89],{"class":88},[74,905,906],{"class":104}," 0.05",[74,908,108],{"class":88},[74,910,911],{"class":84},";",[74,913,915],{"class":914},"sJ8bj"," \u002F\u002F adjust accordingly\n",[74,917,918,921,924,927,930,933],{"class":76,"line":627},[74,919,920],{"class":88},"    if",[74,922,923],{"class":84}," (",[74,925,926],{"class":80},"glfwGetKey",[74,928,929],{"class":84},"(window, GLFW_KEY_W) ",[74,931,932],{"class":88},"==",[74,934,935],{"class":84}," GLFW_PRESS)\n",[74,937,939,942,945,947,949],{"class":76,"line":938},6,[74,940,941],{"class":84},"        cameraPos ",[74,943,944],{"class":88},"+=",[74,946,901],{"class":84},[74,948,593],{"class":88},[74,950,951],{"class":84}," cameraFront;\n",[74,953,955,957,959,961,964,966],{"class":76,"line":954},7,[74,956,920],{"class":88},[74,958,923],{"class":84},[74,960,926],{"class":80},[74,962,963],{"class":84},"(window, GLFW_KEY_S) ",[74,965,932],{"class":88},[74,967,935],{"class":84},[74,969,971,973,976,978,980],{"class":76,"line":970},8,[74,972,941],{"class":84},[74,974,975],{"class":88},"-=",[74,977,901],{"class":84},[74,979,593],{"class":88},[74,981,951],{"class":84},[74,983,985,987,989,991,994,996],{"class":76,"line":984},9,[74,986,920],{"class":88},[74,988,923],{"class":84},[74,990,926],{"class":80},[74,992,993],{"class":84},"(window, GLFW_KEY_A) ",[74,995,932],{"class":88},[74,997,935],{"class":84},[74,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1022,1024],{"class":76,"line":1000},10,[74,1002,941],{"class":84},[74,1004,975],{"class":88},[74,1006,92],{"class":80},[74,1008,95],{"class":84},[74,1010,206],{"class":80},[74,1012,101],{"class":84},[74,1014,81],{"class":80},[74,1016,95],{"class":84},[74,1018,307],{"class":80},[74,1020,1021],{"class":84},"(cameraFront, cameraUp)) ",[74,1023,593],{"class":88},[74,1025,1026],{"class":84}," cameraSpeed;\n",[74,1028,1030,1032,1034,1036,1039,1041],{"class":76,"line":1029},11,[74,1031,920],{"class":88},[74,1033,923],{"class":84},[74,1035,926],{"class":80},[74,1037,1038],{"class":84},"(window, GLFW_KEY_D) ",[74,1040,932],{"class":88},[74,1042,935],{"class":84},[74,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068],{"class":76,"line":1045},12,[74,1047,941],{"class":84},[74,1049,944],{"class":88},[74,1051,92],{"class":80},[74,1053,95],{"class":84},[74,1055,206],{"class":80},[74,1057,101],{"class":84},[74,1059,81],{"class":80},[74,1061,95],{"class":84},[74,1063,307],{"class":80},[74,1065,1021],{"class":84},[74,1067,593],{"class":88},[74,1069,1026],{"class":84},[74,1071,1073],{"class":76,"line":1072},13,[74,1074,1075],{"class":84},"}\n",[21,1077,1078,1079,1082,1083,1086,1087,1089],{},"​\t当我们按下",[33,1080,1081],{},"WASD","键的任意一个，摄像机的位置都会相应更新。",[33,1084,1085],{},"如果我们希望向前或向后移动，我们就把位置向量加上或减去方向向量","。如果我们希望向左右移动，我们使用叉乘来创建一个",[33,1088,236],{},"(Right Vector)，并沿着它相应移动就可以了。这样就创建了使用摄像机时熟悉的横移(Strafe)效果。",[127,1091,1092,1096],{},[21,1093,1094],{},[74,1095,133],{},[21,1097,1098,1099,1101,1102,1105],{},"注意，我们对",[33,1100,236],{},"进行了标准化。如果我们没对这个向量进行标准化，最后的叉乘结果会根据cameraFront变量返回大小不同的向量。如果我们不对向量进行标准化，",[33,1103,1104],{},"我们就得根据摄像机的朝向不同加速或减速移动了","，但如果进行了标准化移动就是匀速的。",[21,1107,1108],{},"​\t现在你就应该能够移动摄像机了，虽然移动速度和系统有关，你可能会需要调整一下cameraSpeed。",[10,1110,1112],{"className":68,"code":1111,"language":70,"meta":19,"style":19},"#include \u003Cglad\u002Fglad.h>\n#include \u003CGLFW\u002Fglfw3.h>\n#include \u003Copencv4\u002Fopencv2\u002Fopencv.hpp>\n#include \u003Ciostream>\n#include \u003Ccmath>\n#include \u003Cfilesystem>\n#include \"utils\u002Fshader.h\"\n#include \"utils\u002FglmCompute.h\"\n#include \"utils\u002Flogger.h\"\n\nusing namespace cv;\nusing namespace glm;\n\n\u002F\u002F 窗口大小改变时的回调函数\nvoid framebuffer_size_callback(GLFWwindow* window, int width, int height) {\n    glViewport(0, 0, width, height);\n}\n\nstd::string getCurrentWorkingDirectory() {\n    namespace fs = std::filesystem;\n    try {\n        \u002F\u002F current_path() 返回当前工作目录\n        return fs::current_path().string();\n    } catch (const fs::filesystem_error& e) {\n        std::cerr \u003C\u003C \"Filesystem Error: \" \u003C\u003C e.what() \u003C\u003C std::endl;\n        return \"\";\n    }\n}\n\n\u002F\u002F 相机的位置和方向\nvec3 cameraPos = vec3(0.0f, 0.0f, 3.0f);\nvec3 cameraFront = vec3(0.0f, 0.0f, -1.0f); \u002F\u002F 相机朝向\nvec3 cameraUp = vec3(0.0f, 1.0f, 0.0f); \u002F\u002F 上向量\n\n\u002F\u002F 鼠标控制变量\nfloat yawAngle = -90.0f;   \u002F\u002F 偏航角\nfloat pitchAngle = 0.0f;   \u002F\u002F 俯仰角\nfloat lastX = 400.0f; \u002F\u002F 鼠标上次X位置\nfloat lastY = 300.0f; \u002F\u002F 鼠标上次Y位置\nbool firstMouse = true; \u002F\u002F 是否是第一次鼠标移动\nbool mouseCaptured = true; \u002F\u002F 鼠标是否被捕获\n\n\u002F\u002F 鼠标回调函数\nvoid mouse_callback(GLFWwindow* window, double xpos, double ypos) {\n    \u002F\u002F 只有在鼠标被捕获时才处理鼠标移动\n    if (!mouseCaptured) return;\n    \n    if (firstMouse) {\n        lastX = xpos;\n        lastY = ypos;\n        firstMouse = false;\n    }\n\n    float xoffset = xpos - lastX;\n    float yoffset = lastY - ypos; \u002F\u002F 注意这里是相反的，因为y坐标是从底部往顶部递增的\n    lastX = xpos;\n    lastY = ypos;\n\n    float sensitivity = 0.1f;\n    xoffset *= sensitivity;\n    yoffset *= sensitivity;\n\n    yawAngle += xoffset;\n    pitchAngle += yoffset;\n\n    \u002F\u002F 限制俯仰角，避免翻转\n    if (pitchAngle > 89.0f)\n        pitchAngle = 89.0f;\n    if (pitchAngle \u003C -89.0f)\n        pitchAngle = -89.0f;\n\n    \u002F\u002F 计算新的相机方向\n    vec3 front;\n    front.x = cos(radians(yawAngle)) * cos(radians(pitchAngle));\n    front.y = sin(radians(pitchAngle));\n    front.z = sin(radians(yawAngle)) * cos(radians(pitchAngle));\n    cameraFront = normalize(front);\n}\n\nvoid processInput(GLFWwindow *window){\n    \u002F\u002F 检查 Ctrl+Alt 组合键来切换鼠标捕获状态\n    bool ctrlPressed = glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || \n                      glfwGetKey(window, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS;\n    bool altPressed = glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS || \n                      glfwGetKey(window, GLFW_KEY_RIGHT_ALT) == GLFW_PRESS;\n    \n    if (ctrlPressed && altPressed) {\n        if (mouseCaptured) {\n            \u002F\u002F 释放鼠标捕获\n            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);\n            mouseCaptured = false;\n            firstMouse = true; \u002F\u002F 重置鼠标状态\n            std::cout \u003C\u003C \"鼠标捕获已释放 - 按 Ctrl+Alt 重新捕获\" \u003C\u003C std::endl;\n        } else {\n            \u002F\u002F 重新捕获鼠标\n            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n            mouseCaptured = true;\n            firstMouse = true; \u002F\u002F 重置鼠标状态\n            std::cout \u003C\u003C \"鼠标捕获已启用\" \u003C\u003C std::endl;\n        }\n    }\n    \n    \u002F\u002F 只有在鼠标被捕获时才处理WASD移动\n    if (!mouseCaptured) return;\n    \n    float cameraSpeed = 0.05f;\n    if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)\n        cameraPos += cameraSpeed * cameraFront;\n    if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)\n        cameraPos -= cameraSpeed * cameraFront;\n    if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)\n        cameraPos -= normalize(cross(cameraFront, cameraUp)) * cameraSpeed;\n    if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)\n        cameraPos += normalize(cross(cameraFront, cameraUp)) * cameraSpeed;\n}\n\nint main() {\n\n    \u002F\u002F 模型矩阵\n    mat4 model = mat4(1.0f);\n    model = rotate(model, radians(-55.0f), vec3(1.0f, 0.0f, 0.0f));\n\n    \u002F\u002F lookat矩阵\n    mat4 view = mat4(1.0f);\n    view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);\n\n    \u002F\u002F 投影矩阵\n    mat4 projection = perspective(radians(45.0f), (float)800 \u002F (float)600, 0.1f, 100.0f);\n\n    \u002F\u002F 立方体数组\n    vec3 cubePositions[] = {\n        vec3(0.0f,  0.0f,  0.0f),\n        vec3(2.0f,  5.0f, -15.0f),\n        vec3(-1.5f, -2.2f, -2.5f),\n        vec3(-3.8f, -2.0f, -12.3f),\n        vec3(2.4f, -0.4f, -3.5f),\n    };\n\n    auto path = getCurrentWorkingDirectory().append(\"\u002FAssets\u002Fimage.png\");\n    auto path2 = getCurrentWorkingDirectory().append(\"\u002FAssets\u002Fimage2.png\");\n    cv::Mat image = cv::imread(path);\n    cv::Mat image2 = cv::imread(path2);\n    cv::flip(image2, image2, 0);\n    cv::cvtColor(image, image, cv::COLOR_BGR2RGB);\n    cv::cvtColor(image2, image2, cv::COLOR_BGR2RGB);\n\n    \u002F\u002F 转换为字节数组\n    std::vector\u003Cuchar> imageData;\n    std::vector\u003Cuchar> imageData2;\n    if (image.empty()) {\n        std::cerr \u003C\u003C \"Could not read the image: \" \u003C\u003C path \u003C\u003C std::endl;\n        return 1;\n    }\n    if (image2.empty()) {\n        std::cerr \u003C\u003C \"Could not read the image2: \" \u003C\u003C path2 \u003C\u003C std::endl;\n        return 1;\n    }\n    \n    std::cout \u003C\u003C \"Image 1 loaded: \" \u003C\u003C image.cols \u003C\u003C \"x\" \u003C\u003C image.rows \u003C\u003C std::endl;\n    std::cout \u003C\u003C \"Image 2 loaded: \" \u003C\u003C image2.cols \u003C\u003C \"x\" \u003C\u003C image2.rows \u003C\u003C std::endl;\n\n    cv::imencode(\".png\", image, imageData);\n    cv::imencode(\".png\", image2, imageData2);\n\n\n    \n    \u002F\u002F 初始化GLFW\n    glfwInit();\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);\n    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n\n    \u002F\u002F 创建窗口\n    GLFWwindow* window = glfwCreateWindow(800, 600, \"OpenGL Window\", NULL, NULL);\n    if (window == NULL) {\n        std::cout \u003C\u003C \"Failed to create GLFW window\" \u003C\u003C std::endl;\n        glfwTerminate();\n        return -1;\n    }\n    \n    glfwMakeContextCurrent(window);\n    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);\n    glfwSetCursorPosCallback(window, mouse_callback);\n    \n    \u002F\u002F 隐藏鼠标光标并捕获鼠标\n    glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n\n    \u002F\u002F 初始化GLAD\n    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {\n        std::cout \u003C\u003C \"Failed to initialize GLAD\" \u003C\u003C std::endl;\n        return -1;\n    }\n\n    \u002F\u002F 启用深度测试\n    glEnable(GL_DEPTH_TEST);\n\n    float vertices[] = {\n    \u002F\u002F 位置(3) + 纹理坐标(2)\n    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,\n     0.5f, -0.5f, -0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,\n\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,\n    -0.5f,  0.5f,  0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n\n    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f,  0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f\n};\n    \n    \u002F\u002F indices数组未使用，已删除\n\n    \u002F\u002F 纹理\n    unsigned int texture;\n    unsigned int texture2;\n    glGenTextures(1, &texture); \u002F\u002F 生成纹理\n    glGenTextures(1, &texture2); \u002F\u002F 生成纹理\n    \n    \u002F\u002F 配置第一个纹理\n    glActiveTexture(GL_TEXTURE0);\n    glBindTexture(GL_TEXTURE_2D, texture); \u002F\u002F 绑定纹理\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.cols, image.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, image.data); \u002F\u002F 设置纹理数据\n    glGenerateMipmap(GL_TEXTURE_2D); \u002F\u002F 生成mipmap\n\n    \u002F\u002F 配置第二个纹理\n    glActiveTexture(GL_TEXTURE1);\n    glBindTexture(GL_TEXTURE_2D, texture2); \u002F\u002F 绑定纹理\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); \u002F\u002F 设置纹理环绕方式   \n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image2.cols, image2.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, image2.data); \u002F\u002F 设置纹理数据\n    glGenerateMipmap(GL_TEXTURE_2D); \u002F\u002F 生成mipmap\n\n\n    \u002F\u002F 创建VAO\n    unsigned int VAO;\n    glGenVertexArrays(1, &VAO);\n    glBindVertexArray(VAO); \u002F\u002F 绑定VAO\n\n    \u002F\u002F 创建VBO\n    unsigned int VBO;\n    glGenBuffers(1, &VBO);\n    glBindBuffer(GL_ARRAY_BUFFER, VBO); \u002F\u002F 绑定VBO\n    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);\n\n    int nrAttributes;\n    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);\n    std::cout \u003C\u003C \"Maximum nr of vertex attributes supported: \" \u003C\u003C nrAttributes \u003C\u003C std::endl;\n\n    \u002F\u002F 位置属性\n    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);\n    glEnableVertexAttribArray(0); \u002F\u002F 启用顶点属性\n    \n    \u002F\u002F 纹理属性\n    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));\n    glEnableVertexAttribArray(2);\n\n    \u002F\u002F 构建并编译着色器程序\n    Shader ourShader(\"shader\u002Fcustom.vert\", \"shader\u002Ffragment.vert\");\n\n    \u002F\u002F 渲染循环\n    while (!glfwWindowShouldClose(window)) {\n        \u002F\u002F 处理输入\n        processInput(window);\n        glfwPollEvents();\n\n        \u002F\u002F 更新view矩阵\n        view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);\n        \n        \u002F\u002F 渲染指令\n        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);\n        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n        \n        \u002F\u002F 使用着色器程序\n        ourShader.use();\n\n        \u002F\u002F 设置矩阵uniform\n        ourShader.setMat4(\"model\", model);\n        ourShader.setMat4(\"view\", view);\n        ourShader.setMat4(\"projection\", projection);\n        \n        ourShader.setInt(\"ourTexture\", 0);\n        ourShader.setInt(\"ourTexture2\", 1);\n        \n        glBindVertexArray(VAO);\n        \n        \u002F\u002F 绘制多个立方体\n        for(unsigned int i = 0; i \u003C 10; i++) {\n            glm::mat4 modelMatrix = glm::mat4(1.0f);\n            modelMatrix = glm::translate(modelMatrix, cubePositions[i]);\n            float angle = 20.0f * i; \n            modelMatrix = glm::rotate(modelMatrix, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));\n            ourShader.setMat4(\"model\", modelMatrix);\n\n            glDrawArrays(GL_TRIANGLES, 0, 36);\n        }\n        \n        \u002F\u002F 交换缓冲区和检查IO事件\n        glfwSwapBuffers(window);\n    }\n\n    \u002F\u002F 清理资源\n    glDeleteVertexArrays(1, &VAO);\n    glDeleteBuffers(1, &VBO);\n    glDeleteTextures(1, &texture);\n    glDeleteTextures(1, &texture2);\n    glfwTerminate();\n    return 0;\n}\n\n",[17,1113,1114,1123,1130,1137,1144,1151,1158,1165,1172,1179,1185,1198,1208,1212,1218,1253,1271,1276,1281,1298,1320,1329,1335,1356,1381,1415,1425,1431,1436,1441,1447,1478,1514,1547,1552,1558,1581,1601,1621,1641,1660,1677,1682,1688,1721,1727,1745,1751,1759,1770,1781,1794,1799,1804,1822,1842,1852,1862,1867,1884,1896,1906,1911,1922,1933,1938,1944,1962,1976,1995,2010,2015,2021,2030,2059,2075,2101,2115,2120,2125,2143,2149,2177,2191,2214,2226,2231,2245,2254,2260,2269,2281,2296,2316,2327,2333,2341,2352,2365,2383,2389,2394,2399,2405,2420,2425,2440,2455,2468,2483,2496,2511,2530,2545,2564,2569,2574,2584,2589,2595,2617,2666,2671,2677,2697,2717,2722,2728,2791,2796,2802,2814,2841,2871,2905,2938,2970,2976,2981,3006,3029,3055,3078,3095,3114,3129,3134,3140,3159,3175,3189,3211,3221,3226,3238,3260,3269,3274,3279,3312,3344,3349,3367,3383,3388,3393,3398,3404,3412,3426,3438,3446,3451,3457,3497,3512,3530,3538,3550,3555,3560,3569,3578,3587,3592,3598,3606,3611,3617,3632,3650,3661,3666,3671,3677,3686,3691,3703,3709,3751,3789,3824,3859,3896,3935,3940,3977,4012,4045,4078,4113,4150,4155,4190,4227,4266,4305,4342,4377,4382,4415,4450,4487,4524,4559,4592,4597,4636,4673,4708,4743,4780,4819,4824,4861,4896,4929,4962,4997,5033,5039,5044,5050,5055,5061,5073,5083,5103,5121,5126,5132,5141,5153,5165,5175,5186,5196,5218,5230,5235,5241,5249,5259,5268,5278,5287,5296,5315,5324,5329,5334,5340,5350,5367,5379,5384,5390,5400,5417,5429,5444,5449,5458,5472,5495,5500,5506,5546,5561,5566,5572,5618,5629,5634,5640,5661,5666,5672,5688,5694,5702,5710,5715,5721,5741,5747,5753,5787,5802,5807,5813,5824,5829,5835,5851,5866,5881,5886,5905,5923,5928,5937,5942,5948,5985,6015,6033,6054,6106,6121,6126,6144,6149,6154,6160,6168,6173,6178,6184,6200,6216,6233,6249,6257,6267],{"__ignoreMap":19},[74,1115,1116,1119],{"class":76,"line":77},[74,1117,1118],{"class":88},"#include",[74,1120,1122],{"class":1121},"sZZnC"," \u003Cglad\u002Fglad.h>\n",[74,1124,1125,1127],{"class":76,"line":192},[74,1126,1118],{"class":88},[74,1128,1129],{"class":1121}," \u003CGLFW\u002Fglfw3.h>\n",[74,1131,1132,1134],{"class":76,"line":475},[74,1133,1118],{"class":88},[74,1135,1136],{"class":1121}," \u003Copencv4\u002Fopencv2\u002Fopencv.hpp>\n",[74,1138,1139,1141],{"class":76,"line":505},[74,1140,1118],{"class":88},[74,1142,1143],{"class":1121}," \u003Ciostream>\n",[74,1145,1146,1148],{"class":76,"line":627},[74,1147,1118],{"class":88},[74,1149,1150],{"class":1121}," \u003Ccmath>\n",[74,1152,1153,1155],{"class":76,"line":938},[74,1154,1118],{"class":88},[74,1156,1157],{"class":1121}," \u003Cfilesystem>\n",[74,1159,1160,1162],{"class":76,"line":954},[74,1161,1118],{"class":88},[74,1163,1164],{"class":1121}," \"utils\u002Fshader.h\"\n",[74,1166,1167,1169],{"class":76,"line":970},[74,1168,1118],{"class":88},[74,1170,1171],{"class":1121}," \"utils\u002FglmCompute.h\"\n",[74,1173,1174,1176],{"class":76,"line":984},[74,1175,1118],{"class":88},[74,1177,1178],{"class":1121}," \"utils\u002Flogger.h\"\n",[74,1180,1181],{"class":76,"line":1000},[74,1182,1184],{"emptyLinePlaceholder":1183},true,"\n",[74,1186,1187,1190,1193,1196],{"class":76,"line":1029},[74,1188,1189],{"class":88},"using",[74,1191,1192],{"class":88}," namespace",[74,1194,1195],{"class":80}," cv",[74,1197,570],{"class":84},[74,1199,1200,1202,1204,1206],{"class":76,"line":1045},[74,1201,1189],{"class":88},[74,1203,1192],{"class":88},[74,1205,92],{"class":80},[74,1207,570],{"class":84},[74,1209,1210],{"class":76,"line":1072},[74,1211,1184],{"emptyLinePlaceholder":1183},[74,1213,1215],{"class":76,"line":1214},14,[74,1216,1217],{"class":914},"\u002F\u002F 窗口大小改变时的回调函数\n",[74,1219,1221,1223,1226,1228,1230,1232,1235,1237,1240,1243,1245,1247,1250],{"class":76,"line":1220},15,[74,1222,865],{"class":88},[74,1224,1225],{"class":80}," framebuffer_size_callback",[74,1227,101],{"class":84},[74,1229,873],{"class":80},[74,1231,593],{"class":88},[74,1233,1234],{"class":879}," window",[74,1236,111],{"class":84},[74,1238,1239],{"class":88},"int",[74,1241,1242],{"class":879}," width",[74,1244,111],{"class":84},[74,1246,1239],{"class":88},[74,1248,1249],{"class":879}," height",[74,1251,1252],{"class":84},") {\n",[74,1254,1256,1259,1261,1264,1266,1268],{"class":76,"line":1255},16,[74,1257,1258],{"class":80},"    glViewport",[74,1260,101],{"class":84},[74,1262,1263],{"class":104},"0",[74,1265,111],{"class":84},[74,1267,1263],{"class":104},[74,1269,1270],{"class":84},", width, height);\n",[74,1272,1274],{"class":76,"line":1273},17,[74,1275,1075],{"class":84},[74,1277,1279],{"class":76,"line":1278},18,[74,1280,1184],{"emptyLinePlaceholder":1183},[74,1282,1284,1287,1289,1292,1295],{"class":76,"line":1283},19,[74,1285,1286],{"class":80},"std",[74,1288,95],{"class":84},[74,1290,1291],{"class":80},"string",[74,1293,1294],{"class":80}," getCurrentWorkingDirectory",[74,1296,1297],{"class":84},"() {\n",[74,1299,1301,1304,1307,1310,1313,1315,1318],{"class":76,"line":1300},20,[74,1302,1303],{"class":88},"    namespace",[74,1305,1306],{"class":80}," fs",[74,1308,1309],{"class":88}," =",[74,1311,1312],{"class":80}," std",[74,1314,95],{"class":84},[74,1316,1317],{"class":80},"filesystem",[74,1319,570],{"class":84},[74,1321,1323,1326],{"class":76,"line":1322},21,[74,1324,1325],{"class":88},"    try",[74,1327,1328],{"class":84}," {\n",[74,1330,1332],{"class":76,"line":1331},22,[74,1333,1334],{"class":914},"        \u002F\u002F current_path() 返回当前工作目录\n",[74,1336,1338,1341,1343,1345,1348,1351,1353],{"class":76,"line":1337},23,[74,1339,1340],{"class":88},"        return",[74,1342,1306],{"class":80},[74,1344,95],{"class":84},[74,1346,1347],{"class":80},"current_path",[74,1349,1350],{"class":84},"().",[74,1352,1291],{"class":80},[74,1354,1355],{"class":84},"();\n",[74,1357,1359,1362,1365,1367,1370,1372,1375,1378],{"class":76,"line":1358},24,[74,1360,1361],{"class":84},"    } ",[74,1363,1364],{"class":88},"catch",[74,1366,923],{"class":84},[74,1368,1369],{"class":88},"const",[74,1371,1306],{"class":80},[74,1373,1374],{"class":84},"::filesystem_error",[74,1376,1377],{"class":88},"&",[74,1379,1380],{"class":84}," e) {\n",[74,1382,1384,1387,1390,1393,1396,1399,1402,1405,1408,1410,1412],{"class":76,"line":1383},25,[74,1385,1386],{"class":80},"        std",[74,1388,1389],{"class":84},"::cerr ",[74,1391,1392],{"class":88},"\u003C\u003C",[74,1394,1395],{"class":1121}," \"Filesystem Error: \"",[74,1397,1398],{"class":88}," \u003C\u003C",[74,1400,1401],{"class":84}," e.",[74,1403,1404],{"class":80},"what",[74,1406,1407],{"class":84},"() ",[74,1409,1392],{"class":88},[74,1411,1312],{"class":80},[74,1413,1414],{"class":84},"::endl;\n",[74,1416,1418,1420,1423],{"class":76,"line":1417},26,[74,1419,1340],{"class":88},[74,1421,1422],{"class":1121}," \"\"",[74,1424,570],{"class":84},[74,1426,1428],{"class":76,"line":1427},27,[74,1429,1430],{"class":84},"    }\n",[74,1432,1434],{"class":76,"line":1433},28,[74,1435,1075],{"class":84},[74,1437,1439],{"class":76,"line":1438},29,[74,1440,1184],{"emptyLinePlaceholder":1183},[74,1442,1444],{"class":76,"line":1443},30,[74,1445,1446],{"class":914},"\u002F\u002F 相机的位置和方向\n",[74,1448,1450,1453,1455,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476],{"class":76,"line":1449},31,[74,1451,1452],{"class":84},"vec3 cameraPos ",[74,1454,89],{"class":88},[74,1456,1457],{"class":80}," vec3",[74,1459,101],{"class":84},[74,1461,105],{"class":104},[74,1463,108],{"class":88},[74,1465,111],{"class":84},[74,1467,105],{"class":104},[74,1469,108],{"class":88},[74,1471,111],{"class":84},[74,1473,120],{"class":104},[74,1475,108],{"class":88},[74,1477,125],{"class":84},[74,1479,1481,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1511],{"class":76,"line":1480},32,[74,1482,1483],{"class":84},"vec3 cameraFront ",[74,1485,89],{"class":88},[74,1487,1457],{"class":80},[74,1489,101],{"class":84},[74,1491,105],{"class":104},[74,1493,108],{"class":88},[74,1495,111],{"class":84},[74,1497,105],{"class":104},[74,1499,108],{"class":88},[74,1501,111],{"class":84},[74,1503,212],{"class":88},[74,1505,272],{"class":104},[74,1507,108],{"class":88},[74,1509,1510],{"class":84},");",[74,1512,1513],{"class":914}," \u002F\u002F 相机朝向\n",[74,1515,1517,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544],{"class":76,"line":1516},33,[74,1518,1519],{"class":84},"vec3 cameraUp ",[74,1521,89],{"class":88},[74,1523,1457],{"class":80},[74,1525,101],{"class":84},[74,1527,105],{"class":104},[74,1529,108],{"class":88},[74,1531,111],{"class":84},[74,1533,272],{"class":104},[74,1535,108],{"class":88},[74,1537,111],{"class":84},[74,1539,105],{"class":104},[74,1541,108],{"class":88},[74,1543,1510],{"class":84},[74,1545,1546],{"class":914}," \u002F\u002F 上向量\n",[74,1548,1550],{"class":76,"line":1549},34,[74,1551,1184],{"emptyLinePlaceholder":1183},[74,1553,1555],{"class":76,"line":1554},35,[74,1556,1557],{"class":914},"\u002F\u002F 鼠标控制变量\n",[74,1559,1561,1563,1566,1568,1571,1574,1576,1578],{"class":76,"line":1560},36,[74,1562,557],{"class":88},[74,1564,1565],{"class":84}," yawAngle ",[74,1567,89],{"class":88},[74,1569,1570],{"class":88}," -",[74,1572,1573],{"class":104},"90.0",[74,1575,108],{"class":88},[74,1577,911],{"class":84},[74,1579,1580],{"class":914},"   \u002F\u002F 偏航角\n",[74,1582,1584,1586,1589,1591,1594,1596,1598],{"class":76,"line":1583},37,[74,1585,557],{"class":88},[74,1587,1588],{"class":84}," pitchAngle ",[74,1590,89],{"class":88},[74,1592,1593],{"class":104}," 0.0",[74,1595,108],{"class":88},[74,1597,911],{"class":84},[74,1599,1600],{"class":914},"   \u002F\u002F 俯仰角\n",[74,1602,1604,1606,1609,1611,1614,1616,1618],{"class":76,"line":1603},38,[74,1605,557],{"class":88},[74,1607,1608],{"class":84}," lastX ",[74,1610,89],{"class":88},[74,1612,1613],{"class":104}," 400.0",[74,1615,108],{"class":88},[74,1617,911],{"class":84},[74,1619,1620],{"class":914}," \u002F\u002F 鼠标上次X位置\n",[74,1622,1624,1626,1629,1631,1634,1636,1638],{"class":76,"line":1623},39,[74,1625,557],{"class":88},[74,1627,1628],{"class":84}," lastY ",[74,1630,89],{"class":88},[74,1632,1633],{"class":104}," 300.0",[74,1635,108],{"class":88},[74,1637,911],{"class":84},[74,1639,1640],{"class":914}," \u002F\u002F 鼠标上次Y位置\n",[74,1642,1644,1647,1650,1652,1655,1657],{"class":76,"line":1643},40,[74,1645,1646],{"class":88},"bool",[74,1648,1649],{"class":84}," firstMouse ",[74,1651,89],{"class":88},[74,1653,1654],{"class":104}," true",[74,1656,911],{"class":84},[74,1658,1659],{"class":914}," \u002F\u002F 是否是第一次鼠标移动\n",[74,1661,1663,1665,1668,1670,1672,1674],{"class":76,"line":1662},41,[74,1664,1646],{"class":88},[74,1666,1667],{"class":84}," mouseCaptured ",[74,1669,89],{"class":88},[74,1671,1654],{"class":104},[74,1673,911],{"class":84},[74,1675,1676],{"class":914}," \u002F\u002F 鼠标是否被捕获\n",[74,1678,1680],{"class":76,"line":1679},42,[74,1681,1184],{"emptyLinePlaceholder":1183},[74,1683,1685],{"class":76,"line":1684},43,[74,1686,1687],{"class":914},"\u002F\u002F 鼠标回调函数\n",[74,1689,1691,1693,1696,1698,1700,1702,1704,1706,1709,1712,1714,1716,1719],{"class":76,"line":1690},44,[74,1692,865],{"class":88},[74,1694,1695],{"class":80}," mouse_callback",[74,1697,101],{"class":84},[74,1699,873],{"class":80},[74,1701,593],{"class":88},[74,1703,1234],{"class":879},[74,1705,111],{"class":84},[74,1707,1708],{"class":88},"double",[74,1710,1711],{"class":879}," xpos",[74,1713,111],{"class":84},[74,1715,1708],{"class":88},[74,1717,1718],{"class":879}," ypos",[74,1720,1252],{"class":84},[74,1722,1724],{"class":76,"line":1723},45,[74,1725,1726],{"class":914},"    \u002F\u002F 只有在鼠标被捕获时才处理鼠标移动\n",[74,1728,1730,1732,1734,1737,1740,1743],{"class":76,"line":1729},46,[74,1731,920],{"class":88},[74,1733,923],{"class":84},[74,1735,1736],{"class":88},"!",[74,1738,1739],{"class":84},"mouseCaptured) ",[74,1741,1742],{"class":88},"return",[74,1744,570],{"class":84},[74,1746,1748],{"class":76,"line":1747},47,[74,1749,1750],{"class":84},"    \n",[74,1752,1754,1756],{"class":76,"line":1753},48,[74,1755,920],{"class":88},[74,1757,1758],{"class":84}," (firstMouse) {\n",[74,1760,1762,1765,1767],{"class":76,"line":1761},49,[74,1763,1764],{"class":84},"        lastX ",[74,1766,89],{"class":88},[74,1768,1769],{"class":84}," xpos;\n",[74,1771,1773,1776,1778],{"class":76,"line":1772},50,[74,1774,1775],{"class":84},"        lastY ",[74,1777,89],{"class":88},[74,1779,1780],{"class":84}," ypos;\n",[74,1782,1784,1787,1789,1792],{"class":76,"line":1783},51,[74,1785,1786],{"class":84},"        firstMouse ",[74,1788,89],{"class":88},[74,1790,1791],{"class":104}," false",[74,1793,570],{"class":84},[74,1795,1797],{"class":76,"line":1796},52,[74,1798,1430],{"class":84},[74,1800,1802],{"class":76,"line":1801},53,[74,1803,1184],{"emptyLinePlaceholder":1183},[74,1805,1807,1809,1812,1814,1817,1819],{"class":76,"line":1806},54,[74,1808,898],{"class":88},[74,1810,1811],{"class":84}," xoffset ",[74,1813,89],{"class":88},[74,1815,1816],{"class":84}," xpos ",[74,1818,212],{"class":88},[74,1820,1821],{"class":84}," lastX;\n",[74,1823,1825,1827,1830,1832,1834,1836,1839],{"class":76,"line":1824},55,[74,1826,898],{"class":88},[74,1828,1829],{"class":84}," yoffset ",[74,1831,89],{"class":88},[74,1833,1628],{"class":84},[74,1835,212],{"class":88},[74,1837,1838],{"class":84}," ypos;",[74,1840,1841],{"class":914}," \u002F\u002F 注意这里是相反的，因为y坐标是从底部往顶部递增的\n",[74,1843,1845,1848,1850],{"class":76,"line":1844},56,[74,1846,1847],{"class":84},"    lastX ",[74,1849,89],{"class":88},[74,1851,1769],{"class":84},[74,1853,1855,1858,1860],{"class":76,"line":1854},57,[74,1856,1857],{"class":84},"    lastY ",[74,1859,89],{"class":88},[74,1861,1780],{"class":84},[74,1863,1865],{"class":76,"line":1864},58,[74,1866,1184],{"emptyLinePlaceholder":1183},[74,1868,1870,1872,1875,1877,1880,1882],{"class":76,"line":1869},59,[74,1871,898],{"class":88},[74,1873,1874],{"class":84}," sensitivity ",[74,1876,89],{"class":88},[74,1878,1879],{"class":104}," 0.1",[74,1881,108],{"class":88},[74,1883,570],{"class":84},[74,1885,1887,1890,1893],{"class":76,"line":1886},60,[74,1888,1889],{"class":84},"    xoffset ",[74,1891,1892],{"class":88},"*=",[74,1894,1895],{"class":84}," sensitivity;\n",[74,1897,1899,1902,1904],{"class":76,"line":1898},61,[74,1900,1901],{"class":84},"    yoffset ",[74,1903,1892],{"class":88},[74,1905,1895],{"class":84},[74,1907,1909],{"class":76,"line":1908},62,[74,1910,1184],{"emptyLinePlaceholder":1183},[74,1912,1914,1917,1919],{"class":76,"line":1913},63,[74,1915,1916],{"class":84},"    yawAngle ",[74,1918,944],{"class":88},[74,1920,1921],{"class":84}," xoffset;\n",[74,1923,1925,1928,1930],{"class":76,"line":1924},64,[74,1926,1927],{"class":84},"    pitchAngle ",[74,1929,944],{"class":88},[74,1931,1932],{"class":84}," yoffset;\n",[74,1934,1936],{"class":76,"line":1935},65,[74,1937,1184],{"emptyLinePlaceholder":1183},[74,1939,1941],{"class":76,"line":1940},66,[74,1942,1943],{"class":914},"    \u002F\u002F 限制俯仰角，避免翻转\n",[74,1945,1947,1949,1952,1955,1958,1960],{"class":76,"line":1946},67,[74,1948,920],{"class":88},[74,1950,1951],{"class":84}," (pitchAngle ",[74,1953,1954],{"class":88},">",[74,1956,1957],{"class":104}," 89.0",[74,1959,108],{"class":88},[74,1961,883],{"class":84},[74,1963,1965,1968,1970,1972,1974],{"class":76,"line":1964},68,[74,1966,1967],{"class":84},"        pitchAngle ",[74,1969,89],{"class":88},[74,1971,1957],{"class":104},[74,1973,108],{"class":88},[74,1975,570],{"class":84},[74,1977,1979,1981,1983,1986,1988,1991,1993],{"class":76,"line":1978},69,[74,1980,920],{"class":88},[74,1982,1951],{"class":84},[74,1984,1985],{"class":88},"\u003C",[74,1987,1570],{"class":88},[74,1989,1990],{"class":104},"89.0",[74,1992,108],{"class":88},[74,1994,883],{"class":84},[74,1996,1998,2000,2002,2004,2006,2008],{"class":76,"line":1997},70,[74,1999,1967],{"class":84},[74,2001,89],{"class":88},[74,2003,1570],{"class":88},[74,2005,1990],{"class":104},[74,2007,108],{"class":88},[74,2009,570],{"class":84},[74,2011,2013],{"class":76,"line":2012},71,[74,2014,1184],{"emptyLinePlaceholder":1183},[74,2016,2018],{"class":76,"line":2017},72,[74,2019,2020],{"class":914},"    \u002F\u002F 计算新的相机方向\n",[74,2022,2024,2027],{"class":76,"line":2023},73,[74,2025,2026],{"class":80},"    vec3",[74,2028,2029],{"class":84}," front;\n",[74,2031,2033,2036,2038,2040,2042,2045,2048,2050,2052,2054,2056],{"class":76,"line":2032},74,[74,2034,2035],{"class":84},"    front.x ",[74,2037,89],{"class":88},[74,2039,608],{"class":80},[74,2041,101],{"class":84},[74,2043,2044],{"class":80},"radians",[74,2046,2047],{"class":84},"(yawAngle)) ",[74,2049,593],{"class":88},[74,2051,608],{"class":80},[74,2053,101],{"class":84},[74,2055,2044],{"class":80},[74,2057,2058],{"class":84},"(pitchAngle));\n",[74,2060,2062,2065,2067,2069,2071,2073],{"class":76,"line":2061},75,[74,2063,2064],{"class":84},"    front.y ",[74,2066,89],{"class":88},[74,2068,582],{"class":80},[74,2070,101],{"class":84},[74,2072,2044],{"class":80},[74,2074,2058],{"class":84},[74,2076,2078,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099],{"class":76,"line":2077},76,[74,2079,2080],{"class":84},"    front.z ",[74,2082,89],{"class":88},[74,2084,582],{"class":80},[74,2086,101],{"class":84},[74,2088,2044],{"class":80},[74,2090,2047],{"class":84},[74,2092,593],{"class":88},[74,2094,608],{"class":80},[74,2096,101],{"class":84},[74,2098,2044],{"class":80},[74,2100,2058],{"class":84},[74,2102,2104,2107,2109,2112],{"class":76,"line":2103},77,[74,2105,2106],{"class":84},"    cameraFront ",[74,2108,89],{"class":88},[74,2110,2111],{"class":80}," normalize",[74,2113,2114],{"class":84},"(front);\n",[74,2116,2118],{"class":76,"line":2117},78,[74,2119,1075],{"class":84},[74,2121,2123],{"class":76,"line":2122},79,[74,2124,1184],{"emptyLinePlaceholder":1183},[74,2126,2128,2130,2132,2134,2136,2138,2140],{"class":76,"line":2127},80,[74,2129,865],{"class":88},[74,2131,868],{"class":80},[74,2133,101],{"class":84},[74,2135,873],{"class":80},[74,2137,876],{"class":88},[74,2139,880],{"class":879},[74,2141,2142],{"class":84},"){\n",[74,2144,2146],{"class":76,"line":2145},81,[74,2147,2148],{"class":914},"    \u002F\u002F 检查 Ctrl+Alt 组合键来切换鼠标捕获状态\n",[74,2150,2152,2155,2158,2160,2163,2166,2168,2171,2174],{"class":76,"line":2151},82,[74,2153,2154],{"class":88},"    bool",[74,2156,2157],{"class":84}," ctrlPressed ",[74,2159,89],{"class":88},[74,2161,2162],{"class":80}," glfwGetKey",[74,2164,2165],{"class":84},"(window, GLFW_KEY_LEFT_CONTROL) ",[74,2167,932],{"class":88},[74,2169,2170],{"class":84}," GLFW_PRESS ",[74,2172,2173],{"class":88},"||",[74,2175,2176],{"class":84}," \n",[74,2178,2180,2183,2186,2188],{"class":76,"line":2179},83,[74,2181,2182],{"class":80},"                      glfwGetKey",[74,2184,2185],{"class":84},"(window, GLFW_KEY_RIGHT_CONTROL) ",[74,2187,932],{"class":88},[74,2189,2190],{"class":84}," GLFW_PRESS;\n",[74,2192,2194,2196,2199,2201,2203,2206,2208,2210,2212],{"class":76,"line":2193},84,[74,2195,2154],{"class":88},[74,2197,2198],{"class":84}," altPressed ",[74,2200,89],{"class":88},[74,2202,2162],{"class":80},[74,2204,2205],{"class":84},"(window, GLFW_KEY_LEFT_ALT) ",[74,2207,932],{"class":88},[74,2209,2170],{"class":84},[74,2211,2173],{"class":88},[74,2213,2176],{"class":84},[74,2215,2217,2219,2222,2224],{"class":76,"line":2216},85,[74,2218,2182],{"class":80},[74,2220,2221],{"class":84},"(window, GLFW_KEY_RIGHT_ALT) ",[74,2223,932],{"class":88},[74,2225,2190],{"class":84},[74,2227,2229],{"class":76,"line":2228},86,[74,2230,1750],{"class":84},[74,2232,2234,2236,2239,2242],{"class":76,"line":2233},87,[74,2235,920],{"class":88},[74,2237,2238],{"class":84}," (ctrlPressed ",[74,2240,2241],{"class":88},"&&",[74,2243,2244],{"class":84}," altPressed) {\n",[74,2246,2248,2251],{"class":76,"line":2247},88,[74,2249,2250],{"class":88},"        if",[74,2252,2253],{"class":84}," (mouseCaptured) {\n",[74,2255,2257],{"class":76,"line":2256},89,[74,2258,2259],{"class":914},"            \u002F\u002F 释放鼠标捕获\n",[74,2261,2263,2266],{"class":76,"line":2262},90,[74,2264,2265],{"class":80},"            glfwSetInputMode",[74,2267,2268],{"class":84},"(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);\n",[74,2270,2272,2275,2277,2279],{"class":76,"line":2271},91,[74,2273,2274],{"class":84},"            mouseCaptured ",[74,2276,89],{"class":88},[74,2278,1791],{"class":104},[74,2280,570],{"class":84},[74,2282,2284,2287,2289,2291,2293],{"class":76,"line":2283},92,[74,2285,2286],{"class":84},"            firstMouse ",[74,2288,89],{"class":88},[74,2290,1654],{"class":104},[74,2292,911],{"class":84},[74,2294,2295],{"class":914}," \u002F\u002F 重置鼠标状态\n",[74,2297,2299,2302,2305,2307,2310,2312,2314],{"class":76,"line":2298},93,[74,2300,2301],{"class":80},"            std",[74,2303,2304],{"class":84},"::cout ",[74,2306,1392],{"class":88},[74,2308,2309],{"class":1121}," \"鼠标捕获已释放 - 按 Ctrl+Alt 重新捕获\"",[74,2311,1398],{"class":88},[74,2313,1312],{"class":80},[74,2315,1414],{"class":84},[74,2317,2319,2322,2325],{"class":76,"line":2318},94,[74,2320,2321],{"class":84},"        } ",[74,2323,2324],{"class":88},"else",[74,2326,1328],{"class":84},[74,2328,2330],{"class":76,"line":2329},95,[74,2331,2332],{"class":914},"            \u002F\u002F 重新捕获鼠标\n",[74,2334,2336,2338],{"class":76,"line":2335},96,[74,2337,2265],{"class":80},[74,2339,2340],{"class":84},"(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n",[74,2342,2344,2346,2348,2350],{"class":76,"line":2343},97,[74,2345,2274],{"class":84},[74,2347,89],{"class":88},[74,2349,1654],{"class":104},[74,2351,570],{"class":84},[74,2353,2355,2357,2359,2361,2363],{"class":76,"line":2354},98,[74,2356,2286],{"class":84},[74,2358,89],{"class":88},[74,2360,1654],{"class":104},[74,2362,911],{"class":84},[74,2364,2295],{"class":914},[74,2366,2368,2370,2372,2374,2377,2379,2381],{"class":76,"line":2367},99,[74,2369,2301],{"class":80},[74,2371,2304],{"class":84},[74,2373,1392],{"class":88},[74,2375,2376],{"class":1121}," \"鼠标捕获已启用\"",[74,2378,1398],{"class":88},[74,2380,1312],{"class":80},[74,2382,1414],{"class":84},[74,2384,2386],{"class":76,"line":2385},100,[74,2387,2388],{"class":84},"        }\n",[74,2390,2392],{"class":76,"line":2391},101,[74,2393,1430],{"class":84},[74,2395,2397],{"class":76,"line":2396},102,[74,2398,1750],{"class":84},[74,2400,2402],{"class":76,"line":2401},103,[74,2403,2404],{"class":914},"    \u002F\u002F 只有在鼠标被捕获时才处理WASD移动\n",[74,2406,2408,2410,2412,2414,2416,2418],{"class":76,"line":2407},104,[74,2409,920],{"class":88},[74,2411,923],{"class":84},[74,2413,1736],{"class":88},[74,2415,1739],{"class":84},[74,2417,1742],{"class":88},[74,2419,570],{"class":84},[74,2421,2423],{"class":76,"line":2422},105,[74,2424,1750],{"class":84},[74,2426,2428,2430,2432,2434,2436,2438],{"class":76,"line":2427},106,[74,2429,898],{"class":88},[74,2431,901],{"class":84},[74,2433,89],{"class":88},[74,2435,906],{"class":104},[74,2437,108],{"class":88},[74,2439,570],{"class":84},[74,2441,2443,2445,2447,2449,2451,2453],{"class":76,"line":2442},107,[74,2444,920],{"class":88},[74,2446,923],{"class":84},[74,2448,926],{"class":80},[74,2450,929],{"class":84},[74,2452,932],{"class":88},[74,2454,935],{"class":84},[74,2456,2458,2460,2462,2464,2466],{"class":76,"line":2457},108,[74,2459,941],{"class":84},[74,2461,944],{"class":88},[74,2463,901],{"class":84},[74,2465,593],{"class":88},[74,2467,951],{"class":84},[74,2469,2471,2473,2475,2477,2479,2481],{"class":76,"line":2470},109,[74,2472,920],{"class":88},[74,2474,923],{"class":84},[74,2476,926],{"class":80},[74,2478,963],{"class":84},[74,2480,932],{"class":88},[74,2482,935],{"class":84},[74,2484,2486,2488,2490,2492,2494],{"class":76,"line":2485},110,[74,2487,941],{"class":84},[74,2489,975],{"class":88},[74,2491,901],{"class":84},[74,2493,593],{"class":88},[74,2495,951],{"class":84},[74,2497,2499,2501,2503,2505,2507,2509],{"class":76,"line":2498},111,[74,2500,920],{"class":88},[74,2502,923],{"class":84},[74,2504,926],{"class":80},[74,2506,993],{"class":84},[74,2508,932],{"class":88},[74,2510,935],{"class":84},[74,2512,2514,2516,2518,2520,2522,2524,2526,2528],{"class":76,"line":2513},112,[74,2515,941],{"class":84},[74,2517,975],{"class":88},[74,2519,2111],{"class":80},[74,2521,101],{"class":84},[74,2523,307],{"class":80},[74,2525,1021],{"class":84},[74,2527,593],{"class":88},[74,2529,1026],{"class":84},[74,2531,2533,2535,2537,2539,2541,2543],{"class":76,"line":2532},113,[74,2534,920],{"class":88},[74,2536,923],{"class":84},[74,2538,926],{"class":80},[74,2540,1038],{"class":84},[74,2542,932],{"class":88},[74,2544,935],{"class":84},[74,2546,2548,2550,2552,2554,2556,2558,2560,2562],{"class":76,"line":2547},114,[74,2549,941],{"class":84},[74,2551,944],{"class":88},[74,2553,2111],{"class":80},[74,2555,101],{"class":84},[74,2557,307],{"class":80},[74,2559,1021],{"class":84},[74,2561,593],{"class":88},[74,2563,1026],{"class":84},[74,2565,2567],{"class":76,"line":2566},115,[74,2568,1075],{"class":84},[74,2570,2572],{"class":76,"line":2571},116,[74,2573,1184],{"emptyLinePlaceholder":1183},[74,2575,2577,2579,2582],{"class":76,"line":2576},117,[74,2578,1239],{"class":88},[74,2580,2581],{"class":80}," main",[74,2583,1297],{"class":84},[74,2585,2587],{"class":76,"line":2586},118,[74,2588,1184],{"emptyLinePlaceholder":1183},[74,2590,2592],{"class":76,"line":2591},119,[74,2593,2594],{"class":914},"    \u002F\u002F 模型矩阵\n",[74,2596,2598,2601,2604,2606,2609,2611,2613,2615],{"class":76,"line":2597},120,[74,2599,2600],{"class":80},"    mat4",[74,2602,2603],{"class":84}," model ",[74,2605,89],{"class":88},[74,2607,2608],{"class":80}," mat4",[74,2610,101],{"class":84},[74,2612,272],{"class":104},[74,2614,108],{"class":88},[74,2616,125],{"class":84},[74,2618,2620,2623,2625,2628,2631,2633,2635,2637,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664],{"class":76,"line":2619},121,[74,2621,2622],{"class":84},"    model ",[74,2624,89],{"class":88},[74,2626,2627],{"class":80}," rotate",[74,2629,2630],{"class":84},"(model, ",[74,2632,2044],{"class":80},[74,2634,101],{"class":84},[74,2636,212],{"class":88},[74,2638,2639],{"class":104},"55.0",[74,2641,108],{"class":88},[74,2643,674],{"class":84},[74,2645,98],{"class":80},[74,2647,101],{"class":84},[74,2649,272],{"class":104},[74,2651,108],{"class":88},[74,2653,111],{"class":84},[74,2655,105],{"class":104},[74,2657,108],{"class":88},[74,2659,111],{"class":84},[74,2661,105],{"class":104},[74,2663,108],{"class":88},[74,2665,532],{"class":84},[74,2667,2669],{"class":76,"line":2668},122,[74,2670,1184],{"emptyLinePlaceholder":1183},[74,2672,2674],{"class":76,"line":2673},123,[74,2675,2676],{"class":914},"    \u002F\u002F lookat矩阵\n",[74,2678,2680,2682,2685,2687,2689,2691,2693,2695],{"class":76,"line":2679},124,[74,2681,2600],{"class":80},[74,2683,2684],{"class":84}," view ",[74,2686,89],{"class":88},[74,2688,2608],{"class":80},[74,2690,101],{"class":84},[74,2692,272],{"class":104},[74,2694,108],{"class":88},[74,2696,125],{"class":84},[74,2698,2700,2703,2705,2707,2709,2711,2713,2715],{"class":76,"line":2699},125,[74,2701,2702],{"class":84},"    view ",[74,2704,89],{"class":88},[74,2706,92],{"class":80},[74,2708,95],{"class":84},[74,2710,443],{"class":80},[74,2712,839],{"class":84},[74,2714,842],{"class":88},[74,2716,845],{"class":84},[74,2718,2720],{"class":76,"line":2719},126,[74,2721,1184],{"emptyLinePlaceholder":1183},[74,2723,2725],{"class":76,"line":2724},127,[74,2726,2727],{"class":914},"    \u002F\u002F 投影矩阵\n",[74,2729,2731,2733,2736,2738,2741,2743,2745,2747,2750,2752,2755,2757,2760,2763,2766,2768,2770,2772,2775,2777,2780,2782,2784,2787,2789],{"class":76,"line":2730},128,[74,2732,2600],{"class":80},[74,2734,2735],{"class":84}," projection ",[74,2737,89],{"class":88},[74,2739,2740],{"class":80}," perspective",[74,2742,101],{"class":84},[74,2744,2044],{"class":80},[74,2746,101],{"class":84},[74,2748,2749],{"class":104},"45.0",[74,2751,108],{"class":88},[74,2753,2754],{"class":84},"), (",[74,2756,557],{"class":88},[74,2758,2759],{"class":84},")",[74,2761,2762],{"class":104},"800",[74,2764,2765],{"class":88}," \u002F",[74,2767,923],{"class":84},[74,2769,557],{"class":88},[74,2771,2759],{"class":84},[74,2773,2774],{"class":104},"600",[74,2776,111],{"class":84},[74,2778,2779],{"class":104},"0.1",[74,2781,108],{"class":88},[74,2783,111],{"class":84},[74,2785,2786],{"class":104},"100.0",[74,2788,108],{"class":88},[74,2790,125],{"class":84},[74,2792,2794],{"class":76,"line":2793},129,[74,2795,1184],{"emptyLinePlaceholder":1183},[74,2797,2799],{"class":76,"line":2798},130,[74,2800,2801],{"class":914},"    \u002F\u002F 立方体数组\n",[74,2803,2805,2807,2810,2812],{"class":76,"line":2804},131,[74,2806,2026],{"class":80},[74,2808,2809],{"class":84}," cubePositions[] ",[74,2811,89],{"class":88},[74,2813,1328],{"class":84},[74,2815,2817,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838],{"class":76,"line":2816},132,[74,2818,2819],{"class":80},"        vec3",[74,2821,101],{"class":84},[74,2823,105],{"class":104},[74,2825,108],{"class":88},[74,2827,736],{"class":84},[74,2829,105],{"class":104},[74,2831,108],{"class":88},[74,2833,736],{"class":84},[74,2835,105],{"class":104},[74,2837,108],{"class":88},[74,2839,2840],{"class":84},"),\n",[74,2842,2844,2846,2848,2851,2853,2855,2858,2860,2862,2864,2867,2869],{"class":76,"line":2843},133,[74,2845,2819],{"class":80},[74,2847,101],{"class":84},[74,2849,2850],{"class":104},"2.0",[74,2852,108],{"class":88},[74,2854,736],{"class":84},[74,2856,2857],{"class":104},"5.0",[74,2859,108],{"class":88},[74,2861,111],{"class":84},[74,2863,212],{"class":88},[74,2865,2866],{"class":104},"15.0",[74,2868,108],{"class":88},[74,2870,2840],{"class":84},[74,2872,2874,2876,2878,2880,2883,2885,2887,2889,2892,2894,2896,2898,2901,2903],{"class":76,"line":2873},134,[74,2875,2819],{"class":80},[74,2877,101],{"class":84},[74,2879,212],{"class":88},[74,2881,2882],{"class":104},"1.5",[74,2884,108],{"class":88},[74,2886,111],{"class":84},[74,2888,212],{"class":88},[74,2890,2891],{"class":104},"2.2",[74,2893,108],{"class":88},[74,2895,111],{"class":84},[74,2897,212],{"class":88},[74,2899,2900],{"class":104},"2.5",[74,2902,108],{"class":88},[74,2904,2840],{"class":84},[74,2906,2908,2910,2912,2914,2917,2919,2921,2923,2925,2927,2929,2931,2934,2936],{"class":76,"line":2907},135,[74,2909,2819],{"class":80},[74,2911,101],{"class":84},[74,2913,212],{"class":88},[74,2915,2916],{"class":104},"3.8",[74,2918,108],{"class":88},[74,2920,111],{"class":84},[74,2922,212],{"class":88},[74,2924,2850],{"class":104},[74,2926,108],{"class":88},[74,2928,111],{"class":84},[74,2930,212],{"class":88},[74,2932,2933],{"class":104},"12.3",[74,2935,108],{"class":88},[74,2937,2840],{"class":84},[74,2939,2941,2943,2945,2948,2950,2952,2954,2957,2959,2961,2963,2966,2968],{"class":76,"line":2940},136,[74,2942,2819],{"class":80},[74,2944,101],{"class":84},[74,2946,2947],{"class":104},"2.4",[74,2949,108],{"class":88},[74,2951,111],{"class":84},[74,2953,212],{"class":88},[74,2955,2956],{"class":104},"0.4",[74,2958,108],{"class":88},[74,2960,111],{"class":84},[74,2962,212],{"class":88},[74,2964,2965],{"class":104},"3.5",[74,2967,108],{"class":88},[74,2969,2840],{"class":84},[74,2971,2973],{"class":76,"line":2972},137,[74,2974,2975],{"class":84},"    };\n",[74,2977,2979],{"class":76,"line":2978},138,[74,2980,1184],{"emptyLinePlaceholder":1183},[74,2982,2984,2987,2990,2992,2994,2996,2999,3001,3004],{"class":76,"line":2983},139,[74,2985,2986],{"class":88},"    auto",[74,2988,2989],{"class":84}," path ",[74,2991,89],{"class":88},[74,2993,1294],{"class":80},[74,2995,1350],{"class":84},[74,2997,2998],{"class":80},"append",[74,3000,101],{"class":84},[74,3002,3003],{"class":1121},"\"\u002FAssets\u002Fimage.png\"",[74,3005,125],{"class":84},[74,3007,3009,3011,3014,3016,3018,3020,3022,3024,3027],{"class":76,"line":3008},140,[74,3010,2986],{"class":88},[74,3012,3013],{"class":84}," path2 ",[74,3015,89],{"class":88},[74,3017,1294],{"class":80},[74,3019,1350],{"class":84},[74,3021,2998],{"class":80},[74,3023,101],{"class":84},[74,3025,3026],{"class":1121},"\"\u002FAssets\u002Fimage2.png\"",[74,3028,125],{"class":84},[74,3030,3032,3035,3037,3040,3043,3045,3047,3049,3052],{"class":76,"line":3031},141,[74,3033,3034],{"class":80},"    cv",[74,3036,95],{"class":84},[74,3038,3039],{"class":80},"Mat",[74,3041,3042],{"class":84}," image ",[74,3044,89],{"class":88},[74,3046,1195],{"class":80},[74,3048,95],{"class":84},[74,3050,3051],{"class":80},"imread",[74,3053,3054],{"class":84},"(path);\n",[74,3056,3058,3060,3062,3064,3067,3069,3071,3073,3075],{"class":76,"line":3057},142,[74,3059,3034],{"class":80},[74,3061,95],{"class":84},[74,3063,3039],{"class":80},[74,3065,3066],{"class":84}," image2 ",[74,3068,89],{"class":88},[74,3070,1195],{"class":80},[74,3072,95],{"class":84},[74,3074,3051],{"class":80},[74,3076,3077],{"class":84},"(path2);\n",[74,3079,3081,3083,3085,3088,3091,3093],{"class":76,"line":3080},143,[74,3082,3034],{"class":80},[74,3084,95],{"class":84},[74,3086,3087],{"class":80},"flip",[74,3089,3090],{"class":84},"(image2, image2, ",[74,3092,1263],{"class":104},[74,3094,125],{"class":84},[74,3096,3098,3100,3102,3105,3108,3111],{"class":76,"line":3097},144,[74,3099,3034],{"class":80},[74,3101,95],{"class":84},[74,3103,3104],{"class":80},"cvtColor",[74,3106,3107],{"class":84},"(image, image, ",[74,3109,3110],{"class":80},"cv",[74,3112,3113],{"class":84},"::COLOR_BGR2RGB);\n",[74,3115,3117,3119,3121,3123,3125,3127],{"class":76,"line":3116},145,[74,3118,3034],{"class":80},[74,3120,95],{"class":84},[74,3122,3104],{"class":80},[74,3124,3090],{"class":84},[74,3126,3110],{"class":80},[74,3128,3113],{"class":84},[74,3130,3132],{"class":76,"line":3131},146,[74,3133,1184],{"emptyLinePlaceholder":1183},[74,3135,3137],{"class":76,"line":3136},147,[74,3138,3139],{"class":914},"    \u002F\u002F 转换为字节数组\n",[74,3141,3143,3146,3148,3151,3153,3156],{"class":76,"line":3142},148,[74,3144,3145],{"class":80},"    std",[74,3147,95],{"class":84},[74,3149,3150],{"class":80},"vector",[74,3152,1985],{"class":84},[74,3154,3155],{"class":80},"uchar",[74,3157,3158],{"class":84},"> imageData;\n",[74,3160,3162,3164,3166,3168,3170,3172],{"class":76,"line":3161},149,[74,3163,3145],{"class":80},[74,3165,95],{"class":84},[74,3167,3150],{"class":80},[74,3169,1985],{"class":84},[74,3171,3155],{"class":80},[74,3173,3174],{"class":84},"> imageData2;\n",[74,3176,3178,3180,3183,3186],{"class":76,"line":3177},150,[74,3179,920],{"class":88},[74,3181,3182],{"class":84}," (image.",[74,3184,3185],{"class":80},"empty",[74,3187,3188],{"class":84},"()) {\n",[74,3190,3192,3194,3196,3198,3201,3203,3205,3207,3209],{"class":76,"line":3191},151,[74,3193,1386],{"class":80},[74,3195,1389],{"class":84},[74,3197,1392],{"class":88},[74,3199,3200],{"class":1121}," \"Could not read the image: \"",[74,3202,1398],{"class":88},[74,3204,2989],{"class":84},[74,3206,1392],{"class":88},[74,3208,1312],{"class":80},[74,3210,1414],{"class":84},[74,3212,3214,3216,3219],{"class":76,"line":3213},152,[74,3215,1340],{"class":88},[74,3217,3218],{"class":104}," 1",[74,3220,570],{"class":84},[74,3222,3224],{"class":76,"line":3223},153,[74,3225,1430],{"class":84},[74,3227,3229,3231,3234,3236],{"class":76,"line":3228},154,[74,3230,920],{"class":88},[74,3232,3233],{"class":84}," (image2.",[74,3235,3185],{"class":80},[74,3237,3188],{"class":84},[74,3239,3241,3243,3245,3247,3250,3252,3254,3256,3258],{"class":76,"line":3240},155,[74,3242,1386],{"class":80},[74,3244,1389],{"class":84},[74,3246,1392],{"class":88},[74,3248,3249],{"class":1121}," \"Could not read the image2: \"",[74,3251,1398],{"class":88},[74,3253,3013],{"class":84},[74,3255,1392],{"class":88},[74,3257,1312],{"class":80},[74,3259,1414],{"class":84},[74,3261,3263,3265,3267],{"class":76,"line":3262},156,[74,3264,1340],{"class":88},[74,3266,3218],{"class":104},[74,3268,570],{"class":84},[74,3270,3272],{"class":76,"line":3271},157,[74,3273,1430],{"class":84},[74,3275,3277],{"class":76,"line":3276},158,[74,3278,1750],{"class":84},[74,3280,3282,3284,3286,3288,3291,3293,3296,3298,3301,3303,3306,3308,3310],{"class":76,"line":3281},159,[74,3283,3145],{"class":80},[74,3285,2304],{"class":84},[74,3287,1392],{"class":88},[74,3289,3290],{"class":1121}," \"Image 1 loaded: \"",[74,3292,1398],{"class":88},[74,3294,3295],{"class":84}," image.cols ",[74,3297,1392],{"class":88},[74,3299,3300],{"class":1121}," \"x\"",[74,3302,1398],{"class":88},[74,3304,3305],{"class":84}," image.rows ",[74,3307,1392],{"class":88},[74,3309,1312],{"class":80},[74,3311,1414],{"class":84},[74,3313,3315,3317,3319,3321,3324,3326,3329,3331,3333,3335,3338,3340,3342],{"class":76,"line":3314},160,[74,3316,3145],{"class":80},[74,3318,2304],{"class":84},[74,3320,1392],{"class":88},[74,3322,3323],{"class":1121}," \"Image 2 loaded: \"",[74,3325,1398],{"class":88},[74,3327,3328],{"class":84}," image2.cols ",[74,3330,1392],{"class":88},[74,3332,3300],{"class":1121},[74,3334,1398],{"class":88},[74,3336,3337],{"class":84}," image2.rows ",[74,3339,1392],{"class":88},[74,3341,1312],{"class":80},[74,3343,1414],{"class":84},[74,3345,3347],{"class":76,"line":3346},161,[74,3348,1184],{"emptyLinePlaceholder":1183},[74,3350,3352,3354,3356,3359,3361,3364],{"class":76,"line":3351},162,[74,3353,3034],{"class":80},[74,3355,95],{"class":84},[74,3357,3358],{"class":80},"imencode",[74,3360,101],{"class":84},[74,3362,3363],{"class":1121},"\".png\"",[74,3365,3366],{"class":84},", image, imageData);\n",[74,3368,3370,3372,3374,3376,3378,3380],{"class":76,"line":3369},163,[74,3371,3034],{"class":80},[74,3373,95],{"class":84},[74,3375,3358],{"class":80},[74,3377,101],{"class":84},[74,3379,3363],{"class":1121},[74,3381,3382],{"class":84},", image2, imageData2);\n",[74,3384,3386],{"class":76,"line":3385},164,[74,3387,1184],{"emptyLinePlaceholder":1183},[74,3389,3391],{"class":76,"line":3390},165,[74,3392,1184],{"emptyLinePlaceholder":1183},[74,3394,3396],{"class":76,"line":3395},166,[74,3397,1750],{"class":84},[74,3399,3401],{"class":76,"line":3400},167,[74,3402,3403],{"class":914},"    \u002F\u002F 初始化GLFW\n",[74,3405,3407,3410],{"class":76,"line":3406},168,[74,3408,3409],{"class":80},"    glfwInit",[74,3411,1355],{"class":84},[74,3413,3415,3418,3421,3424],{"class":76,"line":3414},169,[74,3416,3417],{"class":80},"    glfwWindowHint",[74,3419,3420],{"class":84},"(GLFW_CONTEXT_VERSION_MAJOR, ",[74,3422,3423],{"class":104},"3",[74,3425,125],{"class":84},[74,3427,3429,3431,3434,3436],{"class":76,"line":3428},170,[74,3430,3417],{"class":80},[74,3432,3433],{"class":84},"(GLFW_CONTEXT_VERSION_MINOR, ",[74,3435,3423],{"class":104},[74,3437,125],{"class":84},[74,3439,3441,3443],{"class":76,"line":3440},171,[74,3442,3417],{"class":80},[74,3444,3445],{"class":84},"(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n",[74,3447,3449],{"class":76,"line":3448},172,[74,3450,1184],{"emptyLinePlaceholder":1183},[74,3452,3454],{"class":76,"line":3453},173,[74,3455,3456],{"class":914},"    \u002F\u002F 创建窗口\n",[74,3458,3460,3463,3465,3468,3470,3473,3475,3477,3479,3481,3483,3486,3488,3491,3493,3495],{"class":76,"line":3459},174,[74,3461,3462],{"class":80},"    GLFWwindow",[74,3464,593],{"class":88},[74,3466,3467],{"class":84}," window ",[74,3469,89],{"class":88},[74,3471,3472],{"class":80}," glfwCreateWindow",[74,3474,101],{"class":84},[74,3476,2762],{"class":104},[74,3478,111],{"class":84},[74,3480,2774],{"class":104},[74,3482,111],{"class":84},[74,3484,3485],{"class":1121},"\"OpenGL Window\"",[74,3487,111],{"class":84},[74,3489,3490],{"class":104},"NULL",[74,3492,111],{"class":84},[74,3494,3490],{"class":104},[74,3496,125],{"class":84},[74,3498,3500,3502,3505,3507,3510],{"class":76,"line":3499},175,[74,3501,920],{"class":88},[74,3503,3504],{"class":84}," (window ",[74,3506,932],{"class":88},[74,3508,3509],{"class":104}," NULL",[74,3511,1252],{"class":84},[74,3513,3515,3517,3519,3521,3524,3526,3528],{"class":76,"line":3514},176,[74,3516,1386],{"class":80},[74,3518,2304],{"class":84},[74,3520,1392],{"class":88},[74,3522,3523],{"class":1121}," \"Failed to create GLFW window\"",[74,3525,1398],{"class":88},[74,3527,1312],{"class":80},[74,3529,1414],{"class":84},[74,3531,3533,3536],{"class":76,"line":3532},177,[74,3534,3535],{"class":80},"        glfwTerminate",[74,3537,1355],{"class":84},[74,3539,3541,3543,3545,3548],{"class":76,"line":3540},178,[74,3542,1340],{"class":88},[74,3544,1570],{"class":88},[74,3546,3547],{"class":104},"1",[74,3549,570],{"class":84},[74,3551,3553],{"class":76,"line":3552},179,[74,3554,1430],{"class":84},[74,3556,3558],{"class":76,"line":3557},180,[74,3559,1750],{"class":84},[74,3561,3563,3566],{"class":76,"line":3562},181,[74,3564,3565],{"class":80},"    glfwMakeContextCurrent",[74,3567,3568],{"class":84},"(window);\n",[74,3570,3572,3575],{"class":76,"line":3571},182,[74,3573,3574],{"class":80},"    glfwSetFramebufferSizeCallback",[74,3576,3577],{"class":84},"(window, framebuffer_size_callback);\n",[74,3579,3581,3584],{"class":76,"line":3580},183,[74,3582,3583],{"class":80},"    glfwSetCursorPosCallback",[74,3585,3586],{"class":84},"(window, mouse_callback);\n",[74,3588,3590],{"class":76,"line":3589},184,[74,3591,1750],{"class":84},[74,3593,3595],{"class":76,"line":3594},185,[74,3596,3597],{"class":914},"    \u002F\u002F 隐藏鼠标光标并捕获鼠标\n",[74,3599,3601,3604],{"class":76,"line":3600},186,[74,3602,3603],{"class":80},"    glfwSetInputMode",[74,3605,2340],{"class":84},[74,3607,3609],{"class":76,"line":3608},187,[74,3610,1184],{"emptyLinePlaceholder":1183},[74,3612,3614],{"class":76,"line":3613},188,[74,3615,3616],{"class":914},"    \u002F\u002F 初始化GLAD\n",[74,3618,3620,3622,3624,3626,3629],{"class":76,"line":3619},189,[74,3621,920],{"class":88},[74,3623,923],{"class":84},[74,3625,1736],{"class":88},[74,3627,3628],{"class":80},"gladLoadGLLoader",[74,3630,3631],{"class":84},"((GLADloadproc)glfwGetProcAddress)) {\n",[74,3633,3635,3637,3639,3641,3644,3646,3648],{"class":76,"line":3634},190,[74,3636,1386],{"class":80},[74,3638,2304],{"class":84},[74,3640,1392],{"class":88},[74,3642,3643],{"class":1121}," \"Failed to initialize GLAD\"",[74,3645,1398],{"class":88},[74,3647,1312],{"class":80},[74,3649,1414],{"class":84},[74,3651,3653,3655,3657,3659],{"class":76,"line":3652},191,[74,3654,1340],{"class":88},[74,3656,1570],{"class":88},[74,3658,3547],{"class":104},[74,3660,570],{"class":84},[74,3662,3664],{"class":76,"line":3663},192,[74,3665,1430],{"class":84},[74,3667,3669],{"class":76,"line":3668},193,[74,3670,1184],{"emptyLinePlaceholder":1183},[74,3672,3674],{"class":76,"line":3673},194,[74,3675,3676],{"class":914},"    \u002F\u002F 启用深度测试\n",[74,3678,3680,3683],{"class":76,"line":3679},195,[74,3681,3682],{"class":80},"    glEnable",[74,3684,3685],{"class":84},"(GL_DEPTH_TEST);\n",[74,3687,3689],{"class":76,"line":3688},196,[74,3690,1184],{"emptyLinePlaceholder":1183},[74,3692,3694,3696,3699,3701],{"class":76,"line":3693},197,[74,3695,898],{"class":88},[74,3697,3698],{"class":84}," vertices[] ",[74,3700,89],{"class":88},[74,3702,1328],{"class":84},[74,3704,3706],{"class":76,"line":3705},198,[74,3707,3708],{"class":914},"    \u002F\u002F 位置(3) + 纹理坐标(2)\n",[74,3710,3712,3715,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748],{"class":76,"line":3711},199,[74,3713,3714],{"class":88},"    -",[74,3716,3717],{"class":104},"0.5",[74,3719,108],{"class":88},[74,3721,111],{"class":84},[74,3723,212],{"class":88},[74,3725,3717],{"class":104},[74,3727,108],{"class":88},[74,3729,111],{"class":84},[74,3731,212],{"class":88},[74,3733,3717],{"class":104},[74,3735,108],{"class":88},[74,3737,736],{"class":84},[74,3739,105],{"class":104},[74,3741,108],{"class":88},[74,3743,111],{"class":84},[74,3745,105],{"class":104},[74,3747,108],{"class":88},[74,3749,3750],{"class":84},",\n",[74,3752,3754,3757,3759,3761,3763,3765,3767,3769,3771,3773,3775,3777,3779,3781,3783,3785,3787],{"class":76,"line":3753},200,[74,3755,3756],{"class":104},"     0.5",[74,3758,108],{"class":88},[74,3760,111],{"class":84},[74,3762,212],{"class":88},[74,3764,3717],{"class":104},[74,3766,108],{"class":88},[74,3768,111],{"class":84},[74,3770,212],{"class":88},[74,3772,3717],{"class":104},[74,3774,108],{"class":88},[74,3776,736],{"class":84},[74,3778,272],{"class":104},[74,3780,108],{"class":88},[74,3782,111],{"class":84},[74,3784,105],{"class":104},[74,3786,108],{"class":88},[74,3788,3750],{"class":84},[74,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808,3810,3812,3814,3816,3818,3820,3822],{"class":76,"line":3791},201,[74,3793,3756],{"class":104},[74,3795,108],{"class":88},[74,3797,736],{"class":84},[74,3799,3717],{"class":104},[74,3801,108],{"class":88},[74,3803,111],{"class":84},[74,3805,212],{"class":88},[74,3807,3717],{"class":104},[74,3809,108],{"class":88},[74,3811,736],{"class":84},[74,3813,272],{"class":104},[74,3815,108],{"class":88},[74,3817,111],{"class":84},[74,3819,272],{"class":104},[74,3821,108],{"class":88},[74,3823,3750],{"class":84},[74,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857],{"class":76,"line":3826},202,[74,3828,3756],{"class":104},[74,3830,108],{"class":88},[74,3832,736],{"class":84},[74,3834,3717],{"class":104},[74,3836,108],{"class":88},[74,3838,111],{"class":84},[74,3840,212],{"class":88},[74,3842,3717],{"class":104},[74,3844,108],{"class":88},[74,3846,736],{"class":84},[74,3848,272],{"class":104},[74,3850,108],{"class":88},[74,3852,111],{"class":84},[74,3854,272],{"class":104},[74,3856,108],{"class":88},[74,3858,3750],{"class":84},[74,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894],{"class":76,"line":3861},203,[74,3863,3714],{"class":88},[74,3865,3717],{"class":104},[74,3867,108],{"class":88},[74,3869,736],{"class":84},[74,3871,3717],{"class":104},[74,3873,108],{"class":88},[74,3875,111],{"class":84},[74,3877,212],{"class":88},[74,3879,3717],{"class":104},[74,3881,108],{"class":88},[74,3883,736],{"class":84},[74,3885,105],{"class":104},[74,3887,108],{"class":88},[74,3889,111],{"class":84},[74,3891,272],{"class":104},[74,3893,108],{"class":88},[74,3895,3750],{"class":84},[74,3897,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933],{"class":76,"line":3898},204,[74,3900,3714],{"class":88},[74,3902,3717],{"class":104},[74,3904,108],{"class":88},[74,3906,111],{"class":84},[74,3908,212],{"class":88},[74,3910,3717],{"class":104},[74,3912,108],{"class":88},[74,3914,111],{"class":84},[74,3916,212],{"class":88},[74,3918,3717],{"class":104},[74,3920,108],{"class":88},[74,3922,736],{"class":84},[74,3924,105],{"class":104},[74,3926,108],{"class":88},[74,3928,111],{"class":84},[74,3930,105],{"class":104},[74,3932,108],{"class":88},[74,3934,3750],{"class":84},[74,3936,3938],{"class":76,"line":3937},205,[74,3939,1184],{"emptyLinePlaceholder":1183},[74,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975],{"class":76,"line":3942},206,[74,3944,3714],{"class":88},[74,3946,3717],{"class":104},[74,3948,108],{"class":88},[74,3950,111],{"class":84},[74,3952,212],{"class":88},[74,3954,3717],{"class":104},[74,3956,108],{"class":88},[74,3958,736],{"class":84},[74,3960,3717],{"class":104},[74,3962,108],{"class":88},[74,3964,736],{"class":84},[74,3966,105],{"class":104},[74,3968,108],{"class":88},[74,3970,111],{"class":84},[74,3972,105],{"class":104},[74,3974,108],{"class":88},[74,3976,3750],{"class":84},[74,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010],{"class":76,"line":3979},207,[74,3981,3756],{"class":104},[74,3983,108],{"class":88},[74,3985,111],{"class":84},[74,3987,212],{"class":88},[74,3989,3717],{"class":104},[74,3991,108],{"class":88},[74,3993,736],{"class":84},[74,3995,3717],{"class":104},[74,3997,108],{"class":88},[74,3999,736],{"class":84},[74,4001,272],{"class":104},[74,4003,108],{"class":88},[74,4005,111],{"class":84},[74,4007,105],{"class":104},[74,4009,108],{"class":88},[74,4011,3750],{"class":84},[74,4013,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4037,4039,4041,4043],{"class":76,"line":4014},208,[74,4016,3756],{"class":104},[74,4018,108],{"class":88},[74,4020,736],{"class":84},[74,4022,3717],{"class":104},[74,4024,108],{"class":88},[74,4026,736],{"class":84},[74,4028,3717],{"class":104},[74,4030,108],{"class":88},[74,4032,736],{"class":84},[74,4034,272],{"class":104},[74,4036,108],{"class":88},[74,4038,111],{"class":84},[74,4040,272],{"class":104},[74,4042,108],{"class":88},[74,4044,3750],{"class":84},[74,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076],{"class":76,"line":4047},209,[74,4049,3756],{"class":104},[74,4051,108],{"class":88},[74,4053,736],{"class":84},[74,4055,3717],{"class":104},[74,4057,108],{"class":88},[74,4059,736],{"class":84},[74,4061,3717],{"class":104},[74,4063,108],{"class":88},[74,4065,736],{"class":84},[74,4067,272],{"class":104},[74,4069,108],{"class":88},[74,4071,111],{"class":84},[74,4073,272],{"class":104},[74,4075,108],{"class":88},[74,4077,3750],{"class":84},[74,4079,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111],{"class":76,"line":4080},210,[74,4082,3714],{"class":88},[74,4084,3717],{"class":104},[74,4086,108],{"class":88},[74,4088,736],{"class":84},[74,4090,3717],{"class":104},[74,4092,108],{"class":88},[74,4094,736],{"class":84},[74,4096,3717],{"class":104},[74,4098,108],{"class":88},[74,4100,736],{"class":84},[74,4102,105],{"class":104},[74,4104,108],{"class":88},[74,4106,111],{"class":84},[74,4108,272],{"class":104},[74,4110,108],{"class":88},[74,4112,3750],{"class":84},[74,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148],{"class":76,"line":4115},211,[74,4117,3714],{"class":88},[74,4119,3717],{"class":104},[74,4121,108],{"class":88},[74,4123,111],{"class":84},[74,4125,212],{"class":88},[74,4127,3717],{"class":104},[74,4129,108],{"class":88},[74,4131,736],{"class":84},[74,4133,3717],{"class":104},[74,4135,108],{"class":88},[74,4137,736],{"class":84},[74,4139,105],{"class":104},[74,4141,108],{"class":88},[74,4143,111],{"class":84},[74,4145,105],{"class":104},[74,4147,108],{"class":88},[74,4149,3750],{"class":84},[74,4151,4153],{"class":76,"line":4152},212,[74,4154,1184],{"emptyLinePlaceholder":1183},[74,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188],{"class":76,"line":4157},213,[74,4159,3714],{"class":88},[74,4161,3717],{"class":104},[74,4163,108],{"class":88},[74,4165,736],{"class":84},[74,4167,3717],{"class":104},[74,4169,108],{"class":88},[74,4171,736],{"class":84},[74,4173,3717],{"class":104},[74,4175,108],{"class":88},[74,4177,736],{"class":84},[74,4179,272],{"class":104},[74,4181,108],{"class":88},[74,4183,111],{"class":84},[74,4185,105],{"class":104},[74,4187,108],{"class":88},[74,4189,3750],{"class":84},[74,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225],{"class":76,"line":4192},214,[74,4194,3714],{"class":88},[74,4196,3717],{"class":104},[74,4198,108],{"class":88},[74,4200,736],{"class":84},[74,4202,3717],{"class":104},[74,4204,108],{"class":88},[74,4206,111],{"class":84},[74,4208,212],{"class":88},[74,4210,3717],{"class":104},[74,4212,108],{"class":88},[74,4214,736],{"class":84},[74,4216,272],{"class":104},[74,4218,108],{"class":88},[74,4220,111],{"class":84},[74,4222,272],{"class":104},[74,4224,108],{"class":88},[74,4226,3750],{"class":84},[74,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264],{"class":76,"line":4229},215,[74,4231,3714],{"class":88},[74,4233,3717],{"class":104},[74,4235,108],{"class":88},[74,4237,111],{"class":84},[74,4239,212],{"class":88},[74,4241,3717],{"class":104},[74,4243,108],{"class":88},[74,4245,111],{"class":84},[74,4247,212],{"class":88},[74,4249,3717],{"class":104},[74,4251,108],{"class":88},[74,4253,736],{"class":84},[74,4255,105],{"class":104},[74,4257,108],{"class":88},[74,4259,111],{"class":84},[74,4261,272],{"class":104},[74,4263,108],{"class":88},[74,4265,3750],{"class":84},[74,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303],{"class":76,"line":4268},216,[74,4270,3714],{"class":88},[74,4272,3717],{"class":104},[74,4274,108],{"class":88},[74,4276,111],{"class":84},[74,4278,212],{"class":88},[74,4280,3717],{"class":104},[74,4282,108],{"class":88},[74,4284,111],{"class":84},[74,4286,212],{"class":88},[74,4288,3717],{"class":104},[74,4290,108],{"class":88},[74,4292,736],{"class":84},[74,4294,105],{"class":104},[74,4296,108],{"class":88},[74,4298,111],{"class":84},[74,4300,272],{"class":104},[74,4302,108],{"class":88},[74,4304,3750],{"class":84},[74,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340],{"class":76,"line":4307},217,[74,4309,3714],{"class":88},[74,4311,3717],{"class":104},[74,4313,108],{"class":88},[74,4315,111],{"class":84},[74,4317,212],{"class":88},[74,4319,3717],{"class":104},[74,4321,108],{"class":88},[74,4323,736],{"class":84},[74,4325,3717],{"class":104},[74,4327,108],{"class":88},[74,4329,736],{"class":84},[74,4331,105],{"class":104},[74,4333,108],{"class":88},[74,4335,111],{"class":84},[74,4337,105],{"class":104},[74,4339,108],{"class":88},[74,4341,3750],{"class":84},[74,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375],{"class":76,"line":4344},218,[74,4346,3714],{"class":88},[74,4348,3717],{"class":104},[74,4350,108],{"class":88},[74,4352,736],{"class":84},[74,4354,3717],{"class":104},[74,4356,108],{"class":88},[74,4358,736],{"class":84},[74,4360,3717],{"class":104},[74,4362,108],{"class":88},[74,4364,736],{"class":84},[74,4366,272],{"class":104},[74,4368,108],{"class":88},[74,4370,111],{"class":84},[74,4372,105],{"class":104},[74,4374,108],{"class":88},[74,4376,3750],{"class":84},[74,4378,4380],{"class":76,"line":4379},219,[74,4381,1184],{"emptyLinePlaceholder":1183},[74,4383,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413],{"class":76,"line":4384},220,[74,4386,3756],{"class":104},[74,4388,108],{"class":88},[74,4390,736],{"class":84},[74,4392,3717],{"class":104},[74,4394,108],{"class":88},[74,4396,736],{"class":84},[74,4398,3717],{"class":104},[74,4400,108],{"class":88},[74,4402,736],{"class":84},[74,4404,272],{"class":104},[74,4406,108],{"class":88},[74,4408,111],{"class":84},[74,4410,105],{"class":104},[74,4412,108],{"class":88},[74,4414,3750],{"class":84},[74,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448],{"class":76,"line":4417},221,[74,4419,3756],{"class":104},[74,4421,108],{"class":88},[74,4423,736],{"class":84},[74,4425,3717],{"class":104},[74,4427,108],{"class":88},[74,4429,111],{"class":84},[74,4431,212],{"class":88},[74,4433,3717],{"class":104},[74,4435,108],{"class":88},[74,4437,736],{"class":84},[74,4439,272],{"class":104},[74,4441,108],{"class":88},[74,4443,111],{"class":84},[74,4445,272],{"class":104},[74,4447,108],{"class":88},[74,4449,3750],{"class":84},[74,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485],{"class":76,"line":4452},222,[74,4454,3756],{"class":104},[74,4456,108],{"class":88},[74,4458,111],{"class":84},[74,4460,212],{"class":88},[74,4462,3717],{"class":104},[74,4464,108],{"class":88},[74,4466,111],{"class":84},[74,4468,212],{"class":88},[74,4470,3717],{"class":104},[74,4472,108],{"class":88},[74,4474,736],{"class":84},[74,4476,105],{"class":104},[74,4478,108],{"class":88},[74,4480,111],{"class":84},[74,4482,272],{"class":104},[74,4484,108],{"class":88},[74,4486,3750],{"class":84},[74,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":76,"line":4489},223,[74,4491,3756],{"class":104},[74,4493,108],{"class":88},[74,4495,111],{"class":84},[74,4497,212],{"class":88},[74,4499,3717],{"class":104},[74,4501,108],{"class":88},[74,4503,111],{"class":84},[74,4505,212],{"class":88},[74,4507,3717],{"class":104},[74,4509,108],{"class":88},[74,4511,736],{"class":84},[74,4513,105],{"class":104},[74,4515,108],{"class":88},[74,4517,111],{"class":84},[74,4519,272],{"class":104},[74,4521,108],{"class":88},[74,4523,3750],{"class":84},[74,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557],{"class":76,"line":4526},224,[74,4528,3756],{"class":104},[74,4530,108],{"class":88},[74,4532,111],{"class":84},[74,4534,212],{"class":88},[74,4536,3717],{"class":104},[74,4538,108],{"class":88},[74,4540,736],{"class":84},[74,4542,3717],{"class":104},[74,4544,108],{"class":88},[74,4546,736],{"class":84},[74,4548,105],{"class":104},[74,4550,108],{"class":88},[74,4552,111],{"class":84},[74,4554,105],{"class":104},[74,4556,108],{"class":88},[74,4558,3750],{"class":84},[74,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590],{"class":76,"line":4561},225,[74,4563,3756],{"class":104},[74,4565,108],{"class":88},[74,4567,736],{"class":84},[74,4569,3717],{"class":104},[74,4571,108],{"class":88},[74,4573,736],{"class":84},[74,4575,3717],{"class":104},[74,4577,108],{"class":88},[74,4579,736],{"class":84},[74,4581,272],{"class":104},[74,4583,108],{"class":88},[74,4585,111],{"class":84},[74,4587,105],{"class":104},[74,4589,108],{"class":88},[74,4591,3750],{"class":84},[74,4593,4595],{"class":76,"line":4594},226,[74,4596,1184],{"emptyLinePlaceholder":1183},[74,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634],{"class":76,"line":4599},227,[74,4601,3714],{"class":88},[74,4603,3717],{"class":104},[74,4605,108],{"class":88},[74,4607,111],{"class":84},[74,4609,212],{"class":88},[74,4611,3717],{"class":104},[74,4613,108],{"class":88},[74,4615,111],{"class":84},[74,4617,212],{"class":88},[74,4619,3717],{"class":104},[74,4621,108],{"class":88},[74,4623,736],{"class":84},[74,4625,105],{"class":104},[74,4627,108],{"class":88},[74,4629,111],{"class":84},[74,4631,272],{"class":104},[74,4633,108],{"class":88},[74,4635,3750],{"class":84},[74,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671],{"class":76,"line":4638},228,[74,4640,3756],{"class":104},[74,4642,108],{"class":88},[74,4644,111],{"class":84},[74,4646,212],{"class":88},[74,4648,3717],{"class":104},[74,4650,108],{"class":88},[74,4652,111],{"class":84},[74,4654,212],{"class":88},[74,4656,3717],{"class":104},[74,4658,108],{"class":88},[74,4660,736],{"class":84},[74,4662,272],{"class":104},[74,4664,108],{"class":88},[74,4666,111],{"class":84},[74,4668,272],{"class":104},[74,4670,108],{"class":88},[74,4672,3750],{"class":84},[74,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706],{"class":76,"line":4675},229,[74,4677,3756],{"class":104},[74,4679,108],{"class":88},[74,4681,111],{"class":84},[74,4683,212],{"class":88},[74,4685,3717],{"class":104},[74,4687,108],{"class":88},[74,4689,736],{"class":84},[74,4691,3717],{"class":104},[74,4693,108],{"class":88},[74,4695,736],{"class":84},[74,4697,272],{"class":104},[74,4699,108],{"class":88},[74,4701,111],{"class":84},[74,4703,105],{"class":104},[74,4705,108],{"class":88},[74,4707,3750],{"class":84},[74,4709,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741],{"class":76,"line":4710},230,[74,4712,3756],{"class":104},[74,4714,108],{"class":88},[74,4716,111],{"class":84},[74,4718,212],{"class":88},[74,4720,3717],{"class":104},[74,4722,108],{"class":88},[74,4724,736],{"class":84},[74,4726,3717],{"class":104},[74,4728,108],{"class":88},[74,4730,736],{"class":84},[74,4732,272],{"class":104},[74,4734,108],{"class":88},[74,4736,111],{"class":84},[74,4738,105],{"class":104},[74,4740,108],{"class":88},[74,4742,3750],{"class":84},[74,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4770,4772,4774,4776,4778],{"class":76,"line":4745},231,[74,4747,3714],{"class":88},[74,4749,3717],{"class":104},[74,4751,108],{"class":88},[74,4753,111],{"class":84},[74,4755,212],{"class":88},[74,4757,3717],{"class":104},[74,4759,108],{"class":88},[74,4761,736],{"class":84},[74,4763,3717],{"class":104},[74,4765,108],{"class":88},[74,4767,736],{"class":84},[74,4769,105],{"class":104},[74,4771,108],{"class":88},[74,4773,111],{"class":84},[74,4775,105],{"class":104},[74,4777,108],{"class":88},[74,4779,3750],{"class":84},[74,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817],{"class":76,"line":4782},232,[74,4784,3714],{"class":88},[74,4786,3717],{"class":104},[74,4788,108],{"class":88},[74,4790,111],{"class":84},[74,4792,212],{"class":88},[74,4794,3717],{"class":104},[74,4796,108],{"class":88},[74,4798,111],{"class":84},[74,4800,212],{"class":88},[74,4802,3717],{"class":104},[74,4804,108],{"class":88},[74,4806,736],{"class":84},[74,4808,105],{"class":104},[74,4810,108],{"class":88},[74,4812,111],{"class":84},[74,4814,272],{"class":104},[74,4816,108],{"class":88},[74,4818,3750],{"class":84},[74,4820,4822],{"class":76,"line":4821},233,[74,4823,1184],{"emptyLinePlaceholder":1183},[74,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857,4859],{"class":76,"line":4826},234,[74,4828,3714],{"class":88},[74,4830,3717],{"class":104},[74,4832,108],{"class":88},[74,4834,736],{"class":84},[74,4836,3717],{"class":104},[74,4838,108],{"class":88},[74,4840,111],{"class":84},[74,4842,212],{"class":88},[74,4844,3717],{"class":104},[74,4846,108],{"class":88},[74,4848,736],{"class":84},[74,4850,105],{"class":104},[74,4852,108],{"class":88},[74,4854,111],{"class":84},[74,4856,272],{"class":104},[74,4858,108],{"class":88},[74,4860,3750],{"class":84},[74,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894],{"class":76,"line":4863},235,[74,4865,3756],{"class":104},[74,4867,108],{"class":88},[74,4869,736],{"class":84},[74,4871,3717],{"class":104},[74,4873,108],{"class":88},[74,4875,111],{"class":84},[74,4877,212],{"class":88},[74,4879,3717],{"class":104},[74,4881,108],{"class":88},[74,4883,736],{"class":84},[74,4885,272],{"class":104},[74,4887,108],{"class":88},[74,4889,111],{"class":84},[74,4891,272],{"class":104},[74,4893,108],{"class":88},[74,4895,3750],{"class":84},[74,4897,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927],{"class":76,"line":4898},236,[74,4900,3756],{"class":104},[74,4902,108],{"class":88},[74,4904,736],{"class":84},[74,4906,3717],{"class":104},[74,4908,108],{"class":88},[74,4910,736],{"class":84},[74,4912,3717],{"class":104},[74,4914,108],{"class":88},[74,4916,736],{"class":84},[74,4918,272],{"class":104},[74,4920,108],{"class":88},[74,4922,111],{"class":84},[74,4924,105],{"class":104},[74,4926,108],{"class":88},[74,4928,3750],{"class":84},[74,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954,4956,4958,4960],{"class":76,"line":4931},237,[74,4933,3756],{"class":104},[74,4935,108],{"class":88},[74,4937,736],{"class":84},[74,4939,3717],{"class":104},[74,4941,108],{"class":88},[74,4943,736],{"class":84},[74,4945,3717],{"class":104},[74,4947,108],{"class":88},[74,4949,736],{"class":84},[74,4951,272],{"class":104},[74,4953,108],{"class":88},[74,4955,111],{"class":84},[74,4957,105],{"class":104},[74,4959,108],{"class":88},[74,4961,3750],{"class":84},[74,4963,4965,4967,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995],{"class":76,"line":4964},238,[74,4966,3714],{"class":88},[74,4968,3717],{"class":104},[74,4970,108],{"class":88},[74,4972,736],{"class":84},[74,4974,3717],{"class":104},[74,4976,108],{"class":88},[74,4978,736],{"class":84},[74,4980,3717],{"class":104},[74,4982,108],{"class":88},[74,4984,736],{"class":84},[74,4986,105],{"class":104},[74,4988,108],{"class":88},[74,4990,111],{"class":84},[74,4992,105],{"class":104},[74,4994,108],{"class":88},[74,4996,3750],{"class":84},[74,4998,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030],{"class":76,"line":4999},239,[74,5001,3714],{"class":88},[74,5003,3717],{"class":104},[74,5005,108],{"class":88},[74,5007,736],{"class":84},[74,5009,3717],{"class":104},[74,5011,108],{"class":88},[74,5013,111],{"class":84},[74,5015,212],{"class":88},[74,5017,3717],{"class":104},[74,5019,108],{"class":88},[74,5021,736],{"class":84},[74,5023,105],{"class":104},[74,5025,108],{"class":88},[74,5027,111],{"class":84},[74,5029,272],{"class":104},[74,5031,5032],{"class":88},"f\n",[74,5034,5036],{"class":76,"line":5035},240,[74,5037,5038],{"class":84},"};\n",[74,5040,5042],{"class":76,"line":5041},241,[74,5043,1750],{"class":84},[74,5045,5047],{"class":76,"line":5046},242,[74,5048,5049],{"class":914},"    \u002F\u002F indices数组未使用，已删除\n",[74,5051,5053],{"class":76,"line":5052},243,[74,5054,1184],{"emptyLinePlaceholder":1183},[74,5056,5058],{"class":76,"line":5057},244,[74,5059,5060],{"class":914},"    \u002F\u002F 纹理\n",[74,5062,5064,5067,5070],{"class":76,"line":5063},245,[74,5065,5066],{"class":88},"    unsigned",[74,5068,5069],{"class":88}," int",[74,5071,5072],{"class":84}," texture;\n",[74,5074,5076,5078,5080],{"class":76,"line":5075},246,[74,5077,5066],{"class":88},[74,5079,5069],{"class":88},[74,5081,5082],{"class":84}," texture2;\n",[74,5084,5086,5089,5091,5093,5095,5097,5100],{"class":76,"line":5085},247,[74,5087,5088],{"class":80},"    glGenTextures",[74,5090,101],{"class":84},[74,5092,3547],{"class":104},[74,5094,111],{"class":84},[74,5096,1377],{"class":88},[74,5098,5099],{"class":84},"texture);",[74,5101,5102],{"class":914}," \u002F\u002F 生成纹理\n",[74,5104,5106,5108,5110,5112,5114,5116,5119],{"class":76,"line":5105},248,[74,5107,5088],{"class":80},[74,5109,101],{"class":84},[74,5111,3547],{"class":104},[74,5113,111],{"class":84},[74,5115,1377],{"class":88},[74,5117,5118],{"class":84},"texture2);",[74,5120,5102],{"class":914},[74,5122,5124],{"class":76,"line":5123},249,[74,5125,1750],{"class":84},[74,5127,5129],{"class":76,"line":5128},250,[74,5130,5131],{"class":914},"    \u002F\u002F 配置第一个纹理\n",[74,5133,5135,5138],{"class":76,"line":5134},251,[74,5136,5137],{"class":80},"    glActiveTexture",[74,5139,5140],{"class":84},"(GL_TEXTURE0);\n",[74,5142,5144,5147,5150],{"class":76,"line":5143},252,[74,5145,5146],{"class":80},"    glBindTexture",[74,5148,5149],{"class":84},"(GL_TEXTURE_2D, texture);",[74,5151,5152],{"class":914}," \u002F\u002F 绑定纹理\n",[74,5154,5156,5159,5162],{"class":76,"line":5155},253,[74,5157,5158],{"class":80},"    glTexParameteri",[74,5160,5161],{"class":84},"(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);",[74,5163,5164],{"class":914}," \u002F\u002F 设置纹理环绕方式\n",[74,5166,5168,5170,5173],{"class":76,"line":5167},254,[74,5169,5158],{"class":80},[74,5171,5172],{"class":84},"(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);",[74,5174,5164],{"class":914},[74,5176,5178,5180,5183],{"class":76,"line":5177},255,[74,5179,5158],{"class":80},[74,5181,5182],{"class":84},"(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);",[74,5184,5185],{"class":914}," \u002F\u002F 设置纹理过滤方式\n",[74,5187,5189,5191,5194],{"class":76,"line":5188},256,[74,5190,5158],{"class":80},[74,5192,5193],{"class":84},"(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);",[74,5195,5185],{"class":914},[74,5197,5199,5202,5205,5207,5210,5212,5215],{"class":76,"line":5198},257,[74,5200,5201],{"class":80},"    glTexImage2D",[74,5203,5204],{"class":84},"(GL_TEXTURE_2D, ",[74,5206,1263],{"class":104},[74,5208,5209],{"class":84},", GL_RGB, image.cols, image.rows, ",[74,5211,1263],{"class":104},[74,5213,5214],{"class":84},", GL_RGB, GL_UNSIGNED_BYTE, image.data);",[74,5216,5217],{"class":914}," \u002F\u002F 设置纹理数据\n",[74,5219,5221,5224,5227],{"class":76,"line":5220},258,[74,5222,5223],{"class":80},"    glGenerateMipmap",[74,5225,5226],{"class":84},"(GL_TEXTURE_2D);",[74,5228,5229],{"class":914}," \u002F\u002F 生成mipmap\n",[74,5231,5233],{"class":76,"line":5232},259,[74,5234,1184],{"emptyLinePlaceholder":1183},[74,5236,5238],{"class":76,"line":5237},260,[74,5239,5240],{"class":914},"    \u002F\u002F 配置第二个纹理\n",[74,5242,5244,5246],{"class":76,"line":5243},261,[74,5245,5137],{"class":80},[74,5247,5248],{"class":84},"(GL_TEXTURE1);\n",[74,5250,5252,5254,5257],{"class":76,"line":5251},262,[74,5253,5146],{"class":80},[74,5255,5256],{"class":84},"(GL_TEXTURE_2D, texture2);",[74,5258,5152],{"class":914},[74,5260,5262,5264,5266],{"class":76,"line":5261},263,[74,5263,5158],{"class":80},[74,5265,5161],{"class":84},[74,5267,5164],{"class":914},[74,5269,5271,5273,5275],{"class":76,"line":5270},264,[74,5272,5158],{"class":80},[74,5274,5172],{"class":84},[74,5276,5277],{"class":914}," \u002F\u002F 设置纹理环绕方式   \n",[74,5279,5281,5283,5285],{"class":76,"line":5280},265,[74,5282,5158],{"class":80},[74,5284,5182],{"class":84},[74,5286,5185],{"class":914},[74,5288,5290,5292,5294],{"class":76,"line":5289},266,[74,5291,5158],{"class":80},[74,5293,5193],{"class":84},[74,5295,5185],{"class":914},[74,5297,5299,5301,5303,5305,5308,5310,5313],{"class":76,"line":5298},267,[74,5300,5201],{"class":80},[74,5302,5204],{"class":84},[74,5304,1263],{"class":104},[74,5306,5307],{"class":84},", GL_RGB, image2.cols, image2.rows, ",[74,5309,1263],{"class":104},[74,5311,5312],{"class":84},", GL_RGB, GL_UNSIGNED_BYTE, image2.data);",[74,5314,5217],{"class":914},[74,5316,5318,5320,5322],{"class":76,"line":5317},268,[74,5319,5223],{"class":80},[74,5321,5226],{"class":84},[74,5323,5229],{"class":914},[74,5325,5327],{"class":76,"line":5326},269,[74,5328,1184],{"emptyLinePlaceholder":1183},[74,5330,5332],{"class":76,"line":5331},270,[74,5333,1184],{"emptyLinePlaceholder":1183},[74,5335,5337],{"class":76,"line":5336},271,[74,5338,5339],{"class":914},"    \u002F\u002F 创建VAO\n",[74,5341,5343,5345,5347],{"class":76,"line":5342},272,[74,5344,5066],{"class":88},[74,5346,5069],{"class":88},[74,5348,5349],{"class":84}," VAO;\n",[74,5351,5353,5356,5358,5360,5362,5364],{"class":76,"line":5352},273,[74,5354,5355],{"class":80},"    glGenVertexArrays",[74,5357,101],{"class":84},[74,5359,3547],{"class":104},[74,5361,111],{"class":84},[74,5363,1377],{"class":88},[74,5365,5366],{"class":84},"VAO);\n",[74,5368,5370,5373,5376],{"class":76,"line":5369},274,[74,5371,5372],{"class":80},"    glBindVertexArray",[74,5374,5375],{"class":84},"(VAO);",[74,5377,5378],{"class":914}," \u002F\u002F 绑定VAO\n",[74,5380,5382],{"class":76,"line":5381},275,[74,5383,1184],{"emptyLinePlaceholder":1183},[74,5385,5387],{"class":76,"line":5386},276,[74,5388,5389],{"class":914},"    \u002F\u002F 创建VBO\n",[74,5391,5393,5395,5397],{"class":76,"line":5392},277,[74,5394,5066],{"class":88},[74,5396,5069],{"class":88},[74,5398,5399],{"class":84}," VBO;\n",[74,5401,5403,5406,5408,5410,5412,5414],{"class":76,"line":5402},278,[74,5404,5405],{"class":80},"    glGenBuffers",[74,5407,101],{"class":84},[74,5409,3547],{"class":104},[74,5411,111],{"class":84},[74,5413,1377],{"class":88},[74,5415,5416],{"class":84},"VBO);\n",[74,5418,5420,5423,5426],{"class":76,"line":5419},279,[74,5421,5422],{"class":80},"    glBindBuffer",[74,5424,5425],{"class":84},"(GL_ARRAY_BUFFER, VBO);",[74,5427,5428],{"class":914}," \u002F\u002F 绑定VBO\n",[74,5430,5432,5435,5438,5441],{"class":76,"line":5431},280,[74,5433,5434],{"class":80},"    glBufferData",[74,5436,5437],{"class":84},"(GL_ARRAY_BUFFER, ",[74,5439,5440],{"class":88},"sizeof",[74,5442,5443],{"class":84},"(vertices), vertices, GL_STATIC_DRAW);\n",[74,5445,5447],{"class":76,"line":5446},281,[74,5448,1184],{"emptyLinePlaceholder":1183},[74,5450,5452,5455],{"class":76,"line":5451},282,[74,5453,5454],{"class":88},"    int",[74,5456,5457],{"class":84}," nrAttributes;\n",[74,5459,5461,5464,5467,5469],{"class":76,"line":5460},283,[74,5462,5463],{"class":80},"    glGetIntegerv",[74,5465,5466],{"class":84},"(GL_MAX_VERTEX_ATTRIBS, ",[74,5468,1377],{"class":88},[74,5470,5471],{"class":84},"nrAttributes);\n",[74,5473,5475,5477,5479,5481,5484,5486,5489,5491,5493],{"class":76,"line":5474},284,[74,5476,3145],{"class":80},[74,5478,2304],{"class":84},[74,5480,1392],{"class":88},[74,5482,5483],{"class":1121}," \"Maximum nr of vertex attributes supported: \"",[74,5485,1398],{"class":88},[74,5487,5488],{"class":84}," nrAttributes ",[74,5490,1392],{"class":88},[74,5492,1312],{"class":80},[74,5494,1414],{"class":84},[74,5496,5498],{"class":76,"line":5497},285,[74,5499,1184],{"emptyLinePlaceholder":1183},[74,5501,5503],{"class":76,"line":5502},286,[74,5504,5505],{"class":914},"    \u002F\u002F 位置属性\n",[74,5507,5509,5512,5514,5516,5518,5520,5523,5526,5528,5531,5533,5535,5537,5540,5542,5544],{"class":76,"line":5508},287,[74,5510,5511],{"class":80},"    glVertexAttribPointer",[74,5513,101],{"class":84},[74,5515,1263],{"class":104},[74,5517,111],{"class":84},[74,5519,3423],{"class":104},[74,5521,5522],{"class":84},", GL_FLOAT, GL_FALSE, ",[74,5524,5525],{"class":104},"5",[74,5527,876],{"class":88},[74,5529,5530],{"class":88}," sizeof",[74,5532,101],{"class":84},[74,5534,557],{"class":88},[74,5536,2754],{"class":84},[74,5538,5539],{"class":88},"void*",[74,5541,2759],{"class":84},[74,5543,1263],{"class":104},[74,5545,125],{"class":84},[74,5547,5549,5552,5554,5556,5558],{"class":76,"line":5548},288,[74,5550,5551],{"class":80},"    glEnableVertexAttribArray",[74,5553,101],{"class":84},[74,5555,1263],{"class":104},[74,5557,1510],{"class":84},[74,5559,5560],{"class":914}," \u002F\u002F 启用顶点属性\n",[74,5562,5564],{"class":76,"line":5563},289,[74,5565,1750],{"class":84},[74,5567,5569],{"class":76,"line":5568},290,[74,5570,5571],{"class":914},"    \u002F\u002F 纹理属性\n",[74,5573,5575,5577,5579,5582,5584,5586,5588,5590,5592,5594,5596,5598,5600,5602,5605,5607,5609,5611,5613,5615],{"class":76,"line":5574},291,[74,5576,5511],{"class":80},[74,5578,101],{"class":84},[74,5580,5581],{"class":104},"2",[74,5583,111],{"class":84},[74,5585,5581],{"class":104},[74,5587,5522],{"class":84},[74,5589,5525],{"class":104},[74,5591,876],{"class":88},[74,5593,5530],{"class":88},[74,5595,101],{"class":84},[74,5597,557],{"class":88},[74,5599,2754],{"class":84},[74,5601,5539],{"class":88},[74,5603,5604],{"class":84},")(",[74,5606,3423],{"class":104},[74,5608,876],{"class":88},[74,5610,5530],{"class":88},[74,5612,101],{"class":84},[74,5614,557],{"class":88},[74,5616,5617],{"class":84},")));\n",[74,5619,5621,5623,5625,5627],{"class":76,"line":5620},292,[74,5622,5551],{"class":80},[74,5624,101],{"class":84},[74,5626,5581],{"class":104},[74,5628,125],{"class":84},[74,5630,5632],{"class":76,"line":5631},293,[74,5633,1184],{"emptyLinePlaceholder":1183},[74,5635,5637],{"class":76,"line":5636},294,[74,5638,5639],{"class":914},"    \u002F\u002F 构建并编译着色器程序\n",[74,5641,5643,5646,5649,5651,5654,5656,5659],{"class":76,"line":5642},295,[74,5644,5645],{"class":80},"    Shader",[74,5647,5648],{"class":80}," ourShader",[74,5650,101],{"class":84},[74,5652,5653],{"class":1121},"\"shader\u002Fcustom.vert\"",[74,5655,111],{"class":84},[74,5657,5658],{"class":1121},"\"shader\u002Ffragment.vert\"",[74,5660,125],{"class":84},[74,5662,5664],{"class":76,"line":5663},296,[74,5665,1184],{"emptyLinePlaceholder":1183},[74,5667,5669],{"class":76,"line":5668},297,[74,5670,5671],{"class":914},"    \u002F\u002F 渲染循环\n",[74,5673,5675,5678,5680,5682,5685],{"class":76,"line":5674},298,[74,5676,5677],{"class":88},"    while",[74,5679,923],{"class":84},[74,5681,1736],{"class":88},[74,5683,5684],{"class":80},"glfwWindowShouldClose",[74,5686,5687],{"class":84},"(window)) {\n",[74,5689,5691],{"class":76,"line":5690},299,[74,5692,5693],{"class":914},"        \u002F\u002F 处理输入\n",[74,5695,5697,5700],{"class":76,"line":5696},300,[74,5698,5699],{"class":80},"        processInput",[74,5701,3568],{"class":84},[74,5703,5705,5708],{"class":76,"line":5704},301,[74,5706,5707],{"class":80},"        glfwPollEvents",[74,5709,1355],{"class":84},[74,5711,5713],{"class":76,"line":5712},302,[74,5714,1184],{"emptyLinePlaceholder":1183},[74,5716,5718],{"class":76,"line":5717},303,[74,5719,5720],{"class":914},"        \u002F\u002F 更新view矩阵\n",[74,5722,5724,5727,5729,5731,5733,5735,5737,5739],{"class":76,"line":5723},304,[74,5725,5726],{"class":84},"        view ",[74,5728,89],{"class":88},[74,5730,92],{"class":80},[74,5732,95],{"class":84},[74,5734,443],{"class":80},[74,5736,839],{"class":84},[74,5738,842],{"class":88},[74,5740,845],{"class":84},[74,5742,5744],{"class":76,"line":5743},305,[74,5745,5746],{"class":84},"        \n",[74,5748,5750],{"class":76,"line":5749},306,[74,5751,5752],{"class":914},"        \u002F\u002F 渲染指令\n",[74,5754,5756,5759,5761,5764,5766,5768,5771,5773,5775,5777,5779,5781,5783,5785],{"class":76,"line":5755},307,[74,5757,5758],{"class":80},"        glClearColor",[74,5760,101],{"class":84},[74,5762,5763],{"class":104},"0.2",[74,5765,108],{"class":88},[74,5767,111],{"class":84},[74,5769,5770],{"class":104},"0.3",[74,5772,108],{"class":88},[74,5774,111],{"class":84},[74,5776,5770],{"class":104},[74,5778,108],{"class":88},[74,5780,111],{"class":84},[74,5782,272],{"class":104},[74,5784,108],{"class":88},[74,5786,125],{"class":84},[74,5788,5790,5793,5796,5799],{"class":76,"line":5789},308,[74,5791,5792],{"class":80},"        glClear",[74,5794,5795],{"class":84},"(GL_COLOR_BUFFER_BIT ",[74,5797,5798],{"class":88},"|",[74,5800,5801],{"class":84}," GL_DEPTH_BUFFER_BIT);\n",[74,5803,5805],{"class":76,"line":5804},309,[74,5806,5746],{"class":84},[74,5808,5810],{"class":76,"line":5809},310,[74,5811,5812],{"class":914},"        \u002F\u002F 使用着色器程序\n",[74,5814,5816,5819,5822],{"class":76,"line":5815},311,[74,5817,5818],{"class":84},"        ourShader.",[74,5820,5821],{"class":80},"use",[74,5823,1355],{"class":84},[74,5825,5827],{"class":76,"line":5826},312,[74,5828,1184],{"emptyLinePlaceholder":1183},[74,5830,5832],{"class":76,"line":5831},313,[74,5833,5834],{"class":914},"        \u002F\u002F 设置矩阵uniform\n",[74,5836,5838,5840,5843,5845,5848],{"class":76,"line":5837},314,[74,5839,5818],{"class":84},[74,5841,5842],{"class":80},"setMat4",[74,5844,101],{"class":84},[74,5846,5847],{"class":1121},"\"model\"",[74,5849,5850],{"class":84},", model);\n",[74,5852,5854,5856,5858,5860,5863],{"class":76,"line":5853},315,[74,5855,5818],{"class":84},[74,5857,5842],{"class":80},[74,5859,101],{"class":84},[74,5861,5862],{"class":1121},"\"view\"",[74,5864,5865],{"class":84},", view);\n",[74,5867,5869,5871,5873,5875,5878],{"class":76,"line":5868},316,[74,5870,5818],{"class":84},[74,5872,5842],{"class":80},[74,5874,101],{"class":84},[74,5876,5877],{"class":1121},"\"projection\"",[74,5879,5880],{"class":84},", projection);\n",[74,5882,5884],{"class":76,"line":5883},317,[74,5885,5746],{"class":84},[74,5887,5889,5891,5894,5896,5899,5901,5903],{"class":76,"line":5888},318,[74,5890,5818],{"class":84},[74,5892,5893],{"class":80},"setInt",[74,5895,101],{"class":84},[74,5897,5898],{"class":1121},"\"ourTexture\"",[74,5900,111],{"class":84},[74,5902,1263],{"class":104},[74,5904,125],{"class":84},[74,5906,5908,5910,5912,5914,5917,5919,5921],{"class":76,"line":5907},319,[74,5909,5818],{"class":84},[74,5911,5893],{"class":80},[74,5913,101],{"class":84},[74,5915,5916],{"class":1121},"\"ourTexture2\"",[74,5918,111],{"class":84},[74,5920,3547],{"class":104},[74,5922,125],{"class":84},[74,5924,5926],{"class":76,"line":5925},320,[74,5927,5746],{"class":84},[74,5929,5931,5934],{"class":76,"line":5930},321,[74,5932,5933],{"class":80},"        glBindVertexArray",[74,5935,5936],{"class":84},"(VAO);\n",[74,5938,5940],{"class":76,"line":5939},322,[74,5941,5746],{"class":84},[74,5943,5945],{"class":76,"line":5944},323,[74,5946,5947],{"class":914},"        \u002F\u002F 绘制多个立方体\n",[74,5949,5951,5954,5956,5959,5961,5964,5966,5969,5972,5974,5977,5980,5983],{"class":76,"line":5950},324,[74,5952,5953],{"class":88},"        for",[74,5955,101],{"class":84},[74,5957,5958],{"class":88},"unsigned",[74,5960,5069],{"class":88},[74,5962,5963],{"class":84}," i ",[74,5965,89],{"class":88},[74,5967,5968],{"class":104}," 0",[74,5970,5971],{"class":84},"; i ",[74,5973,1985],{"class":88},[74,5975,5976],{"class":104}," 10",[74,5978,5979],{"class":84},"; i",[74,5981,5982],{"class":88},"++",[74,5984,1252],{"class":84},[74,5986,5988,5991,5993,5996,5999,6001,6003,6005,6007,6009,6011,6013],{"class":76,"line":5987},325,[74,5989,5990],{"class":80},"            glm",[74,5992,95],{"class":84},[74,5994,5995],{"class":80},"mat4",[74,5997,5998],{"class":84}," modelMatrix ",[74,6000,89],{"class":88},[74,6002,92],{"class":80},[74,6004,95],{"class":84},[74,6006,5995],{"class":80},[74,6008,101],{"class":84},[74,6010,272],{"class":104},[74,6012,108],{"class":88},[74,6014,125],{"class":84},[74,6016,6018,6021,6023,6025,6027,6030],{"class":76,"line":6017},326,[74,6019,6020],{"class":84},"            modelMatrix ",[74,6022,89],{"class":88},[74,6024,92],{"class":80},[74,6026,95],{"class":84},[74,6028,6029],{"class":80},"translate",[74,6031,6032],{"class":84},"(modelMatrix, cubePositions[i]);\n",[74,6034,6036,6039,6042,6044,6047,6049,6051],{"class":76,"line":6035},327,[74,6037,6038],{"class":88},"            float",[74,6040,6041],{"class":84}," angle ",[74,6043,89],{"class":88},[74,6045,6046],{"class":104}," 20.0",[74,6048,108],{"class":88},[74,6050,876],{"class":88},[74,6052,6053],{"class":84}," i; \n",[74,6055,6057,6059,6061,6063,6065,6068,6071,6073,6075,6077,6080,6082,6084,6086,6088,6090,6092,6094,6096,6098,6100,6102,6104],{"class":76,"line":6056},328,[74,6058,6020],{"class":84},[74,6060,89],{"class":88},[74,6062,92],{"class":80},[74,6064,95],{"class":84},[74,6066,6067],{"class":80},"rotate",[74,6069,6070],{"class":84},"(modelMatrix, ",[74,6072,81],{"class":80},[74,6074,95],{"class":84},[74,6076,2044],{"class":80},[74,6078,6079],{"class":84},"(angle), ",[74,6081,81],{"class":80},[74,6083,95],{"class":84},[74,6085,98],{"class":80},[74,6087,101],{"class":84},[74,6089,272],{"class":104},[74,6091,108],{"class":88},[74,6093,111],{"class":84},[74,6095,5770],{"class":104},[74,6097,108],{"class":88},[74,6099,111],{"class":84},[74,6101,3717],{"class":104},[74,6103,108],{"class":88},[74,6105,532],{"class":84},[74,6107,6109,6112,6114,6116,6118],{"class":76,"line":6108},329,[74,6110,6111],{"class":84},"            ourShader.",[74,6113,5842],{"class":80},[74,6115,101],{"class":84},[74,6117,5847],{"class":1121},[74,6119,6120],{"class":84},", modelMatrix);\n",[74,6122,6124],{"class":76,"line":6123},330,[74,6125,1184],{"emptyLinePlaceholder":1183},[74,6127,6129,6132,6135,6137,6139,6142],{"class":76,"line":6128},331,[74,6130,6131],{"class":80},"            glDrawArrays",[74,6133,6134],{"class":84},"(GL_TRIANGLES, ",[74,6136,1263],{"class":104},[74,6138,111],{"class":84},[74,6140,6141],{"class":104},"36",[74,6143,125],{"class":84},[74,6145,6147],{"class":76,"line":6146},332,[74,6148,2388],{"class":84},[74,6150,6152],{"class":76,"line":6151},333,[74,6153,5746],{"class":84},[74,6155,6157],{"class":76,"line":6156},334,[74,6158,6159],{"class":914},"        \u002F\u002F 交换缓冲区和检查IO事件\n",[74,6161,6163,6166],{"class":76,"line":6162},335,[74,6164,6165],{"class":80},"        glfwSwapBuffers",[74,6167,3568],{"class":84},[74,6169,6171],{"class":76,"line":6170},336,[74,6172,1430],{"class":84},[74,6174,6176],{"class":76,"line":6175},337,[74,6177,1184],{"emptyLinePlaceholder":1183},[74,6179,6181],{"class":76,"line":6180},338,[74,6182,6183],{"class":914},"    \u002F\u002F 清理资源\n",[74,6185,6187,6190,6192,6194,6196,6198],{"class":76,"line":6186},339,[74,6188,6189],{"class":80},"    glDeleteVertexArrays",[74,6191,101],{"class":84},[74,6193,3547],{"class":104},[74,6195,111],{"class":84},[74,6197,1377],{"class":88},[74,6199,5366],{"class":84},[74,6201,6203,6206,6208,6210,6212,6214],{"class":76,"line":6202},340,[74,6204,6205],{"class":80},"    glDeleteBuffers",[74,6207,101],{"class":84},[74,6209,3547],{"class":104},[74,6211,111],{"class":84},[74,6213,1377],{"class":88},[74,6215,5416],{"class":84},[74,6217,6219,6222,6224,6226,6228,6230],{"class":76,"line":6218},341,[74,6220,6221],{"class":80},"    glDeleteTextures",[74,6223,101],{"class":84},[74,6225,3547],{"class":104},[74,6227,111],{"class":84},[74,6229,1377],{"class":88},[74,6231,6232],{"class":84},"texture);\n",[74,6234,6236,6238,6240,6242,6244,6246],{"class":76,"line":6235},342,[74,6237,6221],{"class":80},[74,6239,101],{"class":84},[74,6241,3547],{"class":104},[74,6243,111],{"class":84},[74,6245,1377],{"class":88},[74,6247,6248],{"class":84},"texture2);\n",[74,6250,6252,6255],{"class":76,"line":6251},343,[74,6253,6254],{"class":80},"    glfwTerminate",[74,6256,1355],{"class":84},[74,6258,6260,6263,6265],{"class":76,"line":6259},344,[74,6261,6262],{"class":88},"    return",[74,6264,5968],{"class":104},[74,6266,570],{"class":84},[74,6268,6270],{"class":76,"line":6269},345,[74,6271,1075],{"class":84},[25,6273,6274],{"id":6274},"移动速度",[21,6276,6277,6278,6281,6282,6285],{},"​\t目前我们的",[33,6279,6280],{},"移动速度是个常量。理论上没什么问题，但是实际情况下根据处理器的能力不同，有些人可能会比其他人每秒绘制更多帧","，也就是",[33,6283,6284],{},"以更高的频率调用processInput函数。结果就是，根据配置的不同，有些人可能移动很快，而有些人会移动很慢","。当你发布你的程序的时候，你必须确保它在所有硬件上移动速度都一样。",[21,6287,6288,6289,6292,6293,6296],{},"​\t图形程序和游戏",[33,6290,6291],{},"通常会跟踪一个时间差(Deltatime)变量","，它",[33,6294,6295],{},"储存了渲染上一帧所用的时间。我们把所有速度都去乘以deltaTime值","。结果就是，如果我们的deltaTime很大，就意味着上一帧的渲染花费了更多时间，所以这一帧的速度需要变得更高来平衡渲染所花去的时间。使用这种方法时，无论你的电脑快还是慢，摄像机的速度都会相应平衡，这样每个用户的体验就都一样了。",[21,6298,6299],{},"​\twin11上dpi不稳定的解决方案： dpi稳定器：",[10,6301,6303],{"className":68,"code":6302,"language":70,"meta":19,"style":19},"#pragma once\n\n#include \u003CGLFW\u002Fglfw3.h>\n#include \u003Cglm\u002Fglm.hpp>\n#include \u003Cglm\u002Fgtc\u002Fmatrix_transform.hpp>\n#include \u003Ciostream>\n#include \u003Ccmath>\n#include \u003Cstring>\n#include \u003Calgorithm>\n\n\u002F**\n * @brief DPI 稳定器类 - 解决 Windows 11 等系统上的鼠标 DPI 漂移问题\n * \n * 功能特性：\n * - 异常偏移检测和过滤\n * - 动态敏感度调整\n * - DPI 感知设置\n * - 平滑的鼠标输入处理\n *\u002F\nclass DPIStabilizer {\nprivate:\n    \u002F\u002F 鼠标状态变量\n    float yawAngle;\n    float pitchAngle;\n    float lastX, lastY;\n    bool firstMouse;\n    bool mouseCaptured;\n    \n    \u002F\u002F DPI 稳定性参数\n    float mouseSensitivity;\n    float maxOffset;           \u002F\u002F 最大允许偏移量\n    int frameCount;           \u002F\u002F 帧计数器\n    float smoothingFactor;    \u002F\u002F 平滑因子\n    \n    \u002F\u002F 相机相关\n    glm::vec3 cameraPos;\n    glm::vec3 cameraFront;\n    glm::vec3 cameraUp;\n    \n    \u002F\u002F 统计信息\n    int totalMoves;\n    int filteredMoves;\n    float averageOffset;\n\npublic:\n    \u002F**\n     * @brief 构造函数\n     * @param sensitivity 初始鼠标敏感度 (默认 0.1f)\n     * @param maxOffset 最大允许偏移量 (默认 50.0f)\n     * @param smoothing 平滑因子 (默认 0.8f)\n     *\u002F\n    DPIStabilizer(float sensitivity = 0.1f, float maxOffset = 50.0f, float smoothing = 0.8f)\n        : yawAngle(-90.0f), pitchAngle(0.0f), lastX(400.0f), lastY(300.0f)\n        , firstMouse(true), mouseCaptured(true)\n        , mouseSensitivity(sensitivity), maxOffset(maxOffset), frameCount(0)\n        , smoothingFactor(smoothing), totalMoves(0), filteredMoves(0), averageOffset(0.0f)\n        , cameraPos(0.0f, 0.0f, 3.0f), cameraFront(0.0f, 0.0f, -1.0f), cameraUp(0.0f, 1.0f, 0.0f) {\n    }\n\n    \u002F**\n     * @brief 设置 DPI 感知提示（在创建窗口前调用）\n     *\u002F\n    static void setDPIHint() {\n        glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE);\n    }\n\n    \u002F**\n     * @brief 初始化 DPI 稳定器（在窗口创建后调用）\n     * @param window GLFW 窗口指针\n     *\u002F\n    void initialize(GLFWwindow* window) {\n        \u002F\u002F 设置用户指针，用于静态回调函数\n        glfwSetWindowUserPointer(window, this);\n        \n        \u002F\u002F 设置鼠标回调\n        glfwSetCursorPosCallback(window, mouseCallback);\n        \n        \u002F\u002F 捕获鼠标\n        glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n        \n        std::cout \u003C\u003C \"DPI 稳定器已初始化\" \u003C\u003C std::endl;\n    }\n\n    \u002F**\n     * @brief 鼠标回调函数（静态，供 GLFW 调用）\n     *\u002F\n    static void mouseCallback(GLFWwindow* window, double xpos, double ypos) {\n        \u002F\u002F 获取实例指针（通过用户指针存储）\n        DPIStabilizer* stabilizer = static_cast\u003CDPIStabilizer*>(glfwGetWindowUserPointer(window));\n        if (stabilizer) {\n            stabilizer->processMouseInput(xpos, ypos);\n        }\n    }\n\n    \u002F**\n     * @brief 处理鼠标输入\n     * @param xpos 鼠标 X 坐标\n     * @param ypos 鼠标 Y 坐标\n     *\u002F\n    void processMouseInput(double xpos, double ypos) {\n        if (!mouseCaptured) return;\n        \n        \u002F\u002F 第一次鼠标移动\n        if (firstMouse) {\n            lastX = xpos;\n            lastY = ypos;\n            firstMouse = false;\n            return;\n        }\n\n        \u002F\u002F 计算偏移量\n        float xoffset = xpos - lastX;\n        float yoffset = lastY - ypos; \u002F\u002F Y 轴反向\n        lastX = xpos;\n        lastY = ypos;\n\n        \u002F\u002F 统计信息\n        totalMoves++;\n        float currentOffset = std::sqrt(xoffset * xoffset + yoffset * yoffset);\n        averageOffset = (averageOffset * (totalMoves - 1) + currentOffset) \u002F totalMoves;\n\n        \u002F\u002F DPI 漂移检测\n        if (currentOffset > maxOffset) {\n            filteredMoves++;\n            std::cout \u003C\u003C \"检测到异常偏移: \" \u003C\u003C currentOffset \u003C\u003C \" 像素，已过滤\" \u003C\u003C std::endl;\n            return;\n        }\n\n        \u002F\u002F 应用敏感度\n        xoffset *= mouseSensitivity;\n        yoffset *= mouseSensitivity;\n\n        \u002F\u002F 平滑处理\n        xoffset *= smoothingFactor;\n        yoffset *= smoothingFactor;\n\n        \u002F\u002F 更新角度\n        yawAngle += xoffset;\n        pitchAngle += yoffset;\n\n        \u002F\u002F 限制俯仰角\n        if (pitchAngle > 89.0f) pitchAngle = 89.0f;\n        if (pitchAngle \u003C -89.0f) pitchAngle = -89.0f;\n\n        \u002F\u002F 计算新的相机方向\n        updateCameraDirection();\n    }\n\n    \u002F**\n     * @brief 更新相机方向\n     *\u002F\n    void updateCameraDirection() {\n        glm::vec3 front;\n        front.x = cos(glm::radians(yawAngle)) * cos(glm::radians(pitchAngle));\n        front.y = sin(glm::radians(pitchAngle));\n        front.z = sin(glm::radians(yawAngle)) * cos(glm::radians(pitchAngle));\n        cameraFront = glm::normalize(front);\n    }\n\n    \u002F**\n     * @brief 处理键盘输入\n     * @param window GLFW 窗口指针\n     *\u002F\n    void processKeyboardInput(GLFWwindow* window) {\n        \u002F\u002F 动态调整敏感度\n        if (glfwGetKey(window, GLFW_KEY_EQUAL) == GLFW_PRESS) {\n            mouseSensitivity += 0.01f;\n            if (mouseSensitivity > 0.5f) mouseSensitivity = 0.5f;\n            std::cout \u003C\u003C \"鼠标敏感度: \" \u003C\u003C mouseSensitivity \u003C\u003C std::endl;\n        }\n        if (glfwGetKey(window, GLFW_KEY_MINUS) == GLFW_PRESS) {\n            mouseSensitivity -= 0.01f;\n            if (mouseSensitivity \u003C 0.01f) mouseSensitivity = 0.01f;\n            std::cout \u003C\u003C \"鼠标敏感度: \" \u003C\u003C mouseSensitivity \u003C\u003C std::endl;\n        }\n\n        \u002F\u002F Ctrl+Alt 切换鼠标捕获\n        bool ctrlPressed = glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || \n                          glfwGetKey(window, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS;\n        bool altPressed = glfwGetKey(window, GLFW_KEY_LEFT_ALT) == GLFW_PRESS || \n                          glfwGetKey(window, GLFW_KEY_RIGHT_ALT) == GLFW_PRESS;\n        \n        if (ctrlPressed && altPressed) {\n            toggleMouseCapture(window);\n        }\n\n        \u002F\u002F WASD 移动（仅在捕获模式下）\n        if (mouseCaptured) {\n            float cameraSpeed = 0.05f;\n            if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)\n                cameraPos += cameraSpeed * cameraFront;\n            if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)\n                cameraPos -= cameraSpeed * cameraFront;\n            if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)\n                cameraPos -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;\n            if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)\n                cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed;\n        }\n    }\n\n    \u002F**\n     * @brief 切换鼠标捕获状态\n     * @param window GLFW 窗口指针\n     *\u002F\n    void toggleMouseCapture(GLFWwindow* window) {\n        if (mouseCaptured) {\n            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);\n            mouseCaptured = false;\n            firstMouse = true;\n            std::cout \u003C\u003C \"鼠标捕获已释放 - 按 Ctrl+Alt 重新捕获\" \u003C\u003C std::endl;\n        } else {\n            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);\n            mouseCaptured = true;\n            firstMouse = true;\n            std::cout \u003C\u003C \"鼠标捕获已启用\" \u003C\u003C std::endl;\n        }\n    }\n\n    \u002F**\n     * @brief 获取 View 矩阵\n     * @return glm::mat4 View 矩阵\n     *\u002F\n    glm::mat4 getViewMatrix() const {\n        return glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);\n    }\n\n    \u002F**\n     * @brief 获取相机位置\n     * @return glm::vec3 相机位置\n     *\u002F\n    glm::vec3 getCameraPosition() const {\n        return cameraPos;\n    }\n\n    \u002F**\n     * @brief 获取相机朝向\n     * @return glm::vec3 相机朝向\n     *\u002F\n    glm::vec3 getCameraFront() const {\n        return cameraFront;\n    }\n\n    \u002F**\n     * @brief 设置相机位置\n     * @param pos 新的相机位置\n     *\u002F\n    void setCameraPosition(const glm::vec3& pos) {\n        cameraPos = pos;\n    }\n\n    \u002F**\n     * @brief 设置鼠标敏感度\n     * @param sensitivity 新的敏感度值\n     *\u002F\n    void setSensitivity(float sensitivity) {\n        mouseSensitivity = std::max(0.01f, std::min(0.5f, sensitivity));\n    }\n\n    \u002F**\n     * @brief 获取当前敏感度\n     * @return float 当前敏感度\n     *\u002F\n    float getSensitivity() const {\n        return mouseSensitivity;\n    }\n\n    \u002F**\n     * @brief 获取统计信息\n     * @return std::string 统计信息字符串\n     *\u002F\n    std::string getStats() const {\n        std::string stats = \"DPI 稳定器统计:\\n\";\n        stats += \"总移动次数: \" + std::to_string(totalMoves) + \"\\n\";\n        stats += \"过滤次数: \" + std::to_string(filteredMoves) + \"\\n\";\n        \n        float filterRate = (totalMoves > 0) ? (float)filteredMoves \u002F totalMoves * 100.0f : 0.0f;\n        stats += \"过滤率: \" + std::to_string(filterRate) + \"%\\n\";\n        stats += \"平均偏移: \" + std::to_string(averageOffset) + \" 像素\\n\";\n        stats += \"当前敏感度: \" + std::to_string(mouseSensitivity) + \"\\n\";\n        return stats;\n    }\n\n    \u002F**\n     * @brief 重置统计信息\n     *\u002F\n    void resetStats() {\n        totalMoves = 0;\n        filteredMoves = 0;\n        averageOffset = 0.0f;\n    }\n\n    \u002F**\n     * @brief 设置最大偏移量\n     * @param maxOffset 新的最大偏移量\n     *\u002F\n    void setMaxOffset(float maxOffset) {\n        this->maxOffset = maxOffset;\n    }\n\n    \u002F**\n     * @brief 获取是否被捕获\n     * @return bool 是否被捕获\n     *\u002F\n    bool isMouseCaptured() const {\n        return mouseCaptured;\n    }\n};\n\n",[17,6304,6305,6313,6317,6323,6330,6337,6343,6349,6356,6363,6367,6372,6383,6388,6393,6398,6403,6408,6413,6418,6428,6433,6438,6445,6452,6459,6466,6473,6477,6482,6489,6499,6509,6519,6523,6528,6540,6550,6561,6565,6570,6577,6584,6591,6595,6600,6605,6615,6628,6640,6652,6657,6702,6755,6779,6804,6843,6918,6922,6926,6930,6939,6943,6956,6964,6968,6972,6976,6985,6996,7000,7018,7023,7036,7040,7045,7053,7057,7062,7069,7073,7090,7094,7098,7102,7111,7115,7146,7151,7180,7187,7198,7202,7206,7210,7214,7223,7234,7245,7249,7270,7284,7288,7293,7299,7308,7317,7327,7334,7338,7342,7347,7362,7379,7387,7395,7399,7404,7413,7445,7477,7481,7486,7498,7507,7533,7539,7543,7547,7552,7561,7570,7574,7579,7588,7596,7600,7605,7614,7622,7626,7631,7654,7680,7684,7689,7696,7700,7704,7708,7717,7721,7730,7741,7774,7793,7826,7841,7845,7849,7853,7862,7872,7876,7893,7898,7914,7928,7954,7976,7980,7995,8007,8029,8049,8053,8057,8062,8083,8094,8114,8124,8128,8138,8145,8149,8153,8158,8164,8178,8192,8205,8219,8231,8245,8271,8285,8311,8315,8319,8323,8327,8336,8346,8350,8367,8373,8379,8389,8399,8415,8423,8429,8439,8449,8465,8469,8473,8477,8481,8490,8500,8504,8521,8537,8541,8545,8549,8558,8567,8571,8588,8594,8598,8602,8606,8615,8624,8628,8645,8651,8655,8659,8663,8672,8684,8688,8711,8720,8724,8728,8732,8741,8752,8756,8771,8810,8814,8818,8822,8831,8840,8844,8857,8863,8867,8871,8875,8884,8893,8897,8914,8938,8972,9002,9006,9054,9085,9116,9146,9153,9157,9161,9165,9174,9178,9187,9198,9209,9221,9225,9229,9233,9242,9253,9257,9272,9285,9289,9293,9297,9306,9315,9319,9332,9338,9342],{"__ignoreMap":19},[74,6306,6307,6310],{"class":76,"line":77},[74,6308,6309],{"class":88},"#pragma",[74,6311,6312],{"class":80}," once\n",[74,6314,6315],{"class":76,"line":192},[74,6316,1184],{"emptyLinePlaceholder":1183},[74,6318,6319,6321],{"class":76,"line":475},[74,6320,1118],{"class":88},[74,6322,1129],{"class":1121},[74,6324,6325,6327],{"class":76,"line":505},[74,6326,1118],{"class":88},[74,6328,6329],{"class":1121}," \u003Cglm\u002Fglm.hpp>\n",[74,6331,6332,6334],{"class":76,"line":627},[74,6333,1118],{"class":88},[74,6335,6336],{"class":1121}," \u003Cglm\u002Fgtc\u002Fmatrix_transform.hpp>\n",[74,6338,6339,6341],{"class":76,"line":938},[74,6340,1118],{"class":88},[74,6342,1143],{"class":1121},[74,6344,6345,6347],{"class":76,"line":954},[74,6346,1118],{"class":88},[74,6348,1150],{"class":1121},[74,6350,6351,6353],{"class":76,"line":970},[74,6352,1118],{"class":88},[74,6354,6355],{"class":1121}," \u003Cstring>\n",[74,6357,6358,6360],{"class":76,"line":984},[74,6359,1118],{"class":88},[74,6361,6362],{"class":1121}," \u003Calgorithm>\n",[74,6364,6365],{"class":76,"line":1000},[74,6366,1184],{"emptyLinePlaceholder":1183},[74,6368,6369],{"class":76,"line":1029},[74,6370,6371],{"class":914},"\u002F**\n",[74,6373,6374,6377,6380],{"class":76,"line":1045},[74,6375,6376],{"class":914}," * ",[74,6378,6379],{"class":88},"@brief",[74,6381,6382],{"class":914}," DPI 稳定器类 - 解决 Windows 11 等系统上的鼠标 DPI 漂移问题\n",[74,6384,6385],{"class":76,"line":1072},[74,6386,6387],{"class":914}," * \n",[74,6389,6390],{"class":76,"line":1214},[74,6391,6392],{"class":914}," * 功能特性：\n",[74,6394,6395],{"class":76,"line":1220},[74,6396,6397],{"class":914}," * - 异常偏移检测和过滤\n",[74,6399,6400],{"class":76,"line":1255},[74,6401,6402],{"class":914}," * - 动态敏感度调整\n",[74,6404,6405],{"class":76,"line":1273},[74,6406,6407],{"class":914}," * - DPI 感知设置\n",[74,6409,6410],{"class":76,"line":1278},[74,6411,6412],{"class":914}," * - 平滑的鼠标输入处理\n",[74,6414,6415],{"class":76,"line":1283},[74,6416,6417],{"class":914}," *\u002F\n",[74,6419,6420,6423,6426],{"class":76,"line":1300},[74,6421,6422],{"class":88},"class",[74,6424,6425],{"class":80}," DPIStabilizer",[74,6427,1328],{"class":84},[74,6429,6430],{"class":76,"line":1322},[74,6431,6432],{"class":88},"private:\n",[74,6434,6435],{"class":76,"line":1331},[74,6436,6437],{"class":914},"    \u002F\u002F 鼠标状态变量\n",[74,6439,6440,6442],{"class":76,"line":1337},[74,6441,898],{"class":88},[74,6443,6444],{"class":84}," yawAngle;\n",[74,6446,6447,6449],{"class":76,"line":1358},[74,6448,898],{"class":88},[74,6450,6451],{"class":84}," pitchAngle;\n",[74,6453,6454,6456],{"class":76,"line":1383},[74,6455,898],{"class":88},[74,6457,6458],{"class":84}," lastX, lastY;\n",[74,6460,6461,6463],{"class":76,"line":1417},[74,6462,2154],{"class":88},[74,6464,6465],{"class":84}," firstMouse;\n",[74,6467,6468,6470],{"class":76,"line":1427},[74,6469,2154],{"class":88},[74,6471,6472],{"class":84}," mouseCaptured;\n",[74,6474,6475],{"class":76,"line":1433},[74,6476,1750],{"class":84},[74,6478,6479],{"class":76,"line":1438},[74,6480,6481],{"class":914},"    \u002F\u002F DPI 稳定性参数\n",[74,6483,6484,6486],{"class":76,"line":1443},[74,6485,898],{"class":88},[74,6487,6488],{"class":84}," mouseSensitivity;\n",[74,6490,6491,6493,6496],{"class":76,"line":1449},[74,6492,898],{"class":88},[74,6494,6495],{"class":84}," maxOffset;",[74,6497,6498],{"class":914},"           \u002F\u002F 最大允许偏移量\n",[74,6500,6501,6503,6506],{"class":76,"line":1480},[74,6502,5454],{"class":88},[74,6504,6505],{"class":84}," frameCount;",[74,6507,6508],{"class":914},"           \u002F\u002F 帧计数器\n",[74,6510,6511,6513,6516],{"class":76,"line":1516},[74,6512,898],{"class":88},[74,6514,6515],{"class":84}," smoothingFactor;",[74,6517,6518],{"class":914},"    \u002F\u002F 平滑因子\n",[74,6520,6521],{"class":76,"line":1549},[74,6522,1750],{"class":84},[74,6524,6525],{"class":76,"line":1554},[74,6526,6527],{"class":914},"    \u002F\u002F 相机相关\n",[74,6529,6530,6533,6535,6537],{"class":76,"line":1560},[74,6531,6532],{"class":80},"    glm",[74,6534,95],{"class":84},[74,6536,98],{"class":80},[74,6538,6539],{"class":84}," cameraPos;\n",[74,6541,6542,6544,6546,6548],{"class":76,"line":1583},[74,6543,6532],{"class":80},[74,6545,95],{"class":84},[74,6547,98],{"class":80},[74,6549,951],{"class":84},[74,6551,6552,6554,6556,6558],{"class":76,"line":1603},[74,6553,6532],{"class":80},[74,6555,95],{"class":84},[74,6557,98],{"class":80},[74,6559,6560],{"class":84}," cameraUp;\n",[74,6562,6563],{"class":76,"line":1623},[74,6564,1750],{"class":84},[74,6566,6567],{"class":76,"line":1643},[74,6568,6569],{"class":914},"    \u002F\u002F 统计信息\n",[74,6571,6572,6574],{"class":76,"line":1662},[74,6573,5454],{"class":88},[74,6575,6576],{"class":84}," totalMoves;\n",[74,6578,6579,6581],{"class":76,"line":1679},[74,6580,5454],{"class":88},[74,6582,6583],{"class":84}," filteredMoves;\n",[74,6585,6586,6588],{"class":76,"line":1684},[74,6587,898],{"class":88},[74,6589,6590],{"class":84}," averageOffset;\n",[74,6592,6593],{"class":76,"line":1690},[74,6594,1184],{"emptyLinePlaceholder":1183},[74,6596,6597],{"class":76,"line":1723},[74,6598,6599],{"class":88},"public:\n",[74,6601,6602],{"class":76,"line":1729},[74,6603,6604],{"class":914},"    \u002F**\n",[74,6606,6607,6610,6612],{"class":76,"line":1747},[74,6608,6609],{"class":914},"     * ",[74,6611,6379],{"class":88},[74,6613,6614],{"class":914}," 构造函数\n",[74,6616,6617,6619,6622,6625],{"class":76,"line":1753},[74,6618,6609],{"class":914},[74,6620,6621],{"class":88},"@param",[74,6623,6624],{"class":879}," sensitivity",[74,6626,6627],{"class":914}," 初始鼠标敏感度 (默认 0.1f)\n",[74,6629,6630,6632,6634,6637],{"class":76,"line":1761},[74,6631,6609],{"class":914},[74,6633,6621],{"class":88},[74,6635,6636],{"class":879}," maxOffset",[74,6638,6639],{"class":914}," 最大允许偏移量 (默认 50.0f)\n",[74,6641,6642,6644,6646,6649],{"class":76,"line":1772},[74,6643,6609],{"class":914},[74,6645,6621],{"class":88},[74,6647,6648],{"class":879}," smoothing",[74,6650,6651],{"class":914}," 平滑因子 (默认 0.8f)\n",[74,6653,6654],{"class":76,"line":1783},[74,6655,6656],{"class":914},"     *\u002F\n",[74,6658,6659,6662,6664,6666,6668,6670,6672,6674,6676,6678,6680,6682,6685,6687,6689,6691,6693,6695,6698,6700],{"class":76,"line":1796},[74,6660,6661],{"class":80},"    DPIStabilizer",[74,6663,101],{"class":84},[74,6665,557],{"class":88},[74,6667,6624],{"class":879},[74,6669,1309],{"class":88},[74,6671,1879],{"class":104},[74,6673,108],{"class":88},[74,6675,111],{"class":84},[74,6677,557],{"class":88},[74,6679,6636],{"class":879},[74,6681,1309],{"class":88},[74,6683,6684],{"class":104}," 50.0",[74,6686,108],{"class":88},[74,6688,111],{"class":84},[74,6690,557],{"class":88},[74,6692,6648],{"class":879},[74,6694,1309],{"class":88},[74,6696,6697],{"class":104}," 0.8",[74,6699,108],{"class":88},[74,6701,883],{"class":84},[74,6703,6704,6707,6710,6712,6714,6716,6718,6720,6723,6725,6727,6729,6731,6734,6736,6739,6741,6743,6746,6748,6751,6753],{"class":76,"line":1801},[74,6705,6706],{"class":84},"        : ",[74,6708,6709],{"class":80},"yawAngle",[74,6711,101],{"class":84},[74,6713,212],{"class":88},[74,6715,1573],{"class":104},[74,6717,108],{"class":88},[74,6719,674],{"class":84},[74,6721,6722],{"class":80},"pitchAngle",[74,6724,101],{"class":84},[74,6726,105],{"class":104},[74,6728,108],{"class":88},[74,6730,674],{"class":84},[74,6732,6733],{"class":80},"lastX",[74,6735,101],{"class":84},[74,6737,6738],{"class":104},"400.0",[74,6740,108],{"class":88},[74,6742,674],{"class":84},[74,6744,6745],{"class":80},"lastY",[74,6747,101],{"class":84},[74,6749,6750],{"class":104},"300.0",[74,6752,108],{"class":88},[74,6754,883],{"class":84},[74,6756,6757,6760,6763,6765,6768,6770,6773,6775,6777],{"class":76,"line":1806},[74,6758,6759],{"class":84},"        , ",[74,6761,6762],{"class":80},"firstMouse",[74,6764,101],{"class":84},[74,6766,6767],{"class":104},"true",[74,6769,674],{"class":84},[74,6771,6772],{"class":80},"mouseCaptured",[74,6774,101],{"class":84},[74,6776,6767],{"class":104},[74,6778,883],{"class":84},[74,6780,6781,6783,6786,6789,6792,6795,6798,6800,6802],{"class":76,"line":1824},[74,6782,6759],{"class":84},[74,6784,6785],{"class":80},"mouseSensitivity",[74,6787,6788],{"class":84},"(sensitivity), ",[74,6790,6791],{"class":80},"maxOffset",[74,6793,6794],{"class":84},"(maxOffset), ",[74,6796,6797],{"class":80},"frameCount",[74,6799,101],{"class":84},[74,6801,1263],{"class":104},[74,6803,883],{"class":84},[74,6805,6806,6808,6811,6814,6817,6819,6821,6823,6826,6828,6830,6832,6835,6837,6839,6841],{"class":76,"line":1844},[74,6807,6759],{"class":84},[74,6809,6810],{"class":80},"smoothingFactor",[74,6812,6813],{"class":84},"(smoothing), ",[74,6815,6816],{"class":80},"totalMoves",[74,6818,101],{"class":84},[74,6820,1263],{"class":104},[74,6822,674],{"class":84},[74,6824,6825],{"class":80},"filteredMoves",[74,6827,101],{"class":84},[74,6829,1263],{"class":104},[74,6831,674],{"class":84},[74,6833,6834],{"class":80},"averageOffset",[74,6836,101],{"class":84},[74,6838,105],{"class":104},[74,6840,108],{"class":88},[74,6842,883],{"class":84},[74,6844,6845,6847,6850,6852,6854,6856,6858,6860,6862,6864,6866,6868,6870,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916],{"class":76,"line":1854},[74,6846,6759],{"class":84},[74,6848,6849],{"class":80},"cameraPos",[74,6851,101],{"class":84},[74,6853,105],{"class":104},[74,6855,108],{"class":88},[74,6857,111],{"class":84},[74,6859,105],{"class":104},[74,6861,108],{"class":88},[74,6863,111],{"class":84},[74,6865,120],{"class":104},[74,6867,108],{"class":88},[74,6869,674],{"class":84},[74,6871,6872],{"class":80},"cameraFront",[74,6874,101],{"class":84},[74,6876,105],{"class":104},[74,6878,108],{"class":88},[74,6880,111],{"class":84},[74,6882,105],{"class":104},[74,6884,108],{"class":88},[74,6886,111],{"class":84},[74,6888,212],{"class":88},[74,6890,272],{"class":104},[74,6892,108],{"class":88},[74,6894,674],{"class":84},[74,6896,6897],{"class":80},"cameraUp",[74,6899,101],{"class":84},[74,6901,105],{"class":104},[74,6903,108],{"class":88},[74,6905,111],{"class":84},[74,6907,272],{"class":104},[74,6909,108],{"class":88},[74,6911,111],{"class":84},[74,6913,105],{"class":104},[74,6915,108],{"class":88},[74,6917,1252],{"class":84},[74,6919,6920],{"class":76,"line":1864},[74,6921,1430],{"class":84},[74,6923,6924],{"class":76,"line":1869},[74,6925,1184],{"emptyLinePlaceholder":1183},[74,6927,6928],{"class":76,"line":1886},[74,6929,6604],{"class":914},[74,6931,6932,6934,6936],{"class":76,"line":1898},[74,6933,6609],{"class":914},[74,6935,6379],{"class":88},[74,6937,6938],{"class":914}," 设置 DPI 感知提示（在创建窗口前调用）\n",[74,6940,6941],{"class":76,"line":1908},[74,6942,6656],{"class":914},[74,6944,6945,6948,6951,6954],{"class":76,"line":1913},[74,6946,6947],{"class":88},"    static",[74,6949,6950],{"class":88}," void",[74,6952,6953],{"class":80}," setDPIHint",[74,6955,1297],{"class":84},[74,6957,6958,6961],{"class":76,"line":1924},[74,6959,6960],{"class":80},"        glfwWindowHint",[74,6962,6963],{"class":84},"(GLFW_SCALE_TO_MONITOR, GLFW_TRUE);\n",[74,6965,6966],{"class":76,"line":1935},[74,6967,1430],{"class":84},[74,6969,6970],{"class":76,"line":1940},[74,6971,1184],{"emptyLinePlaceholder":1183},[74,6973,6974],{"class":76,"line":1946},[74,6975,6604],{"class":914},[74,6977,6978,6980,6982],{"class":76,"line":1964},[74,6979,6609],{"class":914},[74,6981,6379],{"class":88},[74,6983,6984],{"class":914}," 初始化 DPI 稳定器（在窗口创建后调用）\n",[74,6986,6987,6989,6991,6993],{"class":76,"line":1978},[74,6988,6609],{"class":914},[74,6990,6621],{"class":88},[74,6992,1234],{"class":879},[74,6994,6995],{"class":914}," GLFW 窗口指针\n",[74,6997,6998],{"class":76,"line":1997},[74,6999,6656],{"class":914},[74,7001,7002,7005,7008,7010,7012,7014,7016],{"class":76,"line":2012},[74,7003,7004],{"class":88},"    void",[74,7006,7007],{"class":80}," initialize",[74,7009,101],{"class":84},[74,7011,873],{"class":80},[74,7013,593],{"class":88},[74,7015,1234],{"class":879},[74,7017,1252],{"class":84},[74,7019,7020],{"class":76,"line":2017},[74,7021,7022],{"class":914},"        \u002F\u002F 设置用户指针，用于静态回调函数\n",[74,7024,7025,7028,7031,7034],{"class":76,"line":2023},[74,7026,7027],{"class":80},"        glfwSetWindowUserPointer",[74,7029,7030],{"class":84},"(window, ",[74,7032,7033],{"class":104},"this",[74,7035,125],{"class":84},[74,7037,7038],{"class":76,"line":2032},[74,7039,5746],{"class":84},[74,7041,7042],{"class":76,"line":2061},[74,7043,7044],{"class":914},"        \u002F\u002F 设置鼠标回调\n",[74,7046,7047,7050],{"class":76,"line":2077},[74,7048,7049],{"class":80},"        glfwSetCursorPosCallback",[74,7051,7052],{"class":84},"(window, mouseCallback);\n",[74,7054,7055],{"class":76,"line":2103},[74,7056,5746],{"class":84},[74,7058,7059],{"class":76,"line":2117},[74,7060,7061],{"class":914},"        \u002F\u002F 捕获鼠标\n",[74,7063,7064,7067],{"class":76,"line":2122},[74,7065,7066],{"class":80},"        glfwSetInputMode",[74,7068,2340],{"class":84},[74,7070,7071],{"class":76,"line":2127},[74,7072,5746],{"class":84},[74,7074,7075,7077,7079,7081,7084,7086,7088],{"class":76,"line":2145},[74,7076,1386],{"class":80},[74,7078,2304],{"class":84},[74,7080,1392],{"class":88},[74,7082,7083],{"class":1121}," \"DPI 稳定器已初始化\"",[74,7085,1398],{"class":88},[74,7087,1312],{"class":80},[74,7089,1414],{"class":84},[74,7091,7092],{"class":76,"line":2151},[74,7093,1430],{"class":84},[74,7095,7096],{"class":76,"line":2179},[74,7097,1184],{"emptyLinePlaceholder":1183},[74,7099,7100],{"class":76,"line":2193},[74,7101,6604],{"class":914},[74,7103,7104,7106,7108],{"class":76,"line":2216},[74,7105,6609],{"class":914},[74,7107,6379],{"class":88},[74,7109,7110],{"class":914}," 鼠标回调函数（静态，供 GLFW 调用）\n",[74,7112,7113],{"class":76,"line":2228},[74,7114,6656],{"class":914},[74,7116,7117,7119,7121,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144],{"class":76,"line":2233},[74,7118,6947],{"class":88},[74,7120,6950],{"class":88},[74,7122,7123],{"class":80}," mouseCallback",[74,7125,101],{"class":84},[74,7127,873],{"class":80},[74,7129,593],{"class":88},[74,7131,1234],{"class":879},[74,7133,111],{"class":84},[74,7135,1708],{"class":88},[74,7137,1711],{"class":879},[74,7139,111],{"class":84},[74,7141,1708],{"class":88},[74,7143,1718],{"class":879},[74,7145,1252],{"class":84},[74,7147,7148],{"class":76,"line":2247},[74,7149,7150],{"class":914},"        \u002F\u002F 获取实例指针（通过用户指针存储）\n",[74,7152,7153,7156,7158,7161,7163,7166,7169,7172,7174,7177],{"class":76,"line":2256},[74,7154,7155],{"class":80},"        DPIStabilizer",[74,7157,593],{"class":88},[74,7159,7160],{"class":84}," stabilizer ",[74,7162,89],{"class":88},[74,7164,7165],{"class":88}," static_cast\u003C",[74,7167,7168],{"class":84},"DPIStabilizer",[74,7170,7171],{"class":88},"*>",[74,7173,101],{"class":84},[74,7175,7176],{"class":80},"glfwGetWindowUserPointer",[74,7178,7179],{"class":84},"(window));\n",[74,7181,7182,7184],{"class":76,"line":2262},[74,7183,2250],{"class":88},[74,7185,7186],{"class":84}," (stabilizer) {\n",[74,7188,7189,7192,7195],{"class":76,"line":2271},[74,7190,7191],{"class":84},"            stabilizer->",[74,7193,7194],{"class":80},"processMouseInput",[74,7196,7197],{"class":84},"(xpos, ypos);\n",[74,7199,7200],{"class":76,"line":2283},[74,7201,2388],{"class":84},[74,7203,7204],{"class":76,"line":2298},[74,7205,1430],{"class":84},[74,7207,7208],{"class":76,"line":2318},[74,7209,1184],{"emptyLinePlaceholder":1183},[74,7211,7212],{"class":76,"line":2329},[74,7213,6604],{"class":914},[74,7215,7216,7218,7220],{"class":76,"line":2335},[74,7217,6609],{"class":914},[74,7219,6379],{"class":88},[74,7221,7222],{"class":914}," 处理鼠标输入\n",[74,7224,7225,7227,7229,7231],{"class":76,"line":2343},[74,7226,6609],{"class":914},[74,7228,6621],{"class":88},[74,7230,1711],{"class":879},[74,7232,7233],{"class":914}," 鼠标 X 坐标\n",[74,7235,7236,7238,7240,7242],{"class":76,"line":2354},[74,7237,6609],{"class":914},[74,7239,6621],{"class":88},[74,7241,1718],{"class":879},[74,7243,7244],{"class":914}," 鼠标 Y 坐标\n",[74,7246,7247],{"class":76,"line":2367},[74,7248,6656],{"class":914},[74,7250,7251,7253,7256,7258,7260,7262,7264,7266,7268],{"class":76,"line":2385},[74,7252,7004],{"class":88},[74,7254,7255],{"class":80}," processMouseInput",[74,7257,101],{"class":84},[74,7259,1708],{"class":88},[74,7261,1711],{"class":879},[74,7263,111],{"class":84},[74,7265,1708],{"class":88},[74,7267,1718],{"class":879},[74,7269,1252],{"class":84},[74,7271,7272,7274,7276,7278,7280,7282],{"class":76,"line":2391},[74,7273,2250],{"class":88},[74,7275,923],{"class":84},[74,7277,1736],{"class":88},[74,7279,1739],{"class":84},[74,7281,1742],{"class":88},[74,7283,570],{"class":84},[74,7285,7286],{"class":76,"line":2396},[74,7287,5746],{"class":84},[74,7289,7290],{"class":76,"line":2401},[74,7291,7292],{"class":914},"        \u002F\u002F 第一次鼠标移动\n",[74,7294,7295,7297],{"class":76,"line":2407},[74,7296,2250],{"class":88},[74,7298,1758],{"class":84},[74,7300,7301,7304,7306],{"class":76,"line":2422},[74,7302,7303],{"class":84},"            lastX ",[74,7305,89],{"class":88},[74,7307,1769],{"class":84},[74,7309,7310,7313,7315],{"class":76,"line":2427},[74,7311,7312],{"class":84},"            lastY ",[74,7314,89],{"class":88},[74,7316,1780],{"class":84},[74,7318,7319,7321,7323,7325],{"class":76,"line":2442},[74,7320,2286],{"class":84},[74,7322,89],{"class":88},[74,7324,1791],{"class":104},[74,7326,570],{"class":84},[74,7328,7329,7332],{"class":76,"line":2457},[74,7330,7331],{"class":88},"            return",[74,7333,570],{"class":84},[74,7335,7336],{"class":76,"line":2470},[74,7337,2388],{"class":84},[74,7339,7340],{"class":76,"line":2485},[74,7341,1184],{"emptyLinePlaceholder":1183},[74,7343,7344],{"class":76,"line":2498},[74,7345,7346],{"class":914},"        \u002F\u002F 计算偏移量\n",[74,7348,7349,7352,7354,7356,7358,7360],{"class":76,"line":2513},[74,7350,7351],{"class":88},"        float",[74,7353,1811],{"class":84},[74,7355,89],{"class":88},[74,7357,1816],{"class":84},[74,7359,212],{"class":88},[74,7361,1821],{"class":84},[74,7363,7364,7366,7368,7370,7372,7374,7376],{"class":76,"line":2532},[74,7365,7351],{"class":88},[74,7367,1829],{"class":84},[74,7369,89],{"class":88},[74,7371,1628],{"class":84},[74,7373,212],{"class":88},[74,7375,1838],{"class":84},[74,7377,7378],{"class":914}," \u002F\u002F Y 轴反向\n",[74,7380,7381,7383,7385],{"class":76,"line":2547},[74,7382,1764],{"class":84},[74,7384,89],{"class":88},[74,7386,1769],{"class":84},[74,7388,7389,7391,7393],{"class":76,"line":2566},[74,7390,1775],{"class":84},[74,7392,89],{"class":88},[74,7394,1780],{"class":84},[74,7396,7397],{"class":76,"line":2571},[74,7398,1184],{"emptyLinePlaceholder":1183},[74,7400,7401],{"class":76,"line":2576},[74,7402,7403],{"class":914},"        \u002F\u002F 统计信息\n",[74,7405,7406,7409,7411],{"class":76,"line":2586},[74,7407,7408],{"class":84},"        totalMoves",[74,7410,5982],{"class":88},[74,7412,570],{"class":84},[74,7414,7415,7417,7420,7422,7424,7426,7429,7432,7434,7436,7438,7440,7442],{"class":76,"line":2591},[74,7416,7351],{"class":88},[74,7418,7419],{"class":84}," currentOffset ",[74,7421,89],{"class":88},[74,7423,1312],{"class":80},[74,7425,95],{"class":84},[74,7427,7428],{"class":80},"sqrt",[74,7430,7431],{"class":84},"(xoffset ",[74,7433,593],{"class":88},[74,7435,1811],{"class":84},[74,7437,842],{"class":88},[74,7439,1829],{"class":84},[74,7441,593],{"class":88},[74,7443,7444],{"class":84}," yoffset);\n",[74,7446,7447,7450,7452,7455,7457,7460,7462,7464,7467,7469,7472,7475],{"class":76,"line":2597},[74,7448,7449],{"class":84},"        averageOffset ",[74,7451,89],{"class":88},[74,7453,7454],{"class":84}," (averageOffset ",[74,7456,593],{"class":88},[74,7458,7459],{"class":84}," (totalMoves ",[74,7461,212],{"class":88},[74,7463,3218],{"class":104},[74,7465,7466],{"class":84},") ",[74,7468,842],{"class":88},[74,7470,7471],{"class":84}," currentOffset) ",[74,7473,7474],{"class":88},"\u002F",[74,7476,6576],{"class":84},[74,7478,7479],{"class":76,"line":2619},[74,7480,1184],{"emptyLinePlaceholder":1183},[74,7482,7483],{"class":76,"line":2668},[74,7484,7485],{"class":914},"        \u002F\u002F DPI 漂移检测\n",[74,7487,7488,7490,7493,7495],{"class":76,"line":2673},[74,7489,2250],{"class":88},[74,7491,7492],{"class":84}," (currentOffset ",[74,7494,1954],{"class":88},[74,7496,7497],{"class":84}," maxOffset) {\n",[74,7499,7500,7503,7505],{"class":76,"line":2679},[74,7501,7502],{"class":84},"            filteredMoves",[74,7504,5982],{"class":88},[74,7506,570],{"class":84},[74,7508,7509,7511,7513,7515,7518,7520,7522,7524,7527,7529,7531],{"class":76,"line":2699},[74,7510,2301],{"class":80},[74,7512,2304],{"class":84},[74,7514,1392],{"class":88},[74,7516,7517],{"class":1121}," \"检测到异常偏移: \"",[74,7519,1398],{"class":88},[74,7521,7419],{"class":84},[74,7523,1392],{"class":88},[74,7525,7526],{"class":1121}," \" 像素，已过滤\"",[74,7528,1398],{"class":88},[74,7530,1312],{"class":80},[74,7532,1414],{"class":84},[74,7534,7535,7537],{"class":76,"line":2719},[74,7536,7331],{"class":88},[74,7538,570],{"class":84},[74,7540,7541],{"class":76,"line":2724},[74,7542,2388],{"class":84},[74,7544,7545],{"class":76,"line":2730},[74,7546,1184],{"emptyLinePlaceholder":1183},[74,7548,7549],{"class":76,"line":2793},[74,7550,7551],{"class":914},"        \u002F\u002F 应用敏感度\n",[74,7553,7554,7557,7559],{"class":76,"line":2798},[74,7555,7556],{"class":84},"        xoffset ",[74,7558,1892],{"class":88},[74,7560,6488],{"class":84},[74,7562,7563,7566,7568],{"class":76,"line":2804},[74,7564,7565],{"class":84},"        yoffset ",[74,7567,1892],{"class":88},[74,7569,6488],{"class":84},[74,7571,7572],{"class":76,"line":2816},[74,7573,1184],{"emptyLinePlaceholder":1183},[74,7575,7576],{"class":76,"line":2843},[74,7577,7578],{"class":914},"        \u002F\u002F 平滑处理\n",[74,7580,7581,7583,7585],{"class":76,"line":2873},[74,7582,7556],{"class":84},[74,7584,1892],{"class":88},[74,7586,7587],{"class":84}," smoothingFactor;\n",[74,7589,7590,7592,7594],{"class":76,"line":2907},[74,7591,7565],{"class":84},[74,7593,1892],{"class":88},[74,7595,7587],{"class":84},[74,7597,7598],{"class":76,"line":2940},[74,7599,1184],{"emptyLinePlaceholder":1183},[74,7601,7602],{"class":76,"line":2972},[74,7603,7604],{"class":914},"        \u002F\u002F 更新角度\n",[74,7606,7607,7610,7612],{"class":76,"line":2978},[74,7608,7609],{"class":84},"        yawAngle ",[74,7611,944],{"class":88},[74,7613,1921],{"class":84},[74,7615,7616,7618,7620],{"class":76,"line":2983},[74,7617,1967],{"class":84},[74,7619,944],{"class":88},[74,7621,1932],{"class":84},[74,7623,7624],{"class":76,"line":3008},[74,7625,1184],{"emptyLinePlaceholder":1183},[74,7627,7628],{"class":76,"line":3031},[74,7629,7630],{"class":914},"        \u002F\u002F 限制俯仰角\n",[74,7632,7633,7635,7637,7639,7641,7643,7646,7648,7650,7652],{"class":76,"line":3057},[74,7634,2250],{"class":88},[74,7636,1951],{"class":84},[74,7638,1954],{"class":88},[74,7640,1957],{"class":104},[74,7642,108],{"class":88},[74,7644,7645],{"class":84},") pitchAngle ",[74,7647,89],{"class":88},[74,7649,1957],{"class":104},[74,7651,108],{"class":88},[74,7653,570],{"class":84},[74,7655,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678],{"class":76,"line":3080},[74,7657,2250],{"class":88},[74,7659,1951],{"class":84},[74,7661,1985],{"class":88},[74,7663,1570],{"class":88},[74,7665,1990],{"class":104},[74,7667,108],{"class":88},[74,7669,7645],{"class":84},[74,7671,89],{"class":88},[74,7673,1570],{"class":88},[74,7675,1990],{"class":104},[74,7677,108],{"class":88},[74,7679,570],{"class":84},[74,7681,7682],{"class":76,"line":3097},[74,7683,1184],{"emptyLinePlaceholder":1183},[74,7685,7686],{"class":76,"line":3116},[74,7687,7688],{"class":914},"        \u002F\u002F 计算新的相机方向\n",[74,7690,7691,7694],{"class":76,"line":3131},[74,7692,7693],{"class":80},"        updateCameraDirection",[74,7695,1355],{"class":84},[74,7697,7698],{"class":76,"line":3136},[74,7699,1430],{"class":84},[74,7701,7702],{"class":76,"line":3142},[74,7703,1184],{"emptyLinePlaceholder":1183},[74,7705,7706],{"class":76,"line":3161},[74,7707,6604],{"class":914},[74,7709,7710,7712,7714],{"class":76,"line":3177},[74,7711,6609],{"class":914},[74,7713,6379],{"class":88},[74,7715,7716],{"class":914}," 更新相机方向\n",[74,7718,7719],{"class":76,"line":3191},[74,7720,6656],{"class":914},[74,7722,7723,7725,7728],{"class":76,"line":3213},[74,7724,7004],{"class":88},[74,7726,7727],{"class":80}," updateCameraDirection",[74,7729,1297],{"class":84},[74,7731,7732,7735,7737,7739],{"class":76,"line":3223},[74,7733,7734],{"class":80},"        glm",[74,7736,95],{"class":84},[74,7738,98],{"class":80},[74,7740,2029],{"class":84},[74,7742,7743,7746,7748,7750,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770,7772],{"class":76,"line":3228},[74,7744,7745],{"class":84},"        front.x ",[74,7747,89],{"class":88},[74,7749,608],{"class":80},[74,7751,101],{"class":84},[74,7753,81],{"class":80},[74,7755,95],{"class":84},[74,7757,2044],{"class":80},[74,7759,2047],{"class":84},[74,7761,593],{"class":88},[74,7763,608],{"class":80},[74,7765,101],{"class":84},[74,7767,81],{"class":80},[74,7769,95],{"class":84},[74,7771,2044],{"class":80},[74,7773,2058],{"class":84},[74,7775,7776,7779,7781,7783,7785,7787,7789,7791],{"class":76,"line":3240},[74,7777,7778],{"class":84},"        front.y ",[74,7780,89],{"class":88},[74,7782,582],{"class":80},[74,7784,101],{"class":84},[74,7786,81],{"class":80},[74,7788,95],{"class":84},[74,7790,2044],{"class":80},[74,7792,2058],{"class":84},[74,7794,7795,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816,7818,7820,7822,7824],{"class":76,"line":3262},[74,7796,7797],{"class":84},"        front.z ",[74,7799,89],{"class":88},[74,7801,582],{"class":80},[74,7803,101],{"class":84},[74,7805,81],{"class":80},[74,7807,95],{"class":84},[74,7809,2044],{"class":80},[74,7811,2047],{"class":84},[74,7813,593],{"class":88},[74,7815,608],{"class":80},[74,7817,101],{"class":84},[74,7819,81],{"class":80},[74,7821,95],{"class":84},[74,7823,2044],{"class":80},[74,7825,2058],{"class":84},[74,7827,7828,7831,7833,7835,7837,7839],{"class":76,"line":3271},[74,7829,7830],{"class":84},"        cameraFront ",[74,7832,89],{"class":88},[74,7834,92],{"class":80},[74,7836,95],{"class":84},[74,7838,206],{"class":80},[74,7840,2114],{"class":84},[74,7842,7843],{"class":76,"line":3276},[74,7844,1430],{"class":84},[74,7846,7847],{"class":76,"line":3281},[74,7848,1184],{"emptyLinePlaceholder":1183},[74,7850,7851],{"class":76,"line":3314},[74,7852,6604],{"class":914},[74,7854,7855,7857,7859],{"class":76,"line":3346},[74,7856,6609],{"class":914},[74,7858,6379],{"class":88},[74,7860,7861],{"class":914}," 处理键盘输入\n",[74,7863,7864,7866,7868,7870],{"class":76,"line":3351},[74,7865,6609],{"class":914},[74,7867,6621],{"class":88},[74,7869,1234],{"class":879},[74,7871,6995],{"class":914},[74,7873,7874],{"class":76,"line":3369},[74,7875,6656],{"class":914},[74,7877,7878,7880,7883,7885,7887,7889,7891],{"class":76,"line":3385},[74,7879,7004],{"class":88},[74,7881,7882],{"class":80}," processKeyboardInput",[74,7884,101],{"class":84},[74,7886,873],{"class":80},[74,7888,593],{"class":88},[74,7890,1234],{"class":879},[74,7892,1252],{"class":84},[74,7894,7895],{"class":76,"line":3390},[74,7896,7897],{"class":914},"        \u002F\u002F 动态调整敏感度\n",[74,7899,7900,7902,7904,7906,7909,7911],{"class":76,"line":3395},[74,7901,2250],{"class":88},[74,7903,923],{"class":84},[74,7905,926],{"class":80},[74,7907,7908],{"class":84},"(window, GLFW_KEY_EQUAL) ",[74,7910,932],{"class":88},[74,7912,7913],{"class":84}," GLFW_PRESS) {\n",[74,7915,7916,7919,7921,7924,7926],{"class":76,"line":3400},[74,7917,7918],{"class":84},"            mouseSensitivity ",[74,7920,944],{"class":88},[74,7922,7923],{"class":104}," 0.01",[74,7925,108],{"class":88},[74,7927,570],{"class":84},[74,7929,7930,7933,7936,7938,7941,7943,7946,7948,7950,7952],{"class":76,"line":3406},[74,7931,7932],{"class":88},"            if",[74,7934,7935],{"class":84}," (mouseSensitivity ",[74,7937,1954],{"class":88},[74,7939,7940],{"class":104}," 0.5",[74,7942,108],{"class":88},[74,7944,7945],{"class":84},") mouseSensitivity ",[74,7947,89],{"class":88},[74,7949,7940],{"class":104},[74,7951,108],{"class":88},[74,7953,570],{"class":84},[74,7955,7956,7958,7960,7962,7965,7967,7970,7972,7974],{"class":76,"line":3414},[74,7957,2301],{"class":80},[74,7959,2304],{"class":84},[74,7961,1392],{"class":88},[74,7963,7964],{"class":1121}," \"鼠标敏感度: \"",[74,7966,1398],{"class":88},[74,7968,7969],{"class":84}," mouseSensitivity ",[74,7971,1392],{"class":88},[74,7973,1312],{"class":80},[74,7975,1414],{"class":84},[74,7977,7978],{"class":76,"line":3428},[74,7979,2388],{"class":84},[74,7981,7982,7984,7986,7988,7991,7993],{"class":76,"line":3440},[74,7983,2250],{"class":88},[74,7985,923],{"class":84},[74,7987,926],{"class":80},[74,7989,7990],{"class":84},"(window, GLFW_KEY_MINUS) ",[74,7992,932],{"class":88},[74,7994,7913],{"class":84},[74,7996,7997,7999,8001,8003,8005],{"class":76,"line":3448},[74,7998,7918],{"class":84},[74,8000,975],{"class":88},[74,8002,7923],{"class":104},[74,8004,108],{"class":88},[74,8006,570],{"class":84},[74,8008,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027],{"class":76,"line":3453},[74,8010,7932],{"class":88},[74,8012,7935],{"class":84},[74,8014,1985],{"class":88},[74,8016,7923],{"class":104},[74,8018,108],{"class":88},[74,8020,7945],{"class":84},[74,8022,89],{"class":88},[74,8024,7923],{"class":104},[74,8026,108],{"class":88},[74,8028,570],{"class":84},[74,8030,8031,8033,8035,8037,8039,8041,8043,8045,8047],{"class":76,"line":3459},[74,8032,2301],{"class":80},[74,8034,2304],{"class":84},[74,8036,1392],{"class":88},[74,8038,7964],{"class":1121},[74,8040,1398],{"class":88},[74,8042,7969],{"class":84},[74,8044,1392],{"class":88},[74,8046,1312],{"class":80},[74,8048,1414],{"class":84},[74,8050,8051],{"class":76,"line":3499},[74,8052,2388],{"class":84},[74,8054,8055],{"class":76,"line":3514},[74,8056,1184],{"emptyLinePlaceholder":1183},[74,8058,8059],{"class":76,"line":3532},[74,8060,8061],{"class":914},"        \u002F\u002F Ctrl+Alt 切换鼠标捕获\n",[74,8063,8064,8067,8069,8071,8073,8075,8077,8079,8081],{"class":76,"line":3540},[74,8065,8066],{"class":88},"        bool",[74,8068,2157],{"class":84},[74,8070,89],{"class":88},[74,8072,2162],{"class":80},[74,8074,2165],{"class":84},[74,8076,932],{"class":88},[74,8078,2170],{"class":84},[74,8080,2173],{"class":88},[74,8082,2176],{"class":84},[74,8084,8085,8088,8090,8092],{"class":76,"line":3552},[74,8086,8087],{"class":80},"                          glfwGetKey",[74,8089,2185],{"class":84},[74,8091,932],{"class":88},[74,8093,2190],{"class":84},[74,8095,8096,8098,8100,8102,8104,8106,8108,8110,8112],{"class":76,"line":3557},[74,8097,8066],{"class":88},[74,8099,2198],{"class":84},[74,8101,89],{"class":88},[74,8103,2162],{"class":80},[74,8105,2205],{"class":84},[74,8107,932],{"class":88},[74,8109,2170],{"class":84},[74,8111,2173],{"class":88},[74,8113,2176],{"class":84},[74,8115,8116,8118,8120,8122],{"class":76,"line":3562},[74,8117,8087],{"class":80},[74,8119,2221],{"class":84},[74,8121,932],{"class":88},[74,8123,2190],{"class":84},[74,8125,8126],{"class":76,"line":3571},[74,8127,5746],{"class":84},[74,8129,8130,8132,8134,8136],{"class":76,"line":3580},[74,8131,2250],{"class":88},[74,8133,2238],{"class":84},[74,8135,2241],{"class":88},[74,8137,2244],{"class":84},[74,8139,8140,8143],{"class":76,"line":3589},[74,8141,8142],{"class":80},"            toggleMouseCapture",[74,8144,3568],{"class":84},[74,8146,8147],{"class":76,"line":3594},[74,8148,2388],{"class":84},[74,8150,8151],{"class":76,"line":3600},[74,8152,1184],{"emptyLinePlaceholder":1183},[74,8154,8155],{"class":76,"line":3608},[74,8156,8157],{"class":914},"        \u002F\u002F WASD 移动（仅在捕获模式下）\n",[74,8159,8160,8162],{"class":76,"line":3613},[74,8161,2250],{"class":88},[74,8163,2253],{"class":84},[74,8165,8166,8168,8170,8172,8174,8176],{"class":76,"line":3619},[74,8167,6038],{"class":88},[74,8169,901],{"class":84},[74,8171,89],{"class":88},[74,8173,906],{"class":104},[74,8175,108],{"class":88},[74,8177,570],{"class":84},[74,8179,8180,8182,8184,8186,8188,8190],{"class":76,"line":3634},[74,8181,7932],{"class":88},[74,8183,923],{"class":84},[74,8185,926],{"class":80},[74,8187,929],{"class":84},[74,8189,932],{"class":88},[74,8191,935],{"class":84},[74,8193,8194,8197,8199,8201,8203],{"class":76,"line":3652},[74,8195,8196],{"class":84},"                cameraPos ",[74,8198,944],{"class":88},[74,8200,901],{"class":84},[74,8202,593],{"class":88},[74,8204,951],{"class":84},[74,8206,8207,8209,8211,8213,8215,8217],{"class":76,"line":3663},[74,8208,7932],{"class":88},[74,8210,923],{"class":84},[74,8212,926],{"class":80},[74,8214,963],{"class":84},[74,8216,932],{"class":88},[74,8218,935],{"class":84},[74,8220,8221,8223,8225,8227,8229],{"class":76,"line":3668},[74,8222,8196],{"class":84},[74,8224,975],{"class":88},[74,8226,901],{"class":84},[74,8228,593],{"class":88},[74,8230,951],{"class":84},[74,8232,8233,8235,8237,8239,8241,8243],{"class":76,"line":3673},[74,8234,7932],{"class":88},[74,8236,923],{"class":84},[74,8238,926],{"class":80},[74,8240,993],{"class":84},[74,8242,932],{"class":88},[74,8244,935],{"class":84},[74,8246,8247,8249,8251,8253,8255,8257,8259,8261,8263,8265,8267,8269],{"class":76,"line":3679},[74,8248,8196],{"class":84},[74,8250,975],{"class":88},[74,8252,92],{"class":80},[74,8254,95],{"class":84},[74,8256,206],{"class":80},[74,8258,101],{"class":84},[74,8260,81],{"class":80},[74,8262,95],{"class":84},[74,8264,307],{"class":80},[74,8266,1021],{"class":84},[74,8268,593],{"class":88},[74,8270,1026],{"class":84},[74,8272,8273,8275,8277,8279,8281,8283],{"class":76,"line":3688},[74,8274,7932],{"class":88},[74,8276,923],{"class":84},[74,8278,926],{"class":80},[74,8280,1038],{"class":84},[74,8282,932],{"class":88},[74,8284,935],{"class":84},[74,8286,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305,8307,8309],{"class":76,"line":3693},[74,8288,8196],{"class":84},[74,8290,944],{"class":88},[74,8292,92],{"class":80},[74,8294,95],{"class":84},[74,8296,206],{"class":80},[74,8298,101],{"class":84},[74,8300,81],{"class":80},[74,8302,95],{"class":84},[74,8304,307],{"class":80},[74,8306,1021],{"class":84},[74,8308,593],{"class":88},[74,8310,1026],{"class":84},[74,8312,8313],{"class":76,"line":3705},[74,8314,2388],{"class":84},[74,8316,8317],{"class":76,"line":3711},[74,8318,1430],{"class":84},[74,8320,8321],{"class":76,"line":3753},[74,8322,1184],{"emptyLinePlaceholder":1183},[74,8324,8325],{"class":76,"line":3791},[74,8326,6604],{"class":914},[74,8328,8329,8331,8333],{"class":76,"line":3826},[74,8330,6609],{"class":914},[74,8332,6379],{"class":88},[74,8334,8335],{"class":914}," 切换鼠标捕获状态\n",[74,8337,8338,8340,8342,8344],{"class":76,"line":3861},[74,8339,6609],{"class":914},[74,8341,6621],{"class":88},[74,8343,1234],{"class":879},[74,8345,6995],{"class":914},[74,8347,8348],{"class":76,"line":3898},[74,8349,6656],{"class":914},[74,8351,8352,8354,8357,8359,8361,8363,8365],{"class":76,"line":3937},[74,8353,7004],{"class":88},[74,8355,8356],{"class":80}," toggleMouseCapture",[74,8358,101],{"class":84},[74,8360,873],{"class":80},[74,8362,593],{"class":88},[74,8364,1234],{"class":879},[74,8366,1252],{"class":84},[74,8368,8369,8371],{"class":76,"line":3942},[74,8370,2250],{"class":88},[74,8372,2253],{"class":84},[74,8374,8375,8377],{"class":76,"line":3979},[74,8376,2265],{"class":80},[74,8378,2268],{"class":84},[74,8380,8381,8383,8385,8387],{"class":76,"line":4014},[74,8382,2274],{"class":84},[74,8384,89],{"class":88},[74,8386,1791],{"class":104},[74,8388,570],{"class":84},[74,8390,8391,8393,8395,8397],{"class":76,"line":4047},[74,8392,2286],{"class":84},[74,8394,89],{"class":88},[74,8396,1654],{"class":104},[74,8398,570],{"class":84},[74,8400,8401,8403,8405,8407,8409,8411,8413],{"class":76,"line":4080},[74,8402,2301],{"class":80},[74,8404,2304],{"class":84},[74,8406,1392],{"class":88},[74,8408,2309],{"class":1121},[74,8410,1398],{"class":88},[74,8412,1312],{"class":80},[74,8414,1414],{"class":84},[74,8416,8417,8419,8421],{"class":76,"line":4115},[74,8418,2321],{"class":84},[74,8420,2324],{"class":88},[74,8422,1328],{"class":84},[74,8424,8425,8427],{"class":76,"line":4152},[74,8426,2265],{"class":80},[74,8428,2340],{"class":84},[74,8430,8431,8433,8435,8437],{"class":76,"line":4157},[74,8432,2274],{"class":84},[74,8434,89],{"class":88},[74,8436,1654],{"class":104},[74,8438,570],{"class":84},[74,8440,8441,8443,8445,8447],{"class":76,"line":4192},[74,8442,2286],{"class":84},[74,8444,89],{"class":88},[74,8446,1654],{"class":104},[74,8448,570],{"class":84},[74,8450,8451,8453,8455,8457,8459,8461,8463],{"class":76,"line":4229},[74,8452,2301],{"class":80},[74,8454,2304],{"class":84},[74,8456,1392],{"class":88},[74,8458,2376],{"class":1121},[74,8460,1398],{"class":88},[74,8462,1312],{"class":80},[74,8464,1414],{"class":84},[74,8466,8467],{"class":76,"line":4268},[74,8468,2388],{"class":84},[74,8470,8471],{"class":76,"line":4307},[74,8472,1430],{"class":84},[74,8474,8475],{"class":76,"line":4344},[74,8476,1184],{"emptyLinePlaceholder":1183},[74,8478,8479],{"class":76,"line":4379},[74,8480,6604],{"class":914},[74,8482,8483,8485,8487],{"class":76,"line":4384},[74,8484,6609],{"class":914},[74,8486,6379],{"class":88},[74,8488,8489],{"class":914}," 获取 View 矩阵\n",[74,8491,8492,8494,8497],{"class":76,"line":4417},[74,8493,6609],{"class":914},[74,8495,8496],{"class":88},"@return",[74,8498,8499],{"class":914}," glm::mat4 View 矩阵\n",[74,8501,8502],{"class":76,"line":4452},[74,8503,6656],{"class":914},[74,8505,8506,8508,8510,8512,8515,8517,8519],{"class":76,"line":4489},[74,8507,6532],{"class":80},[74,8509,95],{"class":84},[74,8511,5995],{"class":80},[74,8513,8514],{"class":80}," getViewMatrix",[74,8516,1407],{"class":84},[74,8518,1369],{"class":88},[74,8520,1328],{"class":84},[74,8522,8523,8525,8527,8529,8531,8533,8535],{"class":76,"line":4526},[74,8524,1340],{"class":88},[74,8526,92],{"class":80},[74,8528,95],{"class":84},[74,8530,443],{"class":80},[74,8532,839],{"class":84},[74,8534,842],{"class":88},[74,8536,845],{"class":84},[74,8538,8539],{"class":76,"line":4561},[74,8540,1430],{"class":84},[74,8542,8543],{"class":76,"line":4594},[74,8544,1184],{"emptyLinePlaceholder":1183},[74,8546,8547],{"class":76,"line":4599},[74,8548,6604],{"class":914},[74,8550,8551,8553,8555],{"class":76,"line":4638},[74,8552,6609],{"class":914},[74,8554,6379],{"class":88},[74,8556,8557],{"class":914}," 获取相机位置\n",[74,8559,8560,8562,8564],{"class":76,"line":4675},[74,8561,6609],{"class":914},[74,8563,8496],{"class":88},[74,8565,8566],{"class":914}," glm::vec3 相机位置\n",[74,8568,8569],{"class":76,"line":4710},[74,8570,6656],{"class":914},[74,8572,8573,8575,8577,8579,8582,8584,8586],{"class":76,"line":4745},[74,8574,6532],{"class":80},[74,8576,95],{"class":84},[74,8578,98],{"class":80},[74,8580,8581],{"class":80}," getCameraPosition",[74,8583,1407],{"class":84},[74,8585,1369],{"class":88},[74,8587,1328],{"class":84},[74,8589,8590,8592],{"class":76,"line":4782},[74,8591,1340],{"class":88},[74,8593,6539],{"class":84},[74,8595,8596],{"class":76,"line":4821},[74,8597,1430],{"class":84},[74,8599,8600],{"class":76,"line":4826},[74,8601,1184],{"emptyLinePlaceholder":1183},[74,8603,8604],{"class":76,"line":4863},[74,8605,6604],{"class":914},[74,8607,8608,8610,8612],{"class":76,"line":4898},[74,8609,6609],{"class":914},[74,8611,6379],{"class":88},[74,8613,8614],{"class":914}," 获取相机朝向\n",[74,8616,8617,8619,8621],{"class":76,"line":4931},[74,8618,6609],{"class":914},[74,8620,8496],{"class":88},[74,8622,8623],{"class":914}," glm::vec3 相机朝向\n",[74,8625,8626],{"class":76,"line":4964},[74,8627,6656],{"class":914},[74,8629,8630,8632,8634,8636,8639,8641,8643],{"class":76,"line":4999},[74,8631,6532],{"class":80},[74,8633,95],{"class":84},[74,8635,98],{"class":80},[74,8637,8638],{"class":80}," getCameraFront",[74,8640,1407],{"class":84},[74,8642,1369],{"class":88},[74,8644,1328],{"class":84},[74,8646,8647,8649],{"class":76,"line":5035},[74,8648,1340],{"class":88},[74,8650,951],{"class":84},[74,8652,8653],{"class":76,"line":5041},[74,8654,1430],{"class":84},[74,8656,8657],{"class":76,"line":5046},[74,8658,1184],{"emptyLinePlaceholder":1183},[74,8660,8661],{"class":76,"line":5052},[74,8662,6604],{"class":914},[74,8664,8665,8667,8669],{"class":76,"line":5057},[74,8666,6609],{"class":914},[74,8668,6379],{"class":88},[74,8670,8671],{"class":914}," 设置相机位置\n",[74,8673,8674,8676,8678,8681],{"class":76,"line":5063},[74,8675,6609],{"class":914},[74,8677,6621],{"class":88},[74,8679,8680],{"class":879}," pos",[74,8682,8683],{"class":914}," 新的相机位置\n",[74,8685,8686],{"class":76,"line":5075},[74,8687,6656],{"class":914},[74,8689,8690,8692,8695,8697,8699,8701,8703,8705,8707,8709],{"class":76,"line":5085},[74,8691,7004],{"class":88},[74,8693,8694],{"class":80}," setCameraPosition",[74,8696,101],{"class":84},[74,8698,1369],{"class":88},[74,8700,92],{"class":80},[74,8702,95],{"class":84},[74,8704,98],{"class":80},[74,8706,1377],{"class":88},[74,8708,8680],{"class":879},[74,8710,1252],{"class":84},[74,8712,8713,8715,8717],{"class":76,"line":5105},[74,8714,941],{"class":84},[74,8716,89],{"class":88},[74,8718,8719],{"class":84}," pos;\n",[74,8721,8722],{"class":76,"line":5123},[74,8723,1430],{"class":84},[74,8725,8726],{"class":76,"line":5128},[74,8727,1184],{"emptyLinePlaceholder":1183},[74,8729,8730],{"class":76,"line":5134},[74,8731,6604],{"class":914},[74,8733,8734,8736,8738],{"class":76,"line":5143},[74,8735,6609],{"class":914},[74,8737,6379],{"class":88},[74,8739,8740],{"class":914}," 设置鼠标敏感度\n",[74,8742,8743,8745,8747,8749],{"class":76,"line":5155},[74,8744,6609],{"class":914},[74,8746,6621],{"class":88},[74,8748,6624],{"class":879},[74,8750,8751],{"class":914}," 新的敏感度值\n",[74,8753,8754],{"class":76,"line":5167},[74,8755,6656],{"class":914},[74,8757,8758,8760,8763,8765,8767,8769],{"class":76,"line":5177},[74,8759,7004],{"class":88},[74,8761,8762],{"class":80}," setSensitivity",[74,8764,101],{"class":84},[74,8766,557],{"class":88},[74,8768,6624],{"class":879},[74,8770,1252],{"class":84},[74,8772,8773,8776,8778,8780,8782,8785,8787,8790,8792,8794,8796,8798,8801,8803,8805,8807],{"class":76,"line":5188},[74,8774,8775],{"class":84},"        mouseSensitivity ",[74,8777,89],{"class":88},[74,8779,1312],{"class":80},[74,8781,95],{"class":84},[74,8783,8784],{"class":80},"max",[74,8786,101],{"class":84},[74,8788,8789],{"class":104},"0.01",[74,8791,108],{"class":88},[74,8793,111],{"class":84},[74,8795,1286],{"class":80},[74,8797,95],{"class":84},[74,8799,8800],{"class":80},"min",[74,8802,101],{"class":84},[74,8804,3717],{"class":104},[74,8806,108],{"class":88},[74,8808,8809],{"class":84},", sensitivity));\n",[74,8811,8812],{"class":76,"line":5198},[74,8813,1430],{"class":84},[74,8815,8816],{"class":76,"line":5220},[74,8817,1184],{"emptyLinePlaceholder":1183},[74,8819,8820],{"class":76,"line":5232},[74,8821,6604],{"class":914},[74,8823,8824,8826,8828],{"class":76,"line":5237},[74,8825,6609],{"class":914},[74,8827,6379],{"class":88},[74,8829,8830],{"class":914}," 获取当前敏感度\n",[74,8832,8833,8835,8837],{"class":76,"line":5243},[74,8834,6609],{"class":914},[74,8836,8496],{"class":88},[74,8838,8839],{"class":914}," float 当前敏感度\n",[74,8841,8842],{"class":76,"line":5251},[74,8843,6656],{"class":914},[74,8845,8846,8848,8851,8853,8855],{"class":76,"line":5261},[74,8847,898],{"class":88},[74,8849,8850],{"class":80}," getSensitivity",[74,8852,1407],{"class":84},[74,8854,1369],{"class":88},[74,8856,1328],{"class":84},[74,8858,8859,8861],{"class":76,"line":5270},[74,8860,1340],{"class":88},[74,8862,6488],{"class":84},[74,8864,8865],{"class":76,"line":5280},[74,8866,1430],{"class":84},[74,8868,8869],{"class":76,"line":5289},[74,8870,1184],{"emptyLinePlaceholder":1183},[74,8872,8873],{"class":76,"line":5298},[74,8874,6604],{"class":914},[74,8876,8877,8879,8881],{"class":76,"line":5317},[74,8878,6609],{"class":914},[74,8880,6379],{"class":88},[74,8882,8883],{"class":914}," 获取统计信息\n",[74,8885,8886,8888,8890],{"class":76,"line":5326},[74,8887,6609],{"class":914},[74,8889,8496],{"class":88},[74,8891,8892],{"class":914}," std::string 统计信息字符串\n",[74,8894,8895],{"class":76,"line":5331},[74,8896,6656],{"class":914},[74,8898,8899,8901,8903,8905,8908,8910,8912],{"class":76,"line":5336},[74,8900,3145],{"class":80},[74,8902,95],{"class":84},[74,8904,1291],{"class":80},[74,8906,8907],{"class":80}," getStats",[74,8909,1407],{"class":84},[74,8911,1369],{"class":88},[74,8913,1328],{"class":84},[74,8915,8916,8918,8920,8922,8925,8927,8930,8933,8936],{"class":76,"line":5342},[74,8917,1386],{"class":80},[74,8919,95],{"class":84},[74,8921,1291],{"class":80},[74,8923,8924],{"class":84}," stats ",[74,8926,89],{"class":88},[74,8928,8929],{"class":1121}," \"DPI 稳定器统计:",[74,8931,8932],{"class":104},"\\n",[74,8934,8935],{"class":1121},"\"",[74,8937,570],{"class":84},[74,8939,8940,8943,8945,8948,8951,8953,8955,8958,8961,8963,8966,8968,8970],{"class":76,"line":5352},[74,8941,8942],{"class":84},"        stats ",[74,8944,944],{"class":88},[74,8946,8947],{"class":1121}," \"总移动次数: \"",[74,8949,8950],{"class":88}," +",[74,8952,1312],{"class":80},[74,8954,95],{"class":84},[74,8956,8957],{"class":80},"to_string",[74,8959,8960],{"class":84},"(totalMoves) ",[74,8962,842],{"class":88},[74,8964,8965],{"class":1121}," \"",[74,8967,8932],{"class":104},[74,8969,8935],{"class":1121},[74,8971,570],{"class":84},[74,8973,8974,8976,8978,8981,8983,8985,8987,8989,8992,8994,8996,8998,9000],{"class":76,"line":5369},[74,8975,8942],{"class":84},[74,8977,944],{"class":88},[74,8979,8980],{"class":1121}," \"过滤次数: \"",[74,8982,8950],{"class":88},[74,8984,1312],{"class":80},[74,8986,95],{"class":84},[74,8988,8957],{"class":80},[74,8990,8991],{"class":84},"(filteredMoves) ",[74,8993,842],{"class":88},[74,8995,8965],{"class":1121},[74,8997,8932],{"class":104},[74,8999,8935],{"class":1121},[74,9001,570],{"class":84},[74,9003,9004],{"class":76,"line":5381},[74,9005,5746],{"class":84},[74,9007,9008,9010,9013,9015,9017,9019,9021,9023,9026,9028,9030,9033,9035,9038,9040,9043,9045,9048,9050,9052],{"class":76,"line":5386},[74,9009,7351],{"class":88},[74,9011,9012],{"class":84}," filterRate ",[74,9014,89],{"class":88},[74,9016,7459],{"class":84},[74,9018,1954],{"class":88},[74,9020,5968],{"class":104},[74,9022,7466],{"class":84},[74,9024,9025],{"class":88},"?",[74,9027,923],{"class":84},[74,9029,557],{"class":88},[74,9031,9032],{"class":84},")filteredMoves ",[74,9034,7474],{"class":88},[74,9036,9037],{"class":84}," totalMoves ",[74,9039,593],{"class":88},[74,9041,9042],{"class":104}," 100.0",[74,9044,108],{"class":88},[74,9046,9047],{"class":88}," :",[74,9049,1593],{"class":104},[74,9051,108],{"class":88},[74,9053,570],{"class":84},[74,9055,9056,9058,9060,9063,9065,9067,9069,9071,9074,9076,9079,9081,9083],{"class":76,"line":5392},[74,9057,8942],{"class":84},[74,9059,944],{"class":88},[74,9061,9062],{"class":1121}," \"过滤率: \"",[74,9064,8950],{"class":88},[74,9066,1312],{"class":80},[74,9068,95],{"class":84},[74,9070,8957],{"class":80},[74,9072,9073],{"class":84},"(filterRate) ",[74,9075,842],{"class":88},[74,9077,9078],{"class":1121}," \"%",[74,9080,8932],{"class":104},[74,9082,8935],{"class":1121},[74,9084,570],{"class":84},[74,9086,9087,9089,9091,9094,9096,9098,9100,9102,9105,9107,9110,9112,9114],{"class":76,"line":5402},[74,9088,8942],{"class":84},[74,9090,944],{"class":88},[74,9092,9093],{"class":1121}," \"平均偏移: \"",[74,9095,8950],{"class":88},[74,9097,1312],{"class":80},[74,9099,95],{"class":84},[74,9101,8957],{"class":80},[74,9103,9104],{"class":84},"(averageOffset) ",[74,9106,842],{"class":88},[74,9108,9109],{"class":1121}," \" 像素",[74,9111,8932],{"class":104},[74,9113,8935],{"class":1121},[74,9115,570],{"class":84},[74,9117,9118,9120,9122,9125,9127,9129,9131,9133,9136,9138,9140,9142,9144],{"class":76,"line":5419},[74,9119,8942],{"class":84},[74,9121,944],{"class":88},[74,9123,9124],{"class":1121}," \"当前敏感度: \"",[74,9126,8950],{"class":88},[74,9128,1312],{"class":80},[74,9130,95],{"class":84},[74,9132,8957],{"class":80},[74,9134,9135],{"class":84},"(mouseSensitivity) ",[74,9137,842],{"class":88},[74,9139,8965],{"class":1121},[74,9141,8932],{"class":104},[74,9143,8935],{"class":1121},[74,9145,570],{"class":84},[74,9147,9148,9150],{"class":76,"line":5431},[74,9149,1340],{"class":88},[74,9151,9152],{"class":84}," stats;\n",[74,9154,9155],{"class":76,"line":5446},[74,9156,1430],{"class":84},[74,9158,9159],{"class":76,"line":5451},[74,9160,1184],{"emptyLinePlaceholder":1183},[74,9162,9163],{"class":76,"line":5460},[74,9164,6604],{"class":914},[74,9166,9167,9169,9171],{"class":76,"line":5474},[74,9168,6609],{"class":914},[74,9170,6379],{"class":88},[74,9172,9173],{"class":914}," 重置统计信息\n",[74,9175,9176],{"class":76,"line":5497},[74,9177,6656],{"class":914},[74,9179,9180,9182,9185],{"class":76,"line":5502},[74,9181,7004],{"class":88},[74,9183,9184],{"class":80}," resetStats",[74,9186,1297],{"class":84},[74,9188,9189,9192,9194,9196],{"class":76,"line":5508},[74,9190,9191],{"class":84},"        totalMoves ",[74,9193,89],{"class":88},[74,9195,5968],{"class":104},[74,9197,570],{"class":84},[74,9199,9200,9203,9205,9207],{"class":76,"line":5548},[74,9201,9202],{"class":84},"        filteredMoves ",[74,9204,89],{"class":88},[74,9206,5968],{"class":104},[74,9208,570],{"class":84},[74,9210,9211,9213,9215,9217,9219],{"class":76,"line":5563},[74,9212,7449],{"class":84},[74,9214,89],{"class":88},[74,9216,1593],{"class":104},[74,9218,108],{"class":88},[74,9220,570],{"class":84},[74,9222,9223],{"class":76,"line":5568},[74,9224,1430],{"class":84},[74,9226,9227],{"class":76,"line":5574},[74,9228,1184],{"emptyLinePlaceholder":1183},[74,9230,9231],{"class":76,"line":5620},[74,9232,6604],{"class":914},[74,9234,9235,9237,9239],{"class":76,"line":5631},[74,9236,6609],{"class":914},[74,9238,6379],{"class":88},[74,9240,9241],{"class":914}," 设置最大偏移量\n",[74,9243,9244,9246,9248,9250],{"class":76,"line":5636},[74,9245,6609],{"class":914},[74,9247,6621],{"class":88},[74,9249,6636],{"class":879},[74,9251,9252],{"class":914}," 新的最大偏移量\n",[74,9254,9255],{"class":76,"line":5642},[74,9256,6656],{"class":914},[74,9258,9259,9261,9264,9266,9268,9270],{"class":76,"line":5663},[74,9260,7004],{"class":88},[74,9262,9263],{"class":80}," setMaxOffset",[74,9265,101],{"class":84},[74,9267,557],{"class":88},[74,9269,6636],{"class":879},[74,9271,1252],{"class":84},[74,9273,9274,9277,9280,9282],{"class":76,"line":5668},[74,9275,9276],{"class":104},"        this",[74,9278,9279],{"class":84},"->maxOffset ",[74,9281,89],{"class":88},[74,9283,9284],{"class":84}," maxOffset;\n",[74,9286,9287],{"class":76,"line":5674},[74,9288,1430],{"class":84},[74,9290,9291],{"class":76,"line":5690},[74,9292,1184],{"emptyLinePlaceholder":1183},[74,9294,9295],{"class":76,"line":5696},[74,9296,6604],{"class":914},[74,9298,9299,9301,9303],{"class":76,"line":5704},[74,9300,6609],{"class":914},[74,9302,6379],{"class":88},[74,9304,9305],{"class":914}," 获取是否被捕获\n",[74,9307,9308,9310,9312],{"class":76,"line":5712},[74,9309,6609],{"class":914},[74,9311,8496],{"class":88},[74,9313,9314],{"class":914}," bool 是否被捕获\n",[74,9316,9317],{"class":76,"line":5717},[74,9318,6656],{"class":914},[74,9320,9321,9323,9326,9328,9330],{"class":76,"line":5723},[74,9322,2154],{"class":88},[74,9324,9325],{"class":80}," isMouseCaptured",[74,9327,1407],{"class":84},[74,9329,1369],{"class":88},[74,9331,1328],{"class":84},[74,9333,9334,9336],{"class":76,"line":5743},[74,9335,1340],{"class":88},[74,9337,6472],{"class":84},[74,9339,9340],{"class":76,"line":5749},[74,9341,1430],{"class":84},[74,9343,9344],{"class":76,"line":5755},[74,9345,5038],{"class":84},[696,9347,9349],{"id":9348},"dpi-稳定器使用说明","DPI 稳定器使用说明",[25,9351,9353],{"id":9352},"功能特性","🎯 功能特性",[56,9355,9357],{"id":9356},"已集成的功能","✅ 已集成的功能：",[9359,9360,9361,9368,9374,9380,9386],"ul",{},[9362,9363,9364,9367],"li",{},[33,9365,9366],{},"异常偏移检测","：自动过滤 DPI 漂移",[9362,9369,9370,9373],{},[33,9371,9372],{},"动态敏感度调整","：实时调节鼠标响应",[9362,9375,9376,9379],{},[33,9377,9378],{},"平滑处理","：减少鼠标抖动",[9362,9381,9382,9385],{},[33,9383,9384],{},"统计信息","：监控过滤效果",[9362,9387,9388,9391],{},[33,9389,9390],{},"鼠标捕获切换","：Ctrl+Alt 释放\u002F捕获鼠标",[25,9393,9395],{"id":9394},"控制方式","🎮 控制方式",[9397,9398,9399,9412],"table",{},[9400,9401,9402],"thead",{},[9403,9404,9405,9409],"tr",{},[9406,9407,9408],"th",{},"按键",[9406,9410,9411],{},"功能",[9413,9414,9415,9425,9435,9445,9454,9463],"tbody",{},[9403,9416,9417,9422],{},[9418,9419,9420],"td",{},[17,9421,1081],{},[9418,9423,9424],{},"相机移动（仅在捕获模式下）",[9403,9426,9427,9432],{},[9418,9428,9429],{},[17,9430,9431],{},"鼠标移动",[9418,9433,9434],{},"控制相机视角",[9403,9436,9437,9442],{},[9418,9438,9439],{},[17,9440,9441],{},"Ctrl+Alt",[9418,9443,9444],{},"切换鼠标捕获状态",[9403,9446,9447,9451],{},[9418,9448,9449],{},[17,9450,842],{},[9418,9452,9453],{},"增加鼠标敏感度",[9403,9455,9456,9460],{},[9418,9457,9458],{},[17,9459,212],{},[9418,9461,9462],{},"减少鼠标敏感度",[9403,9464,9465,9470],{},[9418,9466,9467],{},[17,9468,9469],{},"T",[9418,9471,9472],{},"显示统计信息",[25,9474,9476],{"id":9475},"技术实现","🔧 技术实现",[56,9478,9480,9481],{"id":9479},"_1-dpi-漂移检测","1. ",[33,9482,9483],{},"DPI 漂移检测",[10,9485,9489],{"className":9486,"code":9487,"language":9488,"meta":19,"style":19},"language-cpp shiki shiki-themes github-light github-dark","\u002F\u002F 检测异常大的偏移量\nif (currentOffset > maxOffset) {\n    \u002F\u002F 过滤异常输入\n    return;\n}\n","cpp",[17,9490,9491,9496,9507,9512,9518],{"__ignoreMap":19},[74,9492,9493],{"class":76,"line":77},[74,9494,9495],{"class":914},"\u002F\u002F 检测异常大的偏移量\n",[74,9497,9498,9501,9503,9505],{"class":76,"line":192},[74,9499,9500],{"class":88},"if",[74,9502,7492],{"class":84},[74,9504,1954],{"class":88},[74,9506,7497],{"class":84},[74,9508,9509],{"class":76,"line":475},[74,9510,9511],{"class":914},"    \u002F\u002F 过滤异常输入\n",[74,9513,9514,9516],{"class":76,"line":505},[74,9515,6262],{"class":88},[74,9517,570],{"class":84},[74,9519,9520],{"class":76,"line":627},[74,9521,1075],{"class":84},[56,9523,9525,9526],{"id":9524},"_2-平滑处理","2. ",[33,9527,9378],{},[10,9529,9531],{"className":9486,"code":9530,"language":9488,"meta":19,"style":19},"\u002F\u002F 应用平滑因子\nxoffset *= smoothingFactor;\nyoffset *= smoothingFactor;\n",[17,9532,9533,9538,9547],{"__ignoreMap":19},[74,9534,9535],{"class":76,"line":77},[74,9536,9537],{"class":914},"\u002F\u002F 应用平滑因子\n",[74,9539,9540,9543,9545],{"class":76,"line":192},[74,9541,9542],{"class":84},"xoffset ",[74,9544,1892],{"class":88},[74,9546,7587],{"class":84},[74,9548,9549,9552,9554],{"class":76,"line":475},[74,9550,9551],{"class":84},"yoffset ",[74,9553,1892],{"class":88},[74,9555,7587],{"class":84},[56,9557,9559,9560],{"id":9558},"_3-统计监控","3. ",[33,9561,9562],{},"统计监控",[9359,9564,9565,9568,9571,9574],{},[9362,9566,9567],{},"总移动次数",[9362,9569,9570],{},"过滤次数和过滤率",[9362,9572,9573],{},"平均偏移量",[9362,9575,9576],{},"当前敏感度",[25,9578,9580],{"id":9579},"参数说明","📊 参数说明",[56,9582,9584],{"id":9583},"构造函数参数","构造函数参数：",[10,9586,9588],{"className":9486,"code":9587,"language":9488,"meta":19,"style":19},"DPIStabilizer(敏感度, 最大偏移量, 平滑因子)\nDPIStabilizer(0.1f, 50.0f, 0.8f)\n",[17,9589,9590,9597],{"__ignoreMap":19},[74,9591,9592,9594],{"class":76,"line":77},[74,9593,7168],{"class":80},[74,9595,9596],{"class":84},"(敏感度, 最大偏移量, 平滑因子)\n",[74,9598,9599,9601,9603,9605,9607,9609,9612,9614,9616,9619,9621],{"class":76,"line":192},[74,9600,7168],{"class":80},[74,9602,101],{"class":84},[74,9604,2779],{"class":104},[74,9606,108],{"class":88},[74,9608,111],{"class":84},[74,9610,9611],{"class":104},"50.0",[74,9613,108],{"class":88},[74,9615,111],{"class":84},[74,9617,9618],{"class":104},"0.8",[74,9620,108],{"class":88},[74,9622,883],{"class":84},[9359,9624,9625,9631,9637],{},[9362,9626,9627,9630],{},[33,9628,9629],{},"敏感度","：0.01f - 0.5f（默认 0.1f）",[9362,9632,9633,9636],{},[33,9634,9635],{},"最大偏移量","：像素阈值（默认 50.0f）",[9362,9638,9639,9642],{},[33,9640,9641],{},"平滑因子","：0.0f - 1.0f（默认 0.8f）",[25,9644,9646],{"id":9645},"使用方法","🚀 使用方法",[56,9648,9480,9650],{"id":9649},"_1-基本使用",[33,9651,9652],{},"基本使用",[10,9654,9656],{"className":9486,"code":9655,"language":9488,"meta":19,"style":19},"\u002F\u002F 创建实例\nDPIStabilizer dpiStabilizer(0.1f, 50.0f, 0.8f);\n\n\u002F\u002F 在窗口创建前设置 DPI 提示\nDPIStabilizer::setDPIHint();\n\n\u002F\u002F 在窗口创建后初始化\ndpiStabilizer.initialize(window);\n\n\u002F\u002F 在渲染循环中处理输入\ndpiStabilizer.processKeyboardInput(window);\n\n\u002F\u002F 获取 view 矩阵\nmat4 view = dpiStabilizer.getViewMatrix();\n",[17,9657,9658,9663,9690,9694,9699,9710,9714,9719,9729,9733,9738,9747,9751,9756],{"__ignoreMap":19},[74,9659,9660],{"class":76,"line":77},[74,9661,9662],{"class":914},"\u002F\u002F 创建实例\n",[74,9664,9665,9667,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688],{"class":76,"line":192},[74,9666,7168],{"class":80},[74,9668,9669],{"class":80}," dpiStabilizer",[74,9671,101],{"class":84},[74,9673,2779],{"class":104},[74,9675,108],{"class":88},[74,9677,111],{"class":84},[74,9679,9611],{"class":104},[74,9681,108],{"class":88},[74,9683,111],{"class":84},[74,9685,9618],{"class":104},[74,9687,108],{"class":88},[74,9689,125],{"class":84},[74,9691,9692],{"class":76,"line":475},[74,9693,1184],{"emptyLinePlaceholder":1183},[74,9695,9696],{"class":76,"line":505},[74,9697,9698],{"class":914},"\u002F\u002F 在窗口创建前设置 DPI 提示\n",[74,9700,9701,9703,9705,9708],{"class":76,"line":627},[74,9702,7168],{"class":80},[74,9704,95],{"class":84},[74,9706,9707],{"class":80},"setDPIHint",[74,9709,1355],{"class":84},[74,9711,9712],{"class":76,"line":938},[74,9713,1184],{"emptyLinePlaceholder":1183},[74,9715,9716],{"class":76,"line":954},[74,9717,9718],{"class":914},"\u002F\u002F 在窗口创建后初始化\n",[74,9720,9721,9724,9727],{"class":76,"line":970},[74,9722,9723],{"class":84},"dpiStabilizer.",[74,9725,9726],{"class":80},"initialize",[74,9728,3568],{"class":84},[74,9730,9731],{"class":76,"line":984},[74,9732,1184],{"emptyLinePlaceholder":1183},[74,9734,9735],{"class":76,"line":1000},[74,9736,9737],{"class":914},"\u002F\u002F 在渲染循环中处理输入\n",[74,9739,9740,9742,9745],{"class":76,"line":1029},[74,9741,9723],{"class":84},[74,9743,9744],{"class":80},"processKeyboardInput",[74,9746,3568],{"class":84},[74,9748,9749],{"class":76,"line":1045},[74,9750,1184],{"emptyLinePlaceholder":1183},[74,9752,9753],{"class":76,"line":1072},[74,9754,9755],{"class":914},"\u002F\u002F 获取 view 矩阵\n",[74,9757,9758,9761,9763,9766,9769],{"class":76,"line":1214},[74,9759,9760],{"class":84},"mat4 view ",[74,9762,89],{"class":88},[74,9764,9765],{"class":84}," dpiStabilizer.",[74,9767,9768],{"class":80},"getViewMatrix",[74,9770,1355],{"class":84},[56,9772,9525,9774],{"id":9773},"_2-高级功能",[33,9775,9776],{},"高级功能",[10,9778,9780],{"className":9486,"code":9779,"language":9488,"meta":19,"style":19},"\u002F\u002F 获取统计信息\nstd::string stats = dpiStabilizer.getStats();\n\n\u002F\u002F 设置敏感度\ndpiStabilizer.setSensitivity(0.15f);\n\n\u002F\u002F 重置统计\ndpiStabilizer.resetStats();\n\n\u002F\u002F 检查捕获状态\nbool captured = dpiStabilizer.isMouseCaptured();\n",[17,9781,9782,9787,9806,9810,9815,9831,9835,9840,9849,9853,9858],{"__ignoreMap":19},[74,9783,9784],{"class":76,"line":77},[74,9785,9786],{"class":914},"\u002F\u002F 获取统计信息\n",[74,9788,9789,9791,9793,9795,9797,9799,9801,9804],{"class":76,"line":192},[74,9790,1286],{"class":80},[74,9792,95],{"class":84},[74,9794,1291],{"class":84},[74,9796,8924],{"class":84},[74,9798,89],{"class":88},[74,9800,9765],{"class":84},[74,9802,9803],{"class":80},"getStats",[74,9805,1355],{"class":84},[74,9807,9808],{"class":76,"line":475},[74,9809,1184],{"emptyLinePlaceholder":1183},[74,9811,9812],{"class":76,"line":505},[74,9813,9814],{"class":914},"\u002F\u002F 设置敏感度\n",[74,9816,9817,9819,9822,9824,9827,9829],{"class":76,"line":627},[74,9818,9723],{"class":84},[74,9820,9821],{"class":80},"setSensitivity",[74,9823,101],{"class":84},[74,9825,9826],{"class":104},"0.15",[74,9828,108],{"class":88},[74,9830,125],{"class":84},[74,9832,9833],{"class":76,"line":938},[74,9834,1184],{"emptyLinePlaceholder":1183},[74,9836,9837],{"class":76,"line":954},[74,9838,9839],{"class":914},"\u002F\u002F 重置统计\n",[74,9841,9842,9844,9847],{"class":76,"line":970},[74,9843,9723],{"class":84},[74,9845,9846],{"class":80},"resetStats",[74,9848,1355],{"class":84},[74,9850,9851],{"class":76,"line":984},[74,9852,1184],{"emptyLinePlaceholder":1183},[74,9854,9855],{"class":76,"line":1000},[74,9856,9857],{"class":914},"\u002F\u002F 检查捕获状态\n",[74,9859,9860,9862,9865,9867,9869,9872],{"class":76,"line":1029},[74,9861,1646],{"class":88},[74,9863,9864],{"class":84}," captured ",[74,9866,89],{"class":88},[74,9868,9765],{"class":84},[74,9870,9871],{"class":80},"isMouseCaptured",[74,9873,1355],{"class":84},[25,9875,9877],{"id":9876},"优势","🎯 优势",[9879,9880,9881,9887,9893,9899,9904],"ol",{},[9362,9882,9883,9886],{},[33,9884,9885],{},"模块化设计","：易于集成和维护",[9362,9888,9889,9892],{},[33,9890,9891],{},"自动过滤","：无需手动处理 DPI 漂移",[9362,9894,9895,9898],{},[33,9896,9897],{},"实时调整","：运行时动态调节参数",[9362,9900,9901,9903],{},[33,9902,9562],{},"：了解过滤效果",[9362,9905,9906,9909],{},[33,9907,9908],{},"跨平台兼容","：支持不同操作系统",[25,9911,9913],{"id":9912},"调试技巧","🔍 调试技巧",[9879,9915,9916,9922,9928,9934],{},[9362,9917,9918,9921],{},[33,9919,9920],{},"按 T 键","查看统计信息",[9362,9923,9924,9927],{},[33,9925,9926],{},"调整敏感度","找到最佳设置",[9362,9929,9930,9933],{},[33,9931,9932],{},"监控过滤率","了解 DPI 漂移情况",[9362,9935,9936,9939],{},[33,9937,9938],{},"使用 Ctrl+Alt","释放鼠标进行调试",[25,9941,9943],{"id":9942},"性能优化","📈 性能优化",[9359,9945,9946,9949,9952,9955],{},[9362,9947,9948],{},"使用静态回调函数减少开销",[9362,9950,9951],{},"智能过滤减少不必要的计算",[9362,9953,9954],{},"平滑处理提升用户体验",[9362,9956,9957],{},"统计信息帮助性能调优",[21,9959,9960],{},"显示imgui窗口的完整代码：",[10,9962,9964],{"className":68,"code":9963,"language":70,"meta":19,"style":19},"#include \u003Cglad\u002Fglad.h>\n#include \u003CGLFW\u002Fglfw3.h>\n#include \u003Copencv4\u002Fopencv2\u002Fopencv.hpp>\n#include \u003Ciostream>\n#include \u003Ccmath>\n#include \u003Cfilesystem>\n#include \u003Cimgui.h>\n#include \u003Cimgui_impl_glfw.h>\n#include \u003Cimgui_impl_opengl3.h>\n#include \"utils\u002Fshader.h\"\n#include \"utils\u002FglmCompute.h\"\n#include \"utils\u002Flogger.h\"\n#include \"include\u002Fdpi_stabilizer.h\"\n#include \"include\u002Fimgui_manager.h\"\n\nusing namespace cv;\nusing namespace glm;\n\n\u002F\u002F 窗口大小改变时的回调函数\nvoid framebuffer_size_callback(GLFWwindow* window, int width, int height) {\n    glViewport(0, 0, width, height);\n}\n\nstd::string getCurrentWorkingDirectory() {\n    namespace fs = std::filesystem;\n    try {\n        \u002F\u002F current_path() 返回当前工作目录\n        return fs::current_path().string();\n    } catch (const fs::filesystem_error& e) {\n        std::cerr \u003C\u003C \"Filesystem Error: \" \u003C\u003C e.what() \u003C\u003C std::endl;\n        return \"\";\n    }\n}\n\n\u002F\u002F 全局变量\nfloat deltaTime = 0.0f; \u002F\u002F 当前帧与上一帧的时间差\nfloat lastFrame = 0.0f; \u002F\u002F 上一帧的时间\n\n\u002F\u002F DPI 稳定器实例\nDPIStabilizer dpiStabilizer(0.1f, 50.0f, 0.8f);\n\n\u002F\u002F ImGui 管理器实例\nImGuiManager imguiManager;\n\n\u002F\u002F 简化的输入处理函数\nvoid processInput(GLFWwindow *window){\n    \u002F\u002F 使用 DPI 稳定器处理所有输入\n    dpiStabilizer.processKeyboardInput(window);\n    \n    \u002F\u002F 窗口控制快捷键\n    if (glfwGetKey(window, GLFW_KEY_F1) == GLFW_PRESS) {\n        imguiManager.toggleWindow(\"Hello ImGui!\");\n    }\n    if (glfwGetKey(window, GLFW_KEY_F2) == GLFW_PRESS) {\n        imguiManager.toggleWindow(\"控制面板\");\n    }\n    if (glfwGetKey(window, GLFW_KEY_F3) == GLFW_PRESS) {\n        imguiManager.toggleWindow(\"性能监控\");\n    }\n    if (glfwGetKey(window, GLFW_KEY_F4) == GLFW_PRESS) {\n        imguiManager.toggleWindow(\"调试信息\");\n    }\n    \n    \u002F\u002F 显示统计信息 (按 T 键)\n    if (glfwGetKey(window, GLFW_KEY_T) == GLFW_PRESS) {\n        std::cout \u003C\u003C dpiStabilizer.getStats() \u003C\u003C std::endl;\n    }\n}\n\nint main() {\n\n    \u002F\u002F 模型矩阵\n    mat4 model = mat4(1.0f);\n    model = rotate(model, radians(-55.0f), vec3(1.0f, 0.0f, 0.0f));\n\n    \u002F\u002F 投影矩阵\n    mat4 projection = perspective(radians(45.0f), (float)800 \u002F (float)600, 0.1f, 100.0f);\n\n    \u002F\u002F 立方体数组\n    vec3 cubePositions[] = {\n        vec3(0.0f,  0.0f,  0.0f),\n        vec3(2.0f,  5.0f, -15.0f),\n        vec3(-1.5f, -2.2f, -2.5f),\n        vec3(-3.8f, -2.0f, -12.3f),\n        vec3(2.4f, -0.4f, -3.5f),\n    };\n\n    auto path = getCurrentWorkingDirectory().append(\"\u002FAssets\u002Fimage.png\");\n    auto path2 = getCurrentWorkingDirectory().append(\"\u002FAssets\u002Fimage2.png\");\n    cv::Mat image = cv::imread(path);\n    cv::Mat image2 = cv::imread(path2);\n    cv::flip(image2, image2, 0);\n    cv::cvtColor(image, image, cv::COLOR_BGR2RGB);\n    cv::cvtColor(image2, image2, cv::COLOR_BGR2RGB);\n\n    \u002F\u002F 转换为字节数组\n    std::vector\u003Cuchar> imageData;\n    std::vector\u003Cuchar> imageData2;\n    if (image.empty()) {\n        std::cerr \u003C\u003C \"Could not read the image: \" \u003C\u003C path \u003C\u003C std::endl;\n        return 1;\n    }\n    if (image2.empty()) {\n        std::cerr \u003C\u003C \"Could not read the image2: \" \u003C\u003C path2 \u003C\u003C std::endl;\n        return 1;\n    }\n    \n    std::cout \u003C\u003C \"Image 1 loaded: \" \u003C\u003C image.cols \u003C\u003C \"x\" \u003C\u003C image.rows \u003C\u003C std::endl;\n    std::cout \u003C\u003C \"Image 2 loaded: \" \u003C\u003C image2.cols \u003C\u003C \"x\" \u003C\u003C image2.rows \u003C\u003C std::endl;\n\n    cv::imencode(\".png\", image, imageData);\n    cv::imencode(\".png\", image2, imageData2);\n\n\n    \n    \u002F\u002F 初始化GLFW\n    glfwInit();\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);\n    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);\n    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n    \n    \u002F\u002F 设置 DPI 感知提示\n    DPIStabilizer::setDPIHint();\n\n    \u002F\u002F 创建窗口\n    GLFWwindow* window = glfwCreateWindow(800, 600, \"OpenGL Window\", NULL, NULL);\n    if (window == NULL) {\n        std::cout \u003C\u003C \"Failed to create GLFW window\" \u003C\u003C std::endl;\n        glfwTerminate();\n        return -1;\n    }\n\n\n    \n    glfwMakeContextCurrent(window);\n    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);\n    \n    \u002F\u002F 初始化 DPI 稳定器\n    dpiStabilizer.initialize(window);\n\n    \u002F\u002F 初始化GLAD\n    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {\n        std::cout \u003C\u003C \"Failed to initialize GLAD\" \u003C\u003C std::endl;\n        return -1;\n    }\n\n    \u002F\u002F 初始化 ImGui 管理器\n    imguiManager.initialize(window);\n    \n    \u002F\u002F 注册窗口\n    imguiManager.registerWindow(\"Hello ImGui!\", []() {\n        ImGui::Text(\"Hello, World!\");\n        ImGui::Text(\"DPI 稳定器状态: %s\", dpiStabilizer.isMouseCaptured() ? \"已捕获\" : \"已释放\");\n        ImGui::Text(\"鼠标敏感度: %.3f\", dpiStabilizer.getSensitivity());\n        \n        if (ImGui::Button(\"重置统计\")) {\n            dpiStabilizer.resetStats();\n        }\n        \n        float sensitivity = dpiStabilizer.getSensitivity();\n        if (ImGui::SliderFloat(\"鼠标敏感度\", &sensitivity, 0.01f, 0.5f)) {\n            dpiStabilizer.setSensitivity(sensitivity);\n        }\n    });\n    \n    imguiManager.registerWindow(\"控制面板\", []() {\n        ImGuiIO& io = ImGui::GetIO();\n        ImGui::Text(\"FPS: %.1f\", io.Framerate);\n        ImGui::Text(\"帧时间: %.3f ms\", 1000.0f \u002F io.Framerate);\n    });\n\n    \u002F\u002F 启用深度测试\n    glEnable(GL_DEPTH_TEST);\n\n    float vertices[] = {\n    \u002F\u002F 位置(3) + 纹理坐标(2)\n    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,\n     0.5f, -0.5f, -0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,\n\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 1.0f,\n    -0.5f,  0.5f,  0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n\n    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f, -0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f, -0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,\n\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,\n     0.5f,  0.5f, -0.5f,  1.0f, 1.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n     0.5f,  0.5f,  0.5f,  1.0f, 0.0f,\n    -0.5f,  0.5f,  0.5f,  0.0f, 0.0f,\n    -0.5f,  0.5f, -0.5f,  0.0f, 1.0f\n};\n    \n    \u002F\u002F indices数组未使用，已删除\n\n    \u002F\u002F 纹理\n    unsigned int texture;\n    unsigned int texture2;\n    glGenTextures(1, &texture); \u002F\u002F 生成纹理\n    glGenTextures(1, &texture2); \u002F\u002F 生成纹理\n    \n    \u002F\u002F 配置第一个纹理\n    glActiveTexture(GL_TEXTURE0);\n    glBindTexture(GL_TEXTURE_2D, texture); \u002F\u002F 绑定纹理\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.cols, image.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, image.data); \u002F\u002F 设置纹理数据\n    glGenerateMipmap(GL_TEXTURE_2D); \u002F\u002F 生成mipmap\n\n    \u002F\u002F 配置第二个纹理\n    glActiveTexture(GL_TEXTURE1);\n    glBindTexture(GL_TEXTURE_2D, texture2); \u002F\u002F 绑定纹理\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); \u002F\u002F 设置纹理环绕方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); \u002F\u002F 设置纹理环绕方式   \n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); \u002F\u002F 设置纹理过滤方式\n    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image2.cols, image2.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, image2.data); \u002F\u002F 设置纹理数据\n    glGenerateMipmap(GL_TEXTURE_2D); \u002F\u002F 生成mipmap\n\n\n    \u002F\u002F 创建VAO\n    unsigned int VAO;\n    glGenVertexArrays(1, &VAO);\n    glBindVertexArray(VAO); \u002F\u002F 绑定VAO\n\n    \u002F\u002F 创建VBO\n    unsigned int VBO;\n    glGenBuffers(1, &VBO);\n    glBindBuffer(GL_ARRAY_BUFFER, VBO); \u002F\u002F 绑定VBO\n    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);\n\n    int nrAttributes;\n    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);\n    std::cout \u003C\u003C \"Maximum nr of vertex attributes supported: \" \u003C\u003C nrAttributes \u003C\u003C std::endl;\n\n    \u002F\u002F 位置属性\n    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);\n    glEnableVertexAttribArray(0); \u002F\u002F 启用顶点属性\n    \n    \u002F\u002F 纹理属性\n    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));\n    glEnableVertexAttribArray(2);\n\n    \u002F\u002F 构建并编译着色器程序\n    Shader ourShader(\"shader\u002Fcustom.vert\", \"shader\u002Ffragment.vert\");\n\n    \u002F\u002F 渲染循环\n    while (!glfwWindowShouldClose(window)) {\n        \u002F\u002F 处理输入\n        processInput(window);\n        glfwPollEvents();\n\n        \u002F\u002F 从 DPI 稳定器获取 view 矩阵\n        mat4 view = dpiStabilizer.getViewMatrix();\n        \n        float currentFrame = glfwGetTime();\n        deltaTime = currentFrame - lastFrame;\n        lastFrame = currentFrame;\n        \u002F\u002F 渲染指令\n        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);\n        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n        \n        \u002F\u002F 使用着色器程序\n        ourShader.use();\n\n        \u002F\u002F 设置矩阵uniform\n        ourShader.setMat4(\"model\", model);\n        ourShader.setMat4(\"view\", view);\n        ourShader.setMat4(\"projection\", projection);\n        \n        ourShader.setInt(\"ourTexture\", 0);\n        ourShader.setInt(\"ourTexture2\", 1);\n        \n        glBindVertexArray(VAO);\n        \n        \u002F\u002F 绘制多个立方体\n        for(unsigned int i = 0; i \u003C 10; i++) {\n            glm::mat4 modelMatrix = glm::mat4(1.0f);\n            modelMatrix = glm::translate(modelMatrix, cubePositions[i]);\n            float angle = 20.0f * i; \n            modelMatrix = glm::rotate(modelMatrix, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));\n            ourShader.setMat4(\"model\", modelMatrix);\n\n            glDrawArrays(GL_TRIANGLES, 0, 36);\n        }\n        \n        \u002F\u002F 使用 ImGui 管理器渲染所有窗口\n        imguiManager.render();\n\n        \u002F\u002F 交换缓冲区和检查IO事件\n        glfwSwapBuffers(window);\n    }\n\n    \u002F\u002F 清理 ImGui 管理器\n    imguiManager.shutdown();\n\n    \u002F\u002F 清理资源\n    glDeleteVertexArrays(1, &VAO);\n    glDeleteBuffers(1, &VBO);\n    glDeleteTextures(1, &texture);\n    glDeleteTextures(1, &texture2);\n    glfwTerminate();\n    return 0;\n}\n\n",[17,9965,9966,9972,9978,9984,9990,9996,10002,10009,10016,10023,10029,10035,10041,10048,10055,10059,10069,10079,10083,10087,10115,10129,10133,10137,10149,10165,10171,10175,10191,10209,10233,10241,10245,10249,10253,10258,10276,10294,10298,10303,10329,10333,10338,10343,10347,10352,10368,10373,10382,10386,10391,10406,10421,10425,10440,10453,10457,10472,10485,10489,10504,10517,10521,10525,10530,10545,10565,10569,10573,10577,10585,10589,10593,10611,10655,10659,10663,10715,10719,10723,10733,10757,10783,10813,10843,10871,10875,10879,10899,10919,10939,10959,10973,10987,11001,11005,11009,11023,11037,11047,11067,11075,11079,11089,11109,11117,11121,11125,11153,11181,11185,11199,11213,11217,11221,11225,11229,11235,11245,11255,11261,11265,11270,11280,11284,11288,11322,11334,11350,11356,11366,11370,11374,11378,11382,11388,11394,11398,11403,11411,11415,11419,11431,11447,11457,11461,11465,11470,11479,11483,11488,11502,11519,11556,11582,11586,11608,11617,11621,11625,11639,11676,11685,11689,11694,11698,11710,11732,11753,11783,11787,11791,11795,11801,11805,11815,11819,11857,11893,11927,11961,11997,12035,12039,12075,12109,12141,12173,12207,12243,12247,12281,12317,12355,12393,12429,12463,12467,12499,12533,12569,12605,12639,12671,12675,12713,12749,12783,12817,12853,12891,12895,12931,12965,12997,13029,13063,13097,13101,13105,13109,13113,13117,13125,13133,13149,13165,13169,13173,13179,13187,13195,13203,13211,13219,13235,13243,13247,13251,13257,13265,13273,13281,13289,13297,13313,13321,13325,13329,13333,13341,13355,13363,13367,13371,13379,13393,13401,13411,13415,13421,13431,13451,13455,13459,13493,13505,13509,13513,13555,13565,13569,13573,13589,13593,13597,13609,13613,13619,13625,13629,13634,13649,13653,13667,13681,13691,13695,13725,13735,13739,13743,13751,13755,13759,13771,13783,13795,13799,13815,13831,13835,13841,13845,13849,13877,13903,13917,13933,13981,13993,13997,14011,14015,14019,14024,14033,14037,14041,14047,14051,14055,14060,14069,14073,14077,14091,14105,14119,14133,14139,14147],{"__ignoreMap":19},[74,9967,9968,9970],{"class":76,"line":77},[74,9969,1118],{"class":88},[74,9971,1122],{"class":1121},[74,9973,9974,9976],{"class":76,"line":192},[74,9975,1118],{"class":88},[74,9977,1129],{"class":1121},[74,9979,9980,9982],{"class":76,"line":475},[74,9981,1118],{"class":88},[74,9983,1136],{"class":1121},[74,9985,9986,9988],{"class":76,"line":505},[74,9987,1118],{"class":88},[74,9989,1143],{"class":1121},[74,9991,9992,9994],{"class":76,"line":627},[74,9993,1118],{"class":88},[74,9995,1150],{"class":1121},[74,9997,9998,10000],{"class":76,"line":938},[74,9999,1118],{"class":88},[74,10001,1157],{"class":1121},[74,10003,10004,10006],{"class":76,"line":954},[74,10005,1118],{"class":88},[74,10007,10008],{"class":1121}," \u003Cimgui.h>\n",[74,10010,10011,10013],{"class":76,"line":970},[74,10012,1118],{"class":88},[74,10014,10015],{"class":1121}," \u003Cimgui_impl_glfw.h>\n",[74,10017,10018,10020],{"class":76,"line":984},[74,10019,1118],{"class":88},[74,10021,10022],{"class":1121}," \u003Cimgui_impl_opengl3.h>\n",[74,10024,10025,10027],{"class":76,"line":1000},[74,10026,1118],{"class":88},[74,10028,1164],{"class":1121},[74,10030,10031,10033],{"class":76,"line":1029},[74,10032,1118],{"class":88},[74,10034,1171],{"class":1121},[74,10036,10037,10039],{"class":76,"line":1045},[74,10038,1118],{"class":88},[74,10040,1178],{"class":1121},[74,10042,10043,10045],{"class":76,"line":1072},[74,10044,1118],{"class":88},[74,10046,10047],{"class":1121}," \"include\u002Fdpi_stabilizer.h\"\n",[74,10049,10050,10052],{"class":76,"line":1214},[74,10051,1118],{"class":88},[74,10053,10054],{"class":1121}," \"include\u002Fimgui_manager.h\"\n",[74,10056,10057],{"class":76,"line":1220},[74,10058,1184],{"emptyLinePlaceholder":1183},[74,10060,10061,10063,10065,10067],{"class":76,"line":1255},[74,10062,1189],{"class":88},[74,10064,1192],{"class":88},[74,10066,1195],{"class":80},[74,10068,570],{"class":84},[74,10070,10071,10073,10075,10077],{"class":76,"line":1273},[74,10072,1189],{"class":88},[74,10074,1192],{"class":88},[74,10076,92],{"class":80},[74,10078,570],{"class":84},[74,10080,10081],{"class":76,"line":1278},[74,10082,1184],{"emptyLinePlaceholder":1183},[74,10084,10085],{"class":76,"line":1283},[74,10086,1217],{"class":914},[74,10088,10089,10091,10093,10095,10097,10099,10101,10103,10105,10107,10109,10111,10113],{"class":76,"line":1300},[74,10090,865],{"class":88},[74,10092,1225],{"class":80},[74,10094,101],{"class":84},[74,10096,873],{"class":80},[74,10098,593],{"class":88},[74,10100,1234],{"class":879},[74,10102,111],{"class":84},[74,10104,1239],{"class":88},[74,10106,1242],{"class":879},[74,10108,111],{"class":84},[74,10110,1239],{"class":88},[74,10112,1249],{"class":879},[74,10114,1252],{"class":84},[74,10116,10117,10119,10121,10123,10125,10127],{"class":76,"line":1322},[74,10118,1258],{"class":80},[74,10120,101],{"class":84},[74,10122,1263],{"class":104},[74,10124,111],{"class":84},[74,10126,1263],{"class":104},[74,10128,1270],{"class":84},[74,10130,10131],{"class":76,"line":1331},[74,10132,1075],{"class":84},[74,10134,10135],{"class":76,"line":1337},[74,10136,1184],{"emptyLinePlaceholder":1183},[74,10138,10139,10141,10143,10145,10147],{"class":76,"line":1358},[74,10140,1286],{"class":80},[74,10142,95],{"class":84},[74,10144,1291],{"class":80},[74,10146,1294],{"class":80},[74,10148,1297],{"class":84},[74,10150,10151,10153,10155,10157,10159,10161,10163],{"class":76,"line":1383},[74,10152,1303],{"class":88},[74,10154,1306],{"class":80},[74,10156,1309],{"class":88},[74,10158,1312],{"class":80},[74,10160,95],{"class":84},[74,10162,1317],{"class":80},[74,10164,570],{"class":84},[74,10166,10167,10169],{"class":76,"line":1417},[74,10168,1325],{"class":88},[74,10170,1328],{"class":84},[74,10172,10173],{"class":76,"line":1427},[74,10174,1334],{"class":914},[74,10176,10177,10179,10181,10183,10185,10187,10189],{"class":76,"line":1433},[74,10178,1340],{"class":88},[74,10180,1306],{"class":80},[74,10182,95],{"class":84},[74,10184,1347],{"class":80},[74,10186,1350],{"class":84},[74,10188,1291],{"class":80},[74,10190,1355],{"class":84},[74,10192,10193,10195,10197,10199,10201,10203,10205,10207],{"class":76,"line":1438},[74,10194,1361],{"class":84},[74,10196,1364],{"class":88},[74,10198,923],{"class":84},[74,10200,1369],{"class":88},[74,10202,1306],{"class":80},[74,10204,1374],{"class":84},[74,10206,1377],{"class":88},[74,10208,1380],{"class":84},[74,10210,10211,10213,10215,10217,10219,10221,10223,10225,10227,10229,10231],{"class":76,"line":1443},[74,10212,1386],{"class":80},[74,10214,1389],{"class":84},[74,10216,1392],{"class":88},[74,10218,1395],{"class":1121},[74,10220,1398],{"class":88},[74,10222,1401],{"class":84},[74,10224,1404],{"class":80},[74,10226,1407],{"class":84},[74,10228,1392],{"class":88},[74,10230,1312],{"class":80},[74,10232,1414],{"class":84},[74,10234,10235,10237,10239],{"class":76,"line":1449},[74,10236,1340],{"class":88},[74,10238,1422],{"class":1121},[74,10240,570],{"class":84},[74,10242,10243],{"class":76,"line":1480},[74,10244,1430],{"class":84},[74,10246,10247],{"class":76,"line":1516},[74,10248,1075],{"class":84},[74,10250,10251],{"class":76,"line":1549},[74,10252,1184],{"emptyLinePlaceholder":1183},[74,10254,10255],{"class":76,"line":1554},[74,10256,10257],{"class":914},"\u002F\u002F 全局变量\n",[74,10259,10260,10262,10265,10267,10269,10271,10273],{"class":76,"line":1560},[74,10261,557],{"class":88},[74,10263,10264],{"class":84}," deltaTime ",[74,10266,89],{"class":88},[74,10268,1593],{"class":104},[74,10270,108],{"class":88},[74,10272,911],{"class":84},[74,10274,10275],{"class":914}," \u002F\u002F 当前帧与上一帧的时间差\n",[74,10277,10278,10280,10283,10285,10287,10289,10291],{"class":76,"line":1583},[74,10279,557],{"class":88},[74,10281,10282],{"class":84}," lastFrame ",[74,10284,89],{"class":88},[74,10286,1593],{"class":104},[74,10288,108],{"class":88},[74,10290,911],{"class":84},[74,10292,10293],{"class":914}," \u002F\u002F 上一帧的时间\n",[74,10295,10296],{"class":76,"line":1603},[74,10297,1184],{"emptyLinePlaceholder":1183},[74,10299,10300],{"class":76,"line":1623},[74,10301,10302],{"class":914},"\u002F\u002F DPI 稳定器实例\n",[74,10304,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325,10327],{"class":76,"line":1643},[74,10306,7168],{"class":80},[74,10308,9669],{"class":80},[74,10310,101],{"class":84},[74,10312,2779],{"class":104},[74,10314,108],{"class":88},[74,10316,111],{"class":84},[74,10318,9611],{"class":104},[74,10320,108],{"class":88},[74,10322,111],{"class":84},[74,10324,9618],{"class":104},[74,10326,108],{"class":88},[74,10328,125],{"class":84},[74,10330,10331],{"class":76,"line":1662},[74,10332,1184],{"emptyLinePlaceholder":1183},[74,10334,10335],{"class":76,"line":1679},[74,10336,10337],{"class":914},"\u002F\u002F ImGui 管理器实例\n",[74,10339,10340],{"class":76,"line":1684},[74,10341,10342],{"class":84},"ImGuiManager imguiManager;\n",[74,10344,10345],{"class":76,"line":1690},[74,10346,1184],{"emptyLinePlaceholder":1183},[74,10348,10349],{"class":76,"line":1723},[74,10350,10351],{"class":914},"\u002F\u002F 简化的输入处理函数\n",[74,10353,10354,10356,10358,10360,10362,10364,10366],{"class":76,"line":1729},[74,10355,865],{"class":88},[74,10357,868],{"class":80},[74,10359,101],{"class":84},[74,10361,873],{"class":80},[74,10363,876],{"class":88},[74,10365,880],{"class":879},[74,10367,2142],{"class":84},[74,10369,10370],{"class":76,"line":1747},[74,10371,10372],{"class":914},"    \u002F\u002F 使用 DPI 稳定器处理所有输入\n",[74,10374,10375,10378,10380],{"class":76,"line":1753},[74,10376,10377],{"class":84},"    dpiStabilizer.",[74,10379,9744],{"class":80},[74,10381,3568],{"class":84},[74,10383,10384],{"class":76,"line":1761},[74,10385,1750],{"class":84},[74,10387,10388],{"class":76,"line":1772},[74,10389,10390],{"class":914},"    \u002F\u002F 窗口控制快捷键\n",[74,10392,10393,10395,10397,10399,10402,10404],{"class":76,"line":1783},[74,10394,920],{"class":88},[74,10396,923],{"class":84},[74,10398,926],{"class":80},[74,10400,10401],{"class":84},"(window, GLFW_KEY_F1) ",[74,10403,932],{"class":88},[74,10405,7913],{"class":84},[74,10407,10408,10411,10414,10416,10419],{"class":76,"line":1796},[74,10409,10410],{"class":84},"        imguiManager.",[74,10412,10413],{"class":80},"toggleWindow",[74,10415,101],{"class":84},[74,10417,10418],{"class":1121},"\"Hello ImGui!\"",[74,10420,125],{"class":84},[74,10422,10423],{"class":76,"line":1801},[74,10424,1430],{"class":84},[74,10426,10427,10429,10431,10433,10436,10438],{"class":76,"line":1806},[74,10428,920],{"class":88},[74,10430,923],{"class":84},[74,10432,926],{"class":80},[74,10434,10435],{"class":84},"(window, GLFW_KEY_F2) ",[74,10437,932],{"class":88},[74,10439,7913],{"class":84},[74,10441,10442,10444,10446,10448,10451],{"class":76,"line":1824},[74,10443,10410],{"class":84},[74,10445,10413],{"class":80},[74,10447,101],{"class":84},[74,10449,10450],{"class":1121},"\"控制面板\"",[74,10452,125],{"class":84},[74,10454,10455],{"class":76,"line":1844},[74,10456,1430],{"class":84},[74,10458,10459,10461,10463,10465,10468,10470],{"class":76,"line":1854},[74,10460,920],{"class":88},[74,10462,923],{"class":84},[74,10464,926],{"class":80},[74,10466,10467],{"class":84},"(window, GLFW_KEY_F3) ",[74,10469,932],{"class":88},[74,10471,7913],{"class":84},[74,10473,10474,10476,10478,10480,10483],{"class":76,"line":1864},[74,10475,10410],{"class":84},[74,10477,10413],{"class":80},[74,10479,101],{"class":84},[74,10481,10482],{"class":1121},"\"性能监控\"",[74,10484,125],{"class":84},[74,10486,10487],{"class":76,"line":1869},[74,10488,1430],{"class":84},[74,10490,10491,10493,10495,10497,10500,10502],{"class":76,"line":1886},[74,10492,920],{"class":88},[74,10494,923],{"class":84},[74,10496,926],{"class":80},[74,10498,10499],{"class":84},"(window, GLFW_KEY_F4) ",[74,10501,932],{"class":88},[74,10503,7913],{"class":84},[74,10505,10506,10508,10510,10512,10515],{"class":76,"line":1898},[74,10507,10410],{"class":84},[74,10509,10413],{"class":80},[74,10511,101],{"class":84},[74,10513,10514],{"class":1121},"\"调试信息\"",[74,10516,125],{"class":84},[74,10518,10519],{"class":76,"line":1908},[74,10520,1430],{"class":84},[74,10522,10523],{"class":76,"line":1913},[74,10524,1750],{"class":84},[74,10526,10527],{"class":76,"line":1924},[74,10528,10529],{"class":914},"    \u002F\u002F 显示统计信息 (按 T 键)\n",[74,10531,10532,10534,10536,10538,10541,10543],{"class":76,"line":1935},[74,10533,920],{"class":88},[74,10535,923],{"class":84},[74,10537,926],{"class":80},[74,10539,10540],{"class":84},"(window, GLFW_KEY_T) ",[74,10542,932],{"class":88},[74,10544,7913],{"class":84},[74,10546,10547,10549,10551,10553,10555,10557,10559,10561,10563],{"class":76,"line":1940},[74,10548,1386],{"class":80},[74,10550,2304],{"class":84},[74,10552,1392],{"class":88},[74,10554,9765],{"class":84},[74,10556,9803],{"class":80},[74,10558,1407],{"class":84},[74,10560,1392],{"class":88},[74,10562,1312],{"class":80},[74,10564,1414],{"class":84},[74,10566,10567],{"class":76,"line":1946},[74,10568,1430],{"class":84},[74,10570,10571],{"class":76,"line":1964},[74,10572,1075],{"class":84},[74,10574,10575],{"class":76,"line":1978},[74,10576,1184],{"emptyLinePlaceholder":1183},[74,10578,10579,10581,10583],{"class":76,"line":1997},[74,10580,1239],{"class":88},[74,10582,2581],{"class":80},[74,10584,1297],{"class":84},[74,10586,10587],{"class":76,"line":2012},[74,10588,1184],{"emptyLinePlaceholder":1183},[74,10590,10591],{"class":76,"line":2017},[74,10592,2594],{"class":914},[74,10594,10595,10597,10599,10601,10603,10605,10607,10609],{"class":76,"line":2023},[74,10596,2600],{"class":80},[74,10598,2603],{"class":84},[74,10600,89],{"class":88},[74,10602,2608],{"class":80},[74,10604,101],{"class":84},[74,10606,272],{"class":104},[74,10608,108],{"class":88},[74,10610,125],{"class":84},[74,10612,10613,10615,10617,10619,10621,10623,10625,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10647,10649,10651,10653],{"class":76,"line":2032},[74,10614,2622],{"class":84},[74,10616,89],{"class":88},[74,10618,2627],{"class":80},[74,10620,2630],{"class":84},[74,10622,2044],{"class":80},[74,10624,101],{"class":84},[74,10626,212],{"class":88},[74,10628,2639],{"class":104},[74,10630,108],{"class":88},[74,10632,674],{"class":84},[74,10634,98],{"class":80},[74,10636,101],{"class":84},[74,10638,272],{"class":104},[74,10640,108],{"class":88},[74,10642,111],{"class":84},[74,10644,105],{"class":104},[74,10646,108],{"class":88},[74,10648,111],{"class":84},[74,10650,105],{"class":104},[74,10652,108],{"class":88},[74,10654,532],{"class":84},[74,10656,10657],{"class":76,"line":2061},[74,10658,1184],{"emptyLinePlaceholder":1183},[74,10660,10661],{"class":76,"line":2077},[74,10662,2727],{"class":914},[74,10664,10665,10667,10669,10671,10673,10675,10677,10679,10681,10683,10685,10687,10689,10691,10693,10695,10697,10699,10701,10703,10705,10707,10709,10711,10713],{"class":76,"line":2103},[74,10666,2600],{"class":80},[74,10668,2735],{"class":84},[74,10670,89],{"class":88},[74,10672,2740],{"class":80},[74,10674,101],{"class":84},[74,10676,2044],{"class":80},[74,10678,101],{"class":84},[74,10680,2749],{"class":104},[74,10682,108],{"class":88},[74,10684,2754],{"class":84},[74,10686,557],{"class":88},[74,10688,2759],{"class":84},[74,10690,2762],{"class":104},[74,10692,2765],{"class":88},[74,10694,923],{"class":84},[74,10696,557],{"class":88},[74,10698,2759],{"class":84},[74,10700,2774],{"class":104},[74,10702,111],{"class":84},[74,10704,2779],{"class":104},[74,10706,108],{"class":88},[74,10708,111],{"class":84},[74,10710,2786],{"class":104},[74,10712,108],{"class":88},[74,10714,125],{"class":84},[74,10716,10717],{"class":76,"line":2117},[74,10718,1184],{"emptyLinePlaceholder":1183},[74,10720,10721],{"class":76,"line":2122},[74,10722,2801],{"class":914},[74,10724,10725,10727,10729,10731],{"class":76,"line":2127},[74,10726,2026],{"class":80},[74,10728,2809],{"class":84},[74,10730,89],{"class":88},[74,10732,1328],{"class":84},[74,10734,10735,10737,10739,10741,10743,10745,10747,10749,10751,10753,10755],{"class":76,"line":2145},[74,10736,2819],{"class":80},[74,10738,101],{"class":84},[74,10740,105],{"class":104},[74,10742,108],{"class":88},[74,10744,736],{"class":84},[74,10746,105],{"class":104},[74,10748,108],{"class":88},[74,10750,736],{"class":84},[74,10752,105],{"class":104},[74,10754,108],{"class":88},[74,10756,2840],{"class":84},[74,10758,10759,10761,10763,10765,10767,10769,10771,10773,10775,10777,10779,10781],{"class":76,"line":2151},[74,10760,2819],{"class":80},[74,10762,101],{"class":84},[74,10764,2850],{"class":104},[74,10766,108],{"class":88},[74,10768,736],{"class":84},[74,10770,2857],{"class":104},[74,10772,108],{"class":88},[74,10774,111],{"class":84},[74,10776,212],{"class":88},[74,10778,2866],{"class":104},[74,10780,108],{"class":88},[74,10782,2840],{"class":84},[74,10784,10785,10787,10789,10791,10793,10795,10797,10799,10801,10803,10805,10807,10809,10811],{"class":76,"line":2179},[74,10786,2819],{"class":80},[74,10788,101],{"class":84},[74,10790,212],{"class":88},[74,10792,2882],{"class":104},[74,10794,108],{"class":88},[74,10796,111],{"class":84},[74,10798,212],{"class":88},[74,10800,2891],{"class":104},[74,10802,108],{"class":88},[74,10804,111],{"class":84},[74,10806,212],{"class":88},[74,10808,2900],{"class":104},[74,10810,108],{"class":88},[74,10812,2840],{"class":84},[74,10814,10815,10817,10819,10821,10823,10825,10827,10829,10831,10833,10835,10837,10839,10841],{"class":76,"line":2193},[74,10816,2819],{"class":80},[74,10818,101],{"class":84},[74,10820,212],{"class":88},[74,10822,2916],{"class":104},[74,10824,108],{"class":88},[74,10826,111],{"class":84},[74,10828,212],{"class":88},[74,10830,2850],{"class":104},[74,10832,108],{"class":88},[74,10834,111],{"class":84},[74,10836,212],{"class":88},[74,10838,2933],{"class":104},[74,10840,108],{"class":88},[74,10842,2840],{"class":84},[74,10844,10845,10847,10849,10851,10853,10855,10857,10859,10861,10863,10865,10867,10869],{"class":76,"line":2216},[74,10846,2819],{"class":80},[74,10848,101],{"class":84},[74,10850,2947],{"class":104},[74,10852,108],{"class":88},[74,10854,111],{"class":84},[74,10856,212],{"class":88},[74,10858,2956],{"class":104},[74,10860,108],{"class":88},[74,10862,111],{"class":84},[74,10864,212],{"class":88},[74,10866,2965],{"class":104},[74,10868,108],{"class":88},[74,10870,2840],{"class":84},[74,10872,10873],{"class":76,"line":2228},[74,10874,2975],{"class":84},[74,10876,10877],{"class":76,"line":2233},[74,10878,1184],{"emptyLinePlaceholder":1183},[74,10880,10881,10883,10885,10887,10889,10891,10893,10895,10897],{"class":76,"line":2247},[74,10882,2986],{"class":88},[74,10884,2989],{"class":84},[74,10886,89],{"class":88},[74,10888,1294],{"class":80},[74,10890,1350],{"class":84},[74,10892,2998],{"class":80},[74,10894,101],{"class":84},[74,10896,3003],{"class":1121},[74,10898,125],{"class":84},[74,10900,10901,10903,10905,10907,10909,10911,10913,10915,10917],{"class":76,"line":2256},[74,10902,2986],{"class":88},[74,10904,3013],{"class":84},[74,10906,89],{"class":88},[74,10908,1294],{"class":80},[74,10910,1350],{"class":84},[74,10912,2998],{"class":80},[74,10914,101],{"class":84},[74,10916,3026],{"class":1121},[74,10918,125],{"class":84},[74,10920,10921,10923,10925,10927,10929,10931,10933,10935,10937],{"class":76,"line":2262},[74,10922,3034],{"class":80},[74,10924,95],{"class":84},[74,10926,3039],{"class":80},[74,10928,3042],{"class":84},[74,10930,89],{"class":88},[74,10932,1195],{"class":80},[74,10934,95],{"class":84},[74,10936,3051],{"class":80},[74,10938,3054],{"class":84},[74,10940,10941,10943,10945,10947,10949,10951,10953,10955,10957],{"class":76,"line":2271},[74,10942,3034],{"class":80},[74,10944,95],{"class":84},[74,10946,3039],{"class":80},[74,10948,3066],{"class":84},[74,10950,89],{"class":88},[74,10952,1195],{"class":80},[74,10954,95],{"class":84},[74,10956,3051],{"class":80},[74,10958,3077],{"class":84},[74,10960,10961,10963,10965,10967,10969,10971],{"class":76,"line":2283},[74,10962,3034],{"class":80},[74,10964,95],{"class":84},[74,10966,3087],{"class":80},[74,10968,3090],{"class":84},[74,10970,1263],{"class":104},[74,10972,125],{"class":84},[74,10974,10975,10977,10979,10981,10983,10985],{"class":76,"line":2298},[74,10976,3034],{"class":80},[74,10978,95],{"class":84},[74,10980,3104],{"class":80},[74,10982,3107],{"class":84},[74,10984,3110],{"class":80},[74,10986,3113],{"class":84},[74,10988,10989,10991,10993,10995,10997,10999],{"class":76,"line":2318},[74,10990,3034],{"class":80},[74,10992,95],{"class":84},[74,10994,3104],{"class":80},[74,10996,3090],{"class":84},[74,10998,3110],{"class":80},[74,11000,3113],{"class":84},[74,11002,11003],{"class":76,"line":2329},[74,11004,1184],{"emptyLinePlaceholder":1183},[74,11006,11007],{"class":76,"line":2335},[74,11008,3139],{"class":914},[74,11010,11011,11013,11015,11017,11019,11021],{"class":76,"line":2343},[74,11012,3145],{"class":80},[74,11014,95],{"class":84},[74,11016,3150],{"class":80},[74,11018,1985],{"class":84},[74,11020,3155],{"class":80},[74,11022,3158],{"class":84},[74,11024,11025,11027,11029,11031,11033,11035],{"class":76,"line":2354},[74,11026,3145],{"class":80},[74,11028,95],{"class":84},[74,11030,3150],{"class":80},[74,11032,1985],{"class":84},[74,11034,3155],{"class":80},[74,11036,3174],{"class":84},[74,11038,11039,11041,11043,11045],{"class":76,"line":2367},[74,11040,920],{"class":88},[74,11042,3182],{"class":84},[74,11044,3185],{"class":80},[74,11046,3188],{"class":84},[74,11048,11049,11051,11053,11055,11057,11059,11061,11063,11065],{"class":76,"line":2385},[74,11050,1386],{"class":80},[74,11052,1389],{"class":84},[74,11054,1392],{"class":88},[74,11056,3200],{"class":1121},[74,11058,1398],{"class":88},[74,11060,2989],{"class":84},[74,11062,1392],{"class":88},[74,11064,1312],{"class":80},[74,11066,1414],{"class":84},[74,11068,11069,11071,11073],{"class":76,"line":2391},[74,11070,1340],{"class":88},[74,11072,3218],{"class":104},[74,11074,570],{"class":84},[74,11076,11077],{"class":76,"line":2396},[74,11078,1430],{"class":84},[74,11080,11081,11083,11085,11087],{"class":76,"line":2401},[74,11082,920],{"class":88},[74,11084,3233],{"class":84},[74,11086,3185],{"class":80},[74,11088,3188],{"class":84},[74,11090,11091,11093,11095,11097,11099,11101,11103,11105,11107],{"class":76,"line":2407},[74,11092,1386],{"class":80},[74,11094,1389],{"class":84},[74,11096,1392],{"class":88},[74,11098,3249],{"class":1121},[74,11100,1398],{"class":88},[74,11102,3013],{"class":84},[74,11104,1392],{"class":88},[74,11106,1312],{"class":80},[74,11108,1414],{"class":84},[74,11110,11111,11113,11115],{"class":76,"line":2422},[74,11112,1340],{"class":88},[74,11114,3218],{"class":104},[74,11116,570],{"class":84},[74,11118,11119],{"class":76,"line":2427},[74,11120,1430],{"class":84},[74,11122,11123],{"class":76,"line":2442},[74,11124,1750],{"class":84},[74,11126,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147,11149,11151],{"class":76,"line":2457},[74,11128,3145],{"class":80},[74,11130,2304],{"class":84},[74,11132,1392],{"class":88},[74,11134,3290],{"class":1121},[74,11136,1398],{"class":88},[74,11138,3295],{"class":84},[74,11140,1392],{"class":88},[74,11142,3300],{"class":1121},[74,11144,1398],{"class":88},[74,11146,3305],{"class":84},[74,11148,1392],{"class":88},[74,11150,1312],{"class":80},[74,11152,1414],{"class":84},[74,11154,11155,11157,11159,11161,11163,11165,11167,11169,11171,11173,11175,11177,11179],{"class":76,"line":2470},[74,11156,3145],{"class":80},[74,11158,2304],{"class":84},[74,11160,1392],{"class":88},[74,11162,3323],{"class":1121},[74,11164,1398],{"class":88},[74,11166,3328],{"class":84},[74,11168,1392],{"class":88},[74,11170,3300],{"class":1121},[74,11172,1398],{"class":88},[74,11174,3337],{"class":84},[74,11176,1392],{"class":88},[74,11178,1312],{"class":80},[74,11180,1414],{"class":84},[74,11182,11183],{"class":76,"line":2485},[74,11184,1184],{"emptyLinePlaceholder":1183},[74,11186,11187,11189,11191,11193,11195,11197],{"class":76,"line":2498},[74,11188,3034],{"class":80},[74,11190,95],{"class":84},[74,11192,3358],{"class":80},[74,11194,101],{"class":84},[74,11196,3363],{"class":1121},[74,11198,3366],{"class":84},[74,11200,11201,11203,11205,11207,11209,11211],{"class":76,"line":2513},[74,11202,3034],{"class":80},[74,11204,95],{"class":84},[74,11206,3358],{"class":80},[74,11208,101],{"class":84},[74,11210,3363],{"class":1121},[74,11212,3382],{"class":84},[74,11214,11215],{"class":76,"line":2532},[74,11216,1184],{"emptyLinePlaceholder":1183},[74,11218,11219],{"class":76,"line":2547},[74,11220,1184],{"emptyLinePlaceholder":1183},[74,11222,11223],{"class":76,"line":2566},[74,11224,1750],{"class":84},[74,11226,11227],{"class":76,"line":2571},[74,11228,3403],{"class":914},[74,11230,11231,11233],{"class":76,"line":2576},[74,11232,3409],{"class":80},[74,11234,1355],{"class":84},[74,11236,11237,11239,11241,11243],{"class":76,"line":2586},[74,11238,3417],{"class":80},[74,11240,3420],{"class":84},[74,11242,3423],{"class":104},[74,11244,125],{"class":84},[74,11246,11247,11249,11251,11253],{"class":76,"line":2591},[74,11248,3417],{"class":80},[74,11250,3433],{"class":84},[74,11252,3423],{"class":104},[74,11254,125],{"class":84},[74,11256,11257,11259],{"class":76,"line":2597},[74,11258,3417],{"class":80},[74,11260,3445],{"class":84},[74,11262,11263],{"class":76,"line":2619},[74,11264,1750],{"class":84},[74,11266,11267],{"class":76,"line":2668},[74,11268,11269],{"class":914},"    \u002F\u002F 设置 DPI 感知提示\n",[74,11271,11272,11274,11276,11278],{"class":76,"line":2673},[74,11273,6661],{"class":80},[74,11275,95],{"class":84},[74,11277,9707],{"class":80},[74,11279,1355],{"class":84},[74,11281,11282],{"class":76,"line":2679},[74,11283,1184],{"emptyLinePlaceholder":1183},[74,11285,11286],{"class":76,"line":2699},[74,11287,3456],{"class":914},[74,11289,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320],{"class":76,"line":2719},[74,11291,3462],{"class":80},[74,11293,593],{"class":88},[74,11295,3467],{"class":84},[74,11297,89],{"class":88},[74,11299,3472],{"class":80},[74,11301,101],{"class":84},[74,11303,2762],{"class":104},[74,11305,111],{"class":84},[74,11307,2774],{"class":104},[74,11309,111],{"class":84},[74,11311,3485],{"class":1121},[74,11313,111],{"class":84},[74,11315,3490],{"class":104},[74,11317,111],{"class":84},[74,11319,3490],{"class":104},[74,11321,125],{"class":84},[74,11323,11324,11326,11328,11330,11332],{"class":76,"line":2724},[74,11325,920],{"class":88},[74,11327,3504],{"class":84},[74,11329,932],{"class":88},[74,11331,3509],{"class":104},[74,11333,1252],{"class":84},[74,11335,11336,11338,11340,11342,11344,11346,11348],{"class":76,"line":2730},[74,11337,1386],{"class":80},[74,11339,2304],{"class":84},[74,11341,1392],{"class":88},[74,11343,3523],{"class":1121},[74,11345,1398],{"class":88},[74,11347,1312],{"class":80},[74,11349,1414],{"class":84},[74,11351,11352,11354],{"class":76,"line":2793},[74,11353,3535],{"class":80},[74,11355,1355],{"class":84},[74,11357,11358,11360,11362,11364],{"class":76,"line":2798},[74,11359,1340],{"class":88},[74,11361,1570],{"class":88},[74,11363,3547],{"class":104},[74,11365,570],{"class":84},[74,11367,11368],{"class":76,"line":2804},[74,11369,1430],{"class":84},[74,11371,11372],{"class":76,"line":2816},[74,11373,1184],{"emptyLinePlaceholder":1183},[74,11375,11376],{"class":76,"line":2843},[74,11377,1184],{"emptyLinePlaceholder":1183},[74,11379,11380],{"class":76,"line":2873},[74,11381,1750],{"class":84},[74,11383,11384,11386],{"class":76,"line":2907},[74,11385,3565],{"class":80},[74,11387,3568],{"class":84},[74,11389,11390,11392],{"class":76,"line":2940},[74,11391,3574],{"class":80},[74,11393,3577],{"class":84},[74,11395,11396],{"class":76,"line":2972},[74,11397,1750],{"class":84},[74,11399,11400],{"class":76,"line":2978},[74,11401,11402],{"class":914},"    \u002F\u002F 初始化 DPI 稳定器\n",[74,11404,11405,11407,11409],{"class":76,"line":2983},[74,11406,10377],{"class":84},[74,11408,9726],{"class":80},[74,11410,3568],{"class":84},[74,11412,11413],{"class":76,"line":3008},[74,11414,1184],{"emptyLinePlaceholder":1183},[74,11416,11417],{"class":76,"line":3031},[74,11418,3616],{"class":914},[74,11420,11421,11423,11425,11427,11429],{"class":76,"line":3057},[74,11422,920],{"class":88},[74,11424,923],{"class":84},[74,11426,1736],{"class":88},[74,11428,3628],{"class":80},[74,11430,3631],{"class":84},[74,11432,11433,11435,11437,11439,11441,11443,11445],{"class":76,"line":3080},[74,11434,1386],{"class":80},[74,11436,2304],{"class":84},[74,11438,1392],{"class":88},[74,11440,3643],{"class":1121},[74,11442,1398],{"class":88},[74,11444,1312],{"class":80},[74,11446,1414],{"class":84},[74,11448,11449,11451,11453,11455],{"class":76,"line":3097},[74,11450,1340],{"class":88},[74,11452,1570],{"class":88},[74,11454,3547],{"class":104},[74,11456,570],{"class":84},[74,11458,11459],{"class":76,"line":3116},[74,11460,1430],{"class":84},[74,11462,11463],{"class":76,"line":3131},[74,11464,1184],{"emptyLinePlaceholder":1183},[74,11466,11467],{"class":76,"line":3136},[74,11468,11469],{"class":914},"    \u002F\u002F 初始化 ImGui 管理器\n",[74,11471,11472,11475,11477],{"class":76,"line":3142},[74,11473,11474],{"class":84},"    imguiManager.",[74,11476,9726],{"class":80},[74,11478,3568],{"class":84},[74,11480,11481],{"class":76,"line":3161},[74,11482,1750],{"class":84},[74,11484,11485],{"class":76,"line":3177},[74,11486,11487],{"class":914},"    \u002F\u002F 注册窗口\n",[74,11489,11490,11492,11495,11497,11499],{"class":76,"line":3191},[74,11491,11474],{"class":84},[74,11493,11494],{"class":80},"registerWindow",[74,11496,101],{"class":84},[74,11498,10418],{"class":1121},[74,11500,11501],{"class":84},", []() {\n",[74,11503,11504,11507,11509,11512,11514,11517],{"class":76,"line":3213},[74,11505,11506],{"class":80},"        ImGui",[74,11508,95],{"class":84},[74,11510,11511],{"class":80},"Text",[74,11513,101],{"class":84},[74,11515,11516],{"class":1121},"\"Hello, World!\"",[74,11518,125],{"class":84},[74,11520,11521,11523,11525,11527,11529,11532,11535,11537,11540,11542,11544,11546,11549,11551,11554],{"class":76,"line":3223},[74,11522,11506],{"class":80},[74,11524,95],{"class":84},[74,11526,11511],{"class":80},[74,11528,101],{"class":84},[74,11530,11531],{"class":1121},"\"DPI 稳定器状态: ",[74,11533,11534],{"class":104},"%s",[74,11536,8935],{"class":1121},[74,11538,11539],{"class":84},", dpiStabilizer.",[74,11541,9871],{"class":80},[74,11543,1407],{"class":84},[74,11545,9025],{"class":88},[74,11547,11548],{"class":1121}," \"已捕获\"",[74,11550,9047],{"class":88},[74,11552,11553],{"class":1121}," \"已释放\"",[74,11555,125],{"class":84},[74,11557,11558,11560,11562,11564,11566,11569,11572,11574,11576,11579],{"class":76,"line":3228},[74,11559,11506],{"class":80},[74,11561,95],{"class":84},[74,11563,11511],{"class":80},[74,11565,101],{"class":84},[74,11567,11568],{"class":1121},"\"鼠标敏感度: ",[74,11570,11571],{"class":104},"%.3f",[74,11573,8935],{"class":1121},[74,11575,11539],{"class":84},[74,11577,11578],{"class":80},"getSensitivity",[74,11580,11581],{"class":84},"());\n",[74,11583,11584],{"class":76,"line":3240},[74,11585,5746],{"class":84},[74,11587,11588,11590,11592,11595,11597,11600,11602,11605],{"class":76,"line":3262},[74,11589,2250],{"class":88},[74,11591,923],{"class":84},[74,11593,11594],{"class":80},"ImGui",[74,11596,95],{"class":84},[74,11598,11599],{"class":80},"Button",[74,11601,101],{"class":84},[74,11603,11604],{"class":1121},"\"重置统计\"",[74,11606,11607],{"class":84},")) {\n",[74,11609,11610,11613,11615],{"class":76,"line":3271},[74,11611,11612],{"class":84},"            dpiStabilizer.",[74,11614,9846],{"class":80},[74,11616,1355],{"class":84},[74,11618,11619],{"class":76,"line":3276},[74,11620,2388],{"class":84},[74,11622,11623],{"class":76,"line":3281},[74,11624,5746],{"class":84},[74,11626,11627,11629,11631,11633,11635,11637],{"class":76,"line":3314},[74,11628,7351],{"class":88},[74,11630,1874],{"class":84},[74,11632,89],{"class":88},[74,11634,9765],{"class":84},[74,11636,11578],{"class":80},[74,11638,1355],{"class":84},[74,11640,11641,11643,11645,11647,11649,11652,11654,11657,11659,11661,11664,11666,11668,11670,11672,11674],{"class":76,"line":3346},[74,11642,2250],{"class":88},[74,11644,923],{"class":84},[74,11646,11594],{"class":80},[74,11648,95],{"class":84},[74,11650,11651],{"class":80},"SliderFloat",[74,11653,101],{"class":84},[74,11655,11656],{"class":1121},"\"鼠标敏感度\"",[74,11658,111],{"class":84},[74,11660,1377],{"class":88},[74,11662,11663],{"class":84},"sensitivity, ",[74,11665,8789],{"class":104},[74,11667,108],{"class":88},[74,11669,111],{"class":84},[74,11671,3717],{"class":104},[74,11673,108],{"class":88},[74,11675,11607],{"class":84},[74,11677,11678,11680,11682],{"class":76,"line":3351},[74,11679,11612],{"class":84},[74,11681,9821],{"class":80},[74,11683,11684],{"class":84},"(sensitivity);\n",[74,11686,11687],{"class":76,"line":3369},[74,11688,2388],{"class":84},[74,11690,11691],{"class":76,"line":3385},[74,11692,11693],{"class":84},"    });\n",[74,11695,11696],{"class":76,"line":3390},[74,11697,1750],{"class":84},[74,11699,11700,11702,11704,11706,11708],{"class":76,"line":3395},[74,11701,11474],{"class":84},[74,11703,11494],{"class":80},[74,11705,101],{"class":84},[74,11707,10450],{"class":1121},[74,11709,11501],{"class":84},[74,11711,11712,11715,11717,11720,11722,11725,11727,11730],{"class":76,"line":3400},[74,11713,11714],{"class":80},"        ImGuiIO",[74,11716,1377],{"class":88},[74,11718,11719],{"class":84}," io ",[74,11721,89],{"class":88},[74,11723,11724],{"class":80}," ImGui",[74,11726,95],{"class":84},[74,11728,11729],{"class":80},"GetIO",[74,11731,1355],{"class":84},[74,11733,11734,11736,11738,11740,11742,11745,11748,11750],{"class":76,"line":3406},[74,11735,11506],{"class":80},[74,11737,95],{"class":84},[74,11739,11511],{"class":80},[74,11741,101],{"class":84},[74,11743,11744],{"class":1121},"\"FPS: ",[74,11746,11747],{"class":104},"%.1f",[74,11749,8935],{"class":1121},[74,11751,11752],{"class":84},", io.Framerate);\n",[74,11754,11755,11757,11759,11761,11763,11766,11768,11771,11773,11776,11778,11780],{"class":76,"line":3414},[74,11756,11506],{"class":80},[74,11758,95],{"class":84},[74,11760,11511],{"class":80},[74,11762,101],{"class":84},[74,11764,11765],{"class":1121},"\"帧时间: ",[74,11767,11571],{"class":104},[74,11769,11770],{"class":1121}," ms\"",[74,11772,111],{"class":84},[74,11774,11775],{"class":104},"1000.0",[74,11777,108],{"class":88},[74,11779,2765],{"class":88},[74,11781,11782],{"class":84}," io.Framerate);\n",[74,11784,11785],{"class":76,"line":3428},[74,11786,11693],{"class":84},[74,11788,11789],{"class":76,"line":3440},[74,11790,1184],{"emptyLinePlaceholder":1183},[74,11792,11793],{"class":76,"line":3448},[74,11794,3676],{"class":914},[74,11796,11797,11799],{"class":76,"line":3453},[74,11798,3682],{"class":80},[74,11800,3685],{"class":84},[74,11802,11803],{"class":76,"line":3459},[74,11804,1184],{"emptyLinePlaceholder":1183},[74,11806,11807,11809,11811,11813],{"class":76,"line":3499},[74,11808,898],{"class":88},[74,11810,3698],{"class":84},[74,11812,89],{"class":88},[74,11814,1328],{"class":84},[74,11816,11817],{"class":76,"line":3514},[74,11818,3708],{"class":914},[74,11820,11821,11823,11825,11827,11829,11831,11833,11835,11837,11839,11841,11843,11845,11847,11849,11851,11853,11855],{"class":76,"line":3532},[74,11822,3714],{"class":88},[74,11824,3717],{"class":104},[74,11826,108],{"class":88},[74,11828,111],{"class":84},[74,11830,212],{"class":88},[74,11832,3717],{"class":104},[74,11834,108],{"class":88},[74,11836,111],{"class":84},[74,11838,212],{"class":88},[74,11840,3717],{"class":104},[74,11842,108],{"class":88},[74,11844,736],{"class":84},[74,11846,105],{"class":104},[74,11848,108],{"class":88},[74,11850,111],{"class":84},[74,11852,105],{"class":104},[74,11854,108],{"class":88},[74,11856,3750],{"class":84},[74,11858,11859,11861,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891],{"class":76,"line":3540},[74,11860,3756],{"class":104},[74,11862,108],{"class":88},[74,11864,111],{"class":84},[74,11866,212],{"class":88},[74,11868,3717],{"class":104},[74,11870,108],{"class":88},[74,11872,111],{"class":84},[74,11874,212],{"class":88},[74,11876,3717],{"class":104},[74,11878,108],{"class":88},[74,11880,736],{"class":84},[74,11882,272],{"class":104},[74,11884,108],{"class":88},[74,11886,111],{"class":84},[74,11888,105],{"class":104},[74,11890,108],{"class":88},[74,11892,3750],{"class":84},[74,11894,11895,11897,11899,11901,11903,11905,11907,11909,11911,11913,11915,11917,11919,11921,11923,11925],{"class":76,"line":3552},[74,11896,3756],{"class":104},[74,11898,108],{"class":88},[74,11900,736],{"class":84},[74,11902,3717],{"class":104},[74,11904,108],{"class":88},[74,11906,111],{"class":84},[74,11908,212],{"class":88},[74,11910,3717],{"class":104},[74,11912,108],{"class":88},[74,11914,736],{"class":84},[74,11916,272],{"class":104},[74,11918,108],{"class":88},[74,11920,111],{"class":84},[74,11922,272],{"class":104},[74,11924,108],{"class":88},[74,11926,3750],{"class":84},[74,11928,11929,11931,11933,11935,11937,11939,11941,11943,11945,11947,11949,11951,11953,11955,11957,11959],{"class":76,"line":3557},[74,11930,3756],{"class":104},[74,11932,108],{"class":88},[74,11934,736],{"class":84},[74,11936,3717],{"class":104},[74,11938,108],{"class":88},[74,11940,111],{"class":84},[74,11942,212],{"class":88},[74,11944,3717],{"class":104},[74,11946,108],{"class":88},[74,11948,736],{"class":84},[74,11950,272],{"class":104},[74,11952,108],{"class":88},[74,11954,111],{"class":84},[74,11956,272],{"class":104},[74,11958,108],{"class":88},[74,11960,3750],{"class":84},[74,11962,11963,11965,11967,11969,11971,11973,11975,11977,11979,11981,11983,11985,11987,11989,11991,11993,11995],{"class":76,"line":3562},[74,11964,3714],{"class":88},[74,11966,3717],{"class":104},[74,11968,108],{"class":88},[74,11970,736],{"class":84},[74,11972,3717],{"class":104},[74,11974,108],{"class":88},[74,11976,111],{"class":84},[74,11978,212],{"class":88},[74,11980,3717],{"class":104},[74,11982,108],{"class":88},[74,11984,736],{"class":84},[74,11986,105],{"class":104},[74,11988,108],{"class":88},[74,11990,111],{"class":84},[74,11992,272],{"class":104},[74,11994,108],{"class":88},[74,11996,3750],{"class":84},[74,11998,11999,12001,12003,12005,12007,12009,12011,12013,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033],{"class":76,"line":3571},[74,12000,3714],{"class":88},[74,12002,3717],{"class":104},[74,12004,108],{"class":88},[74,12006,111],{"class":84},[74,12008,212],{"class":88},[74,12010,3717],{"class":104},[74,12012,108],{"class":88},[74,12014,111],{"class":84},[74,12016,212],{"class":88},[74,12018,3717],{"class":104},[74,12020,108],{"class":88},[74,12022,736],{"class":84},[74,12024,105],{"class":104},[74,12026,108],{"class":88},[74,12028,111],{"class":84},[74,12030,105],{"class":104},[74,12032,108],{"class":88},[74,12034,3750],{"class":84},[74,12036,12037],{"class":76,"line":3580},[74,12038,1184],{"emptyLinePlaceholder":1183},[74,12040,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073],{"class":76,"line":3589},[74,12042,3714],{"class":88},[74,12044,3717],{"class":104},[74,12046,108],{"class":88},[74,12048,111],{"class":84},[74,12050,212],{"class":88},[74,12052,3717],{"class":104},[74,12054,108],{"class":88},[74,12056,736],{"class":84},[74,12058,3717],{"class":104},[74,12060,108],{"class":88},[74,12062,736],{"class":84},[74,12064,105],{"class":104},[74,12066,108],{"class":88},[74,12068,111],{"class":84},[74,12070,105],{"class":104},[74,12072,108],{"class":88},[74,12074,3750],{"class":84},[74,12076,12077,12079,12081,12083,12085,12087,12089,12091,12093,12095,12097,12099,12101,12103,12105,12107],{"class":76,"line":3594},[74,12078,3756],{"class":104},[74,12080,108],{"class":88},[74,12082,111],{"class":84},[74,12084,212],{"class":88},[74,12086,3717],{"class":104},[74,12088,108],{"class":88},[74,12090,736],{"class":84},[74,12092,3717],{"class":104},[74,12094,108],{"class":88},[74,12096,736],{"class":84},[74,12098,272],{"class":104},[74,12100,108],{"class":88},[74,12102,111],{"class":84},[74,12104,105],{"class":104},[74,12106,108],{"class":88},[74,12108,3750],{"class":84},[74,12110,12111,12113,12115,12117,12119,12121,12123,12125,12127,12129,12131,12133,12135,12137,12139],{"class":76,"line":3600},[74,12112,3756],{"class":104},[74,12114,108],{"class":88},[74,12116,736],{"class":84},[74,12118,3717],{"class":104},[74,12120,108],{"class":88},[74,12122,736],{"class":84},[74,12124,3717],{"class":104},[74,12126,108],{"class":88},[74,12128,736],{"class":84},[74,12130,272],{"class":104},[74,12132,108],{"class":88},[74,12134,111],{"class":84},[74,12136,272],{"class":104},[74,12138,108],{"class":88},[74,12140,3750],{"class":84},[74,12142,12143,12145,12147,12149,12151,12153,12155,12157,12159,12161,12163,12165,12167,12169,12171],{"class":76,"line":3608},[74,12144,3756],{"class":104},[74,12146,108],{"class":88},[74,12148,736],{"class":84},[74,12150,3717],{"class":104},[74,12152,108],{"class":88},[74,12154,736],{"class":84},[74,12156,3717],{"class":104},[74,12158,108],{"class":88},[74,12160,736],{"class":84},[74,12162,272],{"class":104},[74,12164,108],{"class":88},[74,12166,111],{"class":84},[74,12168,272],{"class":104},[74,12170,108],{"class":88},[74,12172,3750],{"class":84},[74,12174,12175,12177,12179,12181,12183,12185,12187,12189,12191,12193,12195,12197,12199,12201,12203,12205],{"class":76,"line":3613},[74,12176,3714],{"class":88},[74,12178,3717],{"class":104},[74,12180,108],{"class":88},[74,12182,736],{"class":84},[74,12184,3717],{"class":104},[74,12186,108],{"class":88},[74,12188,736],{"class":84},[74,12190,3717],{"class":104},[74,12192,108],{"class":88},[74,12194,736],{"class":84},[74,12196,105],{"class":104},[74,12198,108],{"class":88},[74,12200,111],{"class":84},[74,12202,272],{"class":104},[74,12204,108],{"class":88},[74,12206,3750],{"class":84},[74,12208,12209,12211,12213,12215,12217,12219,12221,12223,12225,12227,12229,12231,12233,12235,12237,12239,12241],{"class":76,"line":3619},[74,12210,3714],{"class":88},[74,12212,3717],{"class":104},[74,12214,108],{"class":88},[74,12216,111],{"class":84},[74,12218,212],{"class":88},[74,12220,3717],{"class":104},[74,12222,108],{"class":88},[74,12224,736],{"class":84},[74,12226,3717],{"class":104},[74,12228,108],{"class":88},[74,12230,736],{"class":84},[74,12232,105],{"class":104},[74,12234,108],{"class":88},[74,12236,111],{"class":84},[74,12238,105],{"class":104},[74,12240,108],{"class":88},[74,12242,3750],{"class":84},[74,12244,12245],{"class":76,"line":3634},[74,12246,1184],{"emptyLinePlaceholder":1183},[74,12248,12249,12251,12253,12255,12257,12259,12261,12263,12265,12267,12269,12271,12273,12275,12277,12279],{"class":76,"line":3652},[74,12250,3714],{"class":88},[74,12252,3717],{"class":104},[74,12254,108],{"class":88},[74,12256,736],{"class":84},[74,12258,3717],{"class":104},[74,12260,108],{"class":88},[74,12262,736],{"class":84},[74,12264,3717],{"class":104},[74,12266,108],{"class":88},[74,12268,736],{"class":84},[74,12270,272],{"class":104},[74,12272,108],{"class":88},[74,12274,111],{"class":84},[74,12276,105],{"class":104},[74,12278,108],{"class":88},[74,12280,3750],{"class":84},[74,12282,12283,12285,12287,12289,12291,12293,12295,12297,12299,12301,12303,12305,12307,12309,12311,12313,12315],{"class":76,"line":3663},[74,12284,3714],{"class":88},[74,12286,3717],{"class":104},[74,12288,108],{"class":88},[74,12290,736],{"class":84},[74,12292,3717],{"class":104},[74,12294,108],{"class":88},[74,12296,111],{"class":84},[74,12298,212],{"class":88},[74,12300,3717],{"class":104},[74,12302,108],{"class":88},[74,12304,736],{"class":84},[74,12306,272],{"class":104},[74,12308,108],{"class":88},[74,12310,111],{"class":84},[74,12312,272],{"class":104},[74,12314,108],{"class":88},[74,12316,3750],{"class":84},[74,12318,12319,12321,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341,12343,12345,12347,12349,12351,12353],{"class":76,"line":3668},[74,12320,3714],{"class":88},[74,12322,3717],{"class":104},[74,12324,108],{"class":88},[74,12326,111],{"class":84},[74,12328,212],{"class":88},[74,12330,3717],{"class":104},[74,12332,108],{"class":88},[74,12334,111],{"class":84},[74,12336,212],{"class":88},[74,12338,3717],{"class":104},[74,12340,108],{"class":88},[74,12342,736],{"class":84},[74,12344,105],{"class":104},[74,12346,108],{"class":88},[74,12348,111],{"class":84},[74,12350,272],{"class":104},[74,12352,108],{"class":88},[74,12354,3750],{"class":84},[74,12356,12357,12359,12361,12363,12365,12367,12369,12371,12373,12375,12377,12379,12381,12383,12385,12387,12389,12391],{"class":76,"line":3673},[74,12358,3714],{"class":88},[74,12360,3717],{"class":104},[74,12362,108],{"class":88},[74,12364,111],{"class":84},[74,12366,212],{"class":88},[74,12368,3717],{"class":104},[74,12370,108],{"class":88},[74,12372,111],{"class":84},[74,12374,212],{"class":88},[74,12376,3717],{"class":104},[74,12378,108],{"class":88},[74,12380,736],{"class":84},[74,12382,105],{"class":104},[74,12384,108],{"class":88},[74,12386,111],{"class":84},[74,12388,272],{"class":104},[74,12390,108],{"class":88},[74,12392,3750],{"class":84},[74,12394,12395,12397,12399,12401,12403,12405,12407,12409,12411,12413,12415,12417,12419,12421,12423,12425,12427],{"class":76,"line":3679},[74,12396,3714],{"class":88},[74,12398,3717],{"class":104},[74,12400,108],{"class":88},[74,12402,111],{"class":84},[74,12404,212],{"class":88},[74,12406,3717],{"class":104},[74,12408,108],{"class":88},[74,12410,736],{"class":84},[74,12412,3717],{"class":104},[74,12414,108],{"class":88},[74,12416,736],{"class":84},[74,12418,105],{"class":104},[74,12420,108],{"class":88},[74,12422,111],{"class":84},[74,12424,105],{"class":104},[74,12426,108],{"class":88},[74,12428,3750],{"class":84},[74,12430,12431,12433,12435,12437,12439,12441,12443,12445,12447,12449,12451,12453,12455,12457,12459,12461],{"class":76,"line":3688},[74,12432,3714],{"class":88},[74,12434,3717],{"class":104},[74,12436,108],{"class":88},[74,12438,736],{"class":84},[74,12440,3717],{"class":104},[74,12442,108],{"class":88},[74,12444,736],{"class":84},[74,12446,3717],{"class":104},[74,12448,108],{"class":88},[74,12450,736],{"class":84},[74,12452,272],{"class":104},[74,12454,108],{"class":88},[74,12456,111],{"class":84},[74,12458,105],{"class":104},[74,12460,108],{"class":88},[74,12462,3750],{"class":84},[74,12464,12465],{"class":76,"line":3693},[74,12466,1184],{"emptyLinePlaceholder":1183},[74,12468,12469,12471,12473,12475,12477,12479,12481,12483,12485,12487,12489,12491,12493,12495,12497],{"class":76,"line":3705},[74,12470,3756],{"class":104},[74,12472,108],{"class":88},[74,12474,736],{"class":84},[74,12476,3717],{"class":104},[74,12478,108],{"class":88},[74,12480,736],{"class":84},[74,12482,3717],{"class":104},[74,12484,108],{"class":88},[74,12486,736],{"class":84},[74,12488,272],{"class":104},[74,12490,108],{"class":88},[74,12492,111],{"class":84},[74,12494,105],{"class":104},[74,12496,108],{"class":88},[74,12498,3750],{"class":84},[74,12500,12501,12503,12505,12507,12509,12511,12513,12515,12517,12519,12521,12523,12525,12527,12529,12531],{"class":76,"line":3711},[74,12502,3756],{"class":104},[74,12504,108],{"class":88},[74,12506,736],{"class":84},[74,12508,3717],{"class":104},[74,12510,108],{"class":88},[74,12512,111],{"class":84},[74,12514,212],{"class":88},[74,12516,3717],{"class":104},[74,12518,108],{"class":88},[74,12520,736],{"class":84},[74,12522,272],{"class":104},[74,12524,108],{"class":88},[74,12526,111],{"class":84},[74,12528,272],{"class":104},[74,12530,108],{"class":88},[74,12532,3750],{"class":84},[74,12534,12535,12537,12539,12541,12543,12545,12547,12549,12551,12553,12555,12557,12559,12561,12563,12565,12567],{"class":76,"line":3753},[74,12536,3756],{"class":104},[74,12538,108],{"class":88},[74,12540,111],{"class":84},[74,12542,212],{"class":88},[74,12544,3717],{"class":104},[74,12546,108],{"class":88},[74,12548,111],{"class":84},[74,12550,212],{"class":88},[74,12552,3717],{"class":104},[74,12554,108],{"class":88},[74,12556,736],{"class":84},[74,12558,105],{"class":104},[74,12560,108],{"class":88},[74,12562,111],{"class":84},[74,12564,272],{"class":104},[74,12566,108],{"class":88},[74,12568,3750],{"class":84},[74,12570,12571,12573,12575,12577,12579,12581,12583,12585,12587,12589,12591,12593,12595,12597,12599,12601,12603],{"class":76,"line":3791},[74,12572,3756],{"class":104},[74,12574,108],{"class":88},[74,12576,111],{"class":84},[74,12578,212],{"class":88},[74,12580,3717],{"class":104},[74,12582,108],{"class":88},[74,12584,111],{"class":84},[74,12586,212],{"class":88},[74,12588,3717],{"class":104},[74,12590,108],{"class":88},[74,12592,736],{"class":84},[74,12594,105],{"class":104},[74,12596,108],{"class":88},[74,12598,111],{"class":84},[74,12600,272],{"class":104},[74,12602,108],{"class":88},[74,12604,3750],{"class":84},[74,12606,12607,12609,12611,12613,12615,12617,12619,12621,12623,12625,12627,12629,12631,12633,12635,12637],{"class":76,"line":3826},[74,12608,3756],{"class":104},[74,12610,108],{"class":88},[74,12612,111],{"class":84},[74,12614,212],{"class":88},[74,12616,3717],{"class":104},[74,12618,108],{"class":88},[74,12620,736],{"class":84},[74,12622,3717],{"class":104},[74,12624,108],{"class":88},[74,12626,736],{"class":84},[74,12628,105],{"class":104},[74,12630,108],{"class":88},[74,12632,111],{"class":84},[74,12634,105],{"class":104},[74,12636,108],{"class":88},[74,12638,3750],{"class":84},[74,12640,12641,12643,12645,12647,12649,12651,12653,12655,12657,12659,12661,12663,12665,12667,12669],{"class":76,"line":3861},[74,12642,3756],{"class":104},[74,12644,108],{"class":88},[74,12646,736],{"class":84},[74,12648,3717],{"class":104},[74,12650,108],{"class":88},[74,12652,736],{"class":84},[74,12654,3717],{"class":104},[74,12656,108],{"class":88},[74,12658,736],{"class":84},[74,12660,272],{"class":104},[74,12662,108],{"class":88},[74,12664,111],{"class":84},[74,12666,105],{"class":104},[74,12668,108],{"class":88},[74,12670,3750],{"class":84},[74,12672,12673],{"class":76,"line":3898},[74,12674,1184],{"emptyLinePlaceholder":1183},[74,12676,12677,12679,12681,12683,12685,12687,12689,12691,12693,12695,12697,12699,12701,12703,12705,12707,12709,12711],{"class":76,"line":3937},[74,12678,3714],{"class":88},[74,12680,3717],{"class":104},[74,12682,108],{"class":88},[74,12684,111],{"class":84},[74,12686,212],{"class":88},[74,12688,3717],{"class":104},[74,12690,108],{"class":88},[74,12692,111],{"class":84},[74,12694,212],{"class":88},[74,12696,3717],{"class":104},[74,12698,108],{"class":88},[74,12700,736],{"class":84},[74,12702,105],{"class":104},[74,12704,108],{"class":88},[74,12706,111],{"class":84},[74,12708,272],{"class":104},[74,12710,108],{"class":88},[74,12712,3750],{"class":84},[74,12714,12715,12717,12719,12721,12723,12725,12727,12729,12731,12733,12735,12737,12739,12741,12743,12745,12747],{"class":76,"line":3942},[74,12716,3756],{"class":104},[74,12718,108],{"class":88},[74,12720,111],{"class":84},[74,12722,212],{"class":88},[74,12724,3717],{"class":104},[74,12726,108],{"class":88},[74,12728,111],{"class":84},[74,12730,212],{"class":88},[74,12732,3717],{"class":104},[74,12734,108],{"class":88},[74,12736,736],{"class":84},[74,12738,272],{"class":104},[74,12740,108],{"class":88},[74,12742,111],{"class":84},[74,12744,272],{"class":104},[74,12746,108],{"class":88},[74,12748,3750],{"class":84},[74,12750,12751,12753,12755,12757,12759,12761,12763,12765,12767,12769,12771,12773,12775,12777,12779,12781],{"class":76,"line":3979},[74,12752,3756],{"class":104},[74,12754,108],{"class":88},[74,12756,111],{"class":84},[74,12758,212],{"class":88},[74,12760,3717],{"class":104},[74,12762,108],{"class":88},[74,12764,736],{"class":84},[74,12766,3717],{"class":104},[74,12768,108],{"class":88},[74,12770,736],{"class":84},[74,12772,272],{"class":104},[74,12774,108],{"class":88},[74,12776,111],{"class":84},[74,12778,105],{"class":104},[74,12780,108],{"class":88},[74,12782,3750],{"class":84},[74,12784,12785,12787,12789,12791,12793,12795,12797,12799,12801,12803,12805,12807,12809,12811,12813,12815],{"class":76,"line":4014},[74,12786,3756],{"class":104},[74,12788,108],{"class":88},[74,12790,111],{"class":84},[74,12792,212],{"class":88},[74,12794,3717],{"class":104},[74,12796,108],{"class":88},[74,12798,736],{"class":84},[74,12800,3717],{"class":104},[74,12802,108],{"class":88},[74,12804,736],{"class":84},[74,12806,272],{"class":104},[74,12808,108],{"class":88},[74,12810,111],{"class":84},[74,12812,105],{"class":104},[74,12814,108],{"class":88},[74,12816,3750],{"class":84},[74,12818,12819,12821,12823,12825,12827,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849,12851],{"class":76,"line":4047},[74,12820,3714],{"class":88},[74,12822,3717],{"class":104},[74,12824,108],{"class":88},[74,12826,111],{"class":84},[74,12828,212],{"class":88},[74,12830,3717],{"class":104},[74,12832,108],{"class":88},[74,12834,736],{"class":84},[74,12836,3717],{"class":104},[74,12838,108],{"class":88},[74,12840,736],{"class":84},[74,12842,105],{"class":104},[74,12844,108],{"class":88},[74,12846,111],{"class":84},[74,12848,105],{"class":104},[74,12850,108],{"class":88},[74,12852,3750],{"class":84},[74,12854,12855,12857,12859,12861,12863,12865,12867,12869,12871,12873,12875,12877,12879,12881,12883,12885,12887,12889],{"class":76,"line":4080},[74,12856,3714],{"class":88},[74,12858,3717],{"class":104},[74,12860,108],{"class":88},[74,12862,111],{"class":84},[74,12864,212],{"class":88},[74,12866,3717],{"class":104},[74,12868,108],{"class":88},[74,12870,111],{"class":84},[74,12872,212],{"class":88},[74,12874,3717],{"class":104},[74,12876,108],{"class":88},[74,12878,736],{"class":84},[74,12880,105],{"class":104},[74,12882,108],{"class":88},[74,12884,111],{"class":84},[74,12886,272],{"class":104},[74,12888,108],{"class":88},[74,12890,3750],{"class":84},[74,12892,12893],{"class":76,"line":4115},[74,12894,1184],{"emptyLinePlaceholder":1183},[74,12896,12897,12899,12901,12903,12905,12907,12909,12911,12913,12915,12917,12919,12921,12923,12925,12927,12929],{"class":76,"line":4152},[74,12898,3714],{"class":88},[74,12900,3717],{"class":104},[74,12902,108],{"class":88},[74,12904,736],{"class":84},[74,12906,3717],{"class":104},[74,12908,108],{"class":88},[74,12910,111],{"class":84},[74,12912,212],{"class":88},[74,12914,3717],{"class":104},[74,12916,108],{"class":88},[74,12918,736],{"class":84},[74,12920,105],{"class":104},[74,12922,108],{"class":88},[74,12924,111],{"class":84},[74,12926,272],{"class":104},[74,12928,108],{"class":88},[74,12930,3750],{"class":84},[74,12932,12933,12935,12937,12939,12941,12943,12945,12947,12949,12951,12953,12955,12957,12959,12961,12963],{"class":76,"line":4157},[74,12934,3756],{"class":104},[74,12936,108],{"class":88},[74,12938,736],{"class":84},[74,12940,3717],{"class":104},[74,12942,108],{"class":88},[74,12944,111],{"class":84},[74,12946,212],{"class":88},[74,12948,3717],{"class":104},[74,12950,108],{"class":88},[74,12952,736],{"class":84},[74,12954,272],{"class":104},[74,12956,108],{"class":88},[74,12958,111],{"class":84},[74,12960,272],{"class":104},[74,12962,108],{"class":88},[74,12964,3750],{"class":84},[74,12966,12967,12969,12971,12973,12975,12977,12979,12981,12983,12985,12987,12989,12991,12993,12995],{"class":76,"line":4192},[74,12968,3756],{"class":104},[74,12970,108],{"class":88},[74,12972,736],{"class":84},[74,12974,3717],{"class":104},[74,12976,108],{"class":88},[74,12978,736],{"class":84},[74,12980,3717],{"class":104},[74,12982,108],{"class":88},[74,12984,736],{"class":84},[74,12986,272],{"class":104},[74,12988,108],{"class":88},[74,12990,111],{"class":84},[74,12992,105],{"class":104},[74,12994,108],{"class":88},[74,12996,3750],{"class":84},[74,12998,12999,13001,13003,13005,13007,13009,13011,13013,13015,13017,13019,13021,13023,13025,13027],{"class":76,"line":4229},[74,13000,3756],{"class":104},[74,13002,108],{"class":88},[74,13004,736],{"class":84},[74,13006,3717],{"class":104},[74,13008,108],{"class":88},[74,13010,736],{"class":84},[74,13012,3717],{"class":104},[74,13014,108],{"class":88},[74,13016,736],{"class":84},[74,13018,272],{"class":104},[74,13020,108],{"class":88},[74,13022,111],{"class":84},[74,13024,105],{"class":104},[74,13026,108],{"class":88},[74,13028,3750],{"class":84},[74,13030,13031,13033,13035,13037,13039,13041,13043,13045,13047,13049,13051,13053,13055,13057,13059,13061],{"class":76,"line":4268},[74,13032,3714],{"class":88},[74,13034,3717],{"class":104},[74,13036,108],{"class":88},[74,13038,736],{"class":84},[74,13040,3717],{"class":104},[74,13042,108],{"class":88},[74,13044,736],{"class":84},[74,13046,3717],{"class":104},[74,13048,108],{"class":88},[74,13050,736],{"class":84},[74,13052,105],{"class":104},[74,13054,108],{"class":88},[74,13056,111],{"class":84},[74,13058,105],{"class":104},[74,13060,108],{"class":88},[74,13062,3750],{"class":84},[74,13064,13065,13067,13069,13071,13073,13075,13077,13079,13081,13083,13085,13087,13089,13091,13093,13095],{"class":76,"line":4307},[74,13066,3714],{"class":88},[74,13068,3717],{"class":104},[74,13070,108],{"class":88},[74,13072,736],{"class":84},[74,13074,3717],{"class":104},[74,13076,108],{"class":88},[74,13078,111],{"class":84},[74,13080,212],{"class":88},[74,13082,3717],{"class":104},[74,13084,108],{"class":88},[74,13086,736],{"class":84},[74,13088,105],{"class":104},[74,13090,108],{"class":88},[74,13092,111],{"class":84},[74,13094,272],{"class":104},[74,13096,5032],{"class":88},[74,13098,13099],{"class":76,"line":4344},[74,13100,5038],{"class":84},[74,13102,13103],{"class":76,"line":4379},[74,13104,1750],{"class":84},[74,13106,13107],{"class":76,"line":4384},[74,13108,5049],{"class":914},[74,13110,13111],{"class":76,"line":4417},[74,13112,1184],{"emptyLinePlaceholder":1183},[74,13114,13115],{"class":76,"line":4452},[74,13116,5060],{"class":914},[74,13118,13119,13121,13123],{"class":76,"line":4489},[74,13120,5066],{"class":88},[74,13122,5069],{"class":88},[74,13124,5072],{"class":84},[74,13126,13127,13129,13131],{"class":76,"line":4526},[74,13128,5066],{"class":88},[74,13130,5069],{"class":88},[74,13132,5082],{"class":84},[74,13134,13135,13137,13139,13141,13143,13145,13147],{"class":76,"line":4561},[74,13136,5088],{"class":80},[74,13138,101],{"class":84},[74,13140,3547],{"class":104},[74,13142,111],{"class":84},[74,13144,1377],{"class":88},[74,13146,5099],{"class":84},[74,13148,5102],{"class":914},[74,13150,13151,13153,13155,13157,13159,13161,13163],{"class":76,"line":4594},[74,13152,5088],{"class":80},[74,13154,101],{"class":84},[74,13156,3547],{"class":104},[74,13158,111],{"class":84},[74,13160,1377],{"class":88},[74,13162,5118],{"class":84},[74,13164,5102],{"class":914},[74,13166,13167],{"class":76,"line":4599},[74,13168,1750],{"class":84},[74,13170,13171],{"class":76,"line":4638},[74,13172,5131],{"class":914},[74,13174,13175,13177],{"class":76,"line":4675},[74,13176,5137],{"class":80},[74,13178,5140],{"class":84},[74,13180,13181,13183,13185],{"class":76,"line":4710},[74,13182,5146],{"class":80},[74,13184,5149],{"class":84},[74,13186,5152],{"class":914},[74,13188,13189,13191,13193],{"class":76,"line":4745},[74,13190,5158],{"class":80},[74,13192,5161],{"class":84},[74,13194,5164],{"class":914},[74,13196,13197,13199,13201],{"class":76,"line":4782},[74,13198,5158],{"class":80},[74,13200,5172],{"class":84},[74,13202,5164],{"class":914},[74,13204,13205,13207,13209],{"class":76,"line":4821},[74,13206,5158],{"class":80},[74,13208,5182],{"class":84},[74,13210,5185],{"class":914},[74,13212,13213,13215,13217],{"class":76,"line":4826},[74,13214,5158],{"class":80},[74,13216,5193],{"class":84},[74,13218,5185],{"class":914},[74,13220,13221,13223,13225,13227,13229,13231,13233],{"class":76,"line":4863},[74,13222,5201],{"class":80},[74,13224,5204],{"class":84},[74,13226,1263],{"class":104},[74,13228,5209],{"class":84},[74,13230,1263],{"class":104},[74,13232,5214],{"class":84},[74,13234,5217],{"class":914},[74,13236,13237,13239,13241],{"class":76,"line":4898},[74,13238,5223],{"class":80},[74,13240,5226],{"class":84},[74,13242,5229],{"class":914},[74,13244,13245],{"class":76,"line":4931},[74,13246,1184],{"emptyLinePlaceholder":1183},[74,13248,13249],{"class":76,"line":4964},[74,13250,5240],{"class":914},[74,13252,13253,13255],{"class":76,"line":4999},[74,13254,5137],{"class":80},[74,13256,5248],{"class":84},[74,13258,13259,13261,13263],{"class":76,"line":5035},[74,13260,5146],{"class":80},[74,13262,5256],{"class":84},[74,13264,5152],{"class":914},[74,13266,13267,13269,13271],{"class":76,"line":5041},[74,13268,5158],{"class":80},[74,13270,5161],{"class":84},[74,13272,5164],{"class":914},[74,13274,13275,13277,13279],{"class":76,"line":5046},[74,13276,5158],{"class":80},[74,13278,5172],{"class":84},[74,13280,5277],{"class":914},[74,13282,13283,13285,13287],{"class":76,"line":5052},[74,13284,5158],{"class":80},[74,13286,5182],{"class":84},[74,13288,5185],{"class":914},[74,13290,13291,13293,13295],{"class":76,"line":5057},[74,13292,5158],{"class":80},[74,13294,5193],{"class":84},[74,13296,5185],{"class":914},[74,13298,13299,13301,13303,13305,13307,13309,13311],{"class":76,"line":5063},[74,13300,5201],{"class":80},[74,13302,5204],{"class":84},[74,13304,1263],{"class":104},[74,13306,5307],{"class":84},[74,13308,1263],{"class":104},[74,13310,5312],{"class":84},[74,13312,5217],{"class":914},[74,13314,13315,13317,13319],{"class":76,"line":5075},[74,13316,5223],{"class":80},[74,13318,5226],{"class":84},[74,13320,5229],{"class":914},[74,13322,13323],{"class":76,"line":5085},[74,13324,1184],{"emptyLinePlaceholder":1183},[74,13326,13327],{"class":76,"line":5105},[74,13328,1184],{"emptyLinePlaceholder":1183},[74,13330,13331],{"class":76,"line":5123},[74,13332,5339],{"class":914},[74,13334,13335,13337,13339],{"class":76,"line":5128},[74,13336,5066],{"class":88},[74,13338,5069],{"class":88},[74,13340,5349],{"class":84},[74,13342,13343,13345,13347,13349,13351,13353],{"class":76,"line":5134},[74,13344,5355],{"class":80},[74,13346,101],{"class":84},[74,13348,3547],{"class":104},[74,13350,111],{"class":84},[74,13352,1377],{"class":88},[74,13354,5366],{"class":84},[74,13356,13357,13359,13361],{"class":76,"line":5143},[74,13358,5372],{"class":80},[74,13360,5375],{"class":84},[74,13362,5378],{"class":914},[74,13364,13365],{"class":76,"line":5155},[74,13366,1184],{"emptyLinePlaceholder":1183},[74,13368,13369],{"class":76,"line":5167},[74,13370,5389],{"class":914},[74,13372,13373,13375,13377],{"class":76,"line":5177},[74,13374,5066],{"class":88},[74,13376,5069],{"class":88},[74,13378,5399],{"class":84},[74,13380,13381,13383,13385,13387,13389,13391],{"class":76,"line":5188},[74,13382,5405],{"class":80},[74,13384,101],{"class":84},[74,13386,3547],{"class":104},[74,13388,111],{"class":84},[74,13390,1377],{"class":88},[74,13392,5416],{"class":84},[74,13394,13395,13397,13399],{"class":76,"line":5198},[74,13396,5422],{"class":80},[74,13398,5425],{"class":84},[74,13400,5428],{"class":914},[74,13402,13403,13405,13407,13409],{"class":76,"line":5220},[74,13404,5434],{"class":80},[74,13406,5437],{"class":84},[74,13408,5440],{"class":88},[74,13410,5443],{"class":84},[74,13412,13413],{"class":76,"line":5232},[74,13414,1184],{"emptyLinePlaceholder":1183},[74,13416,13417,13419],{"class":76,"line":5237},[74,13418,5454],{"class":88},[74,13420,5457],{"class":84},[74,13422,13423,13425,13427,13429],{"class":76,"line":5243},[74,13424,5463],{"class":80},[74,13426,5466],{"class":84},[74,13428,1377],{"class":88},[74,13430,5471],{"class":84},[74,13432,13433,13435,13437,13439,13441,13443,13445,13447,13449],{"class":76,"line":5251},[74,13434,3145],{"class":80},[74,13436,2304],{"class":84},[74,13438,1392],{"class":88},[74,13440,5483],{"class":1121},[74,13442,1398],{"class":88},[74,13444,5488],{"class":84},[74,13446,1392],{"class":88},[74,13448,1312],{"class":80},[74,13450,1414],{"class":84},[74,13452,13453],{"class":76,"line":5261},[74,13454,1184],{"emptyLinePlaceholder":1183},[74,13456,13457],{"class":76,"line":5270},[74,13458,5505],{"class":914},[74,13460,13461,13463,13465,13467,13469,13471,13473,13475,13477,13479,13481,13483,13485,13487,13489,13491],{"class":76,"line":5280},[74,13462,5511],{"class":80},[74,13464,101],{"class":84},[74,13466,1263],{"class":104},[74,13468,111],{"class":84},[74,13470,3423],{"class":104},[74,13472,5522],{"class":84},[74,13474,5525],{"class":104},[74,13476,876],{"class":88},[74,13478,5530],{"class":88},[74,13480,101],{"class":84},[74,13482,557],{"class":88},[74,13484,2754],{"class":84},[74,13486,5539],{"class":88},[74,13488,2759],{"class":84},[74,13490,1263],{"class":104},[74,13492,125],{"class":84},[74,13494,13495,13497,13499,13501,13503],{"class":76,"line":5289},[74,13496,5551],{"class":80},[74,13498,101],{"class":84},[74,13500,1263],{"class":104},[74,13502,1510],{"class":84},[74,13504,5560],{"class":914},[74,13506,13507],{"class":76,"line":5298},[74,13508,1750],{"class":84},[74,13510,13511],{"class":76,"line":5317},[74,13512,5571],{"class":914},[74,13514,13515,13517,13519,13521,13523,13525,13527,13529,13531,13533,13535,13537,13539,13541,13543,13545,13547,13549,13551,13553],{"class":76,"line":5326},[74,13516,5511],{"class":80},[74,13518,101],{"class":84},[74,13520,5581],{"class":104},[74,13522,111],{"class":84},[74,13524,5581],{"class":104},[74,13526,5522],{"class":84},[74,13528,5525],{"class":104},[74,13530,876],{"class":88},[74,13532,5530],{"class":88},[74,13534,101],{"class":84},[74,13536,557],{"class":88},[74,13538,2754],{"class":84},[74,13540,5539],{"class":88},[74,13542,5604],{"class":84},[74,13544,3423],{"class":104},[74,13546,876],{"class":88},[74,13548,5530],{"class":88},[74,13550,101],{"class":84},[74,13552,557],{"class":88},[74,13554,5617],{"class":84},[74,13556,13557,13559,13561,13563],{"class":76,"line":5331},[74,13558,5551],{"class":80},[74,13560,101],{"class":84},[74,13562,5581],{"class":104},[74,13564,125],{"class":84},[74,13566,13567],{"class":76,"line":5336},[74,13568,1184],{"emptyLinePlaceholder":1183},[74,13570,13571],{"class":76,"line":5342},[74,13572,5639],{"class":914},[74,13574,13575,13577,13579,13581,13583,13585,13587],{"class":76,"line":5352},[74,13576,5645],{"class":80},[74,13578,5648],{"class":80},[74,13580,101],{"class":84},[74,13582,5653],{"class":1121},[74,13584,111],{"class":84},[74,13586,5658],{"class":1121},[74,13588,125],{"class":84},[74,13590,13591],{"class":76,"line":5369},[74,13592,1184],{"emptyLinePlaceholder":1183},[74,13594,13595],{"class":76,"line":5381},[74,13596,5671],{"class":914},[74,13598,13599,13601,13603,13605,13607],{"class":76,"line":5386},[74,13600,5677],{"class":88},[74,13602,923],{"class":84},[74,13604,1736],{"class":88},[74,13606,5684],{"class":80},[74,13608,5687],{"class":84},[74,13610,13611],{"class":76,"line":5392},[74,13612,5693],{"class":914},[74,13614,13615,13617],{"class":76,"line":5402},[74,13616,5699],{"class":80},[74,13618,3568],{"class":84},[74,13620,13621,13623],{"class":76,"line":5419},[74,13622,5707],{"class":80},[74,13624,1355],{"class":84},[74,13626,13627],{"class":76,"line":5431},[74,13628,1184],{"emptyLinePlaceholder":1183},[74,13630,13631],{"class":76,"line":5446},[74,13632,13633],{"class":914},"        \u002F\u002F 从 DPI 稳定器获取 view 矩阵\n",[74,13635,13636,13639,13641,13643,13645,13647],{"class":76,"line":5451},[74,13637,13638],{"class":80},"        mat4",[74,13640,2684],{"class":84},[74,13642,89],{"class":88},[74,13644,9765],{"class":84},[74,13646,9768],{"class":80},[74,13648,1355],{"class":84},[74,13650,13651],{"class":76,"line":5460},[74,13652,5746],{"class":84},[74,13654,13655,13657,13660,13662,13665],{"class":76,"line":5474},[74,13656,7351],{"class":88},[74,13658,13659],{"class":84}," currentFrame ",[74,13661,89],{"class":88},[74,13663,13664],{"class":80}," glfwGetTime",[74,13666,1355],{"class":84},[74,13668,13669,13672,13674,13676,13678],{"class":76,"line":5497},[74,13670,13671],{"class":84},"        deltaTime ",[74,13673,89],{"class":88},[74,13675,13659],{"class":84},[74,13677,212],{"class":88},[74,13679,13680],{"class":84}," lastFrame;\n",[74,13682,13683,13686,13688],{"class":76,"line":5502},[74,13684,13685],{"class":84},"        lastFrame ",[74,13687,89],{"class":88},[74,13689,13690],{"class":84}," currentFrame;\n",[74,13692,13693],{"class":76,"line":5508},[74,13694,5752],{"class":914},[74,13696,13697,13699,13701,13703,13705,13707,13709,13711,13713,13715,13717,13719,13721,13723],{"class":76,"line":5548},[74,13698,5758],{"class":80},[74,13700,101],{"class":84},[74,13702,5763],{"class":104},[74,13704,108],{"class":88},[74,13706,111],{"class":84},[74,13708,5770],{"class":104},[74,13710,108],{"class":88},[74,13712,111],{"class":84},[74,13714,5770],{"class":104},[74,13716,108],{"class":88},[74,13718,111],{"class":84},[74,13720,272],{"class":104},[74,13722,108],{"class":88},[74,13724,125],{"class":84},[74,13726,13727,13729,13731,13733],{"class":76,"line":5563},[74,13728,5792],{"class":80},[74,13730,5795],{"class":84},[74,13732,5798],{"class":88},[74,13734,5801],{"class":84},[74,13736,13737],{"class":76,"line":5568},[74,13738,5746],{"class":84},[74,13740,13741],{"class":76,"line":5574},[74,13742,5812],{"class":914},[74,13744,13745,13747,13749],{"class":76,"line":5620},[74,13746,5818],{"class":84},[74,13748,5821],{"class":80},[74,13750,1355],{"class":84},[74,13752,13753],{"class":76,"line":5631},[74,13754,1184],{"emptyLinePlaceholder":1183},[74,13756,13757],{"class":76,"line":5636},[74,13758,5834],{"class":914},[74,13760,13761,13763,13765,13767,13769],{"class":76,"line":5642},[74,13762,5818],{"class":84},[74,13764,5842],{"class":80},[74,13766,101],{"class":84},[74,13768,5847],{"class":1121},[74,13770,5850],{"class":84},[74,13772,13773,13775,13777,13779,13781],{"class":76,"line":5663},[74,13774,5818],{"class":84},[74,13776,5842],{"class":80},[74,13778,101],{"class":84},[74,13780,5862],{"class":1121},[74,13782,5865],{"class":84},[74,13784,13785,13787,13789,13791,13793],{"class":76,"line":5668},[74,13786,5818],{"class":84},[74,13788,5842],{"class":80},[74,13790,101],{"class":84},[74,13792,5877],{"class":1121},[74,13794,5880],{"class":84},[74,13796,13797],{"class":76,"line":5674},[74,13798,5746],{"class":84},[74,13800,13801,13803,13805,13807,13809,13811,13813],{"class":76,"line":5690},[74,13802,5818],{"class":84},[74,13804,5893],{"class":80},[74,13806,101],{"class":84},[74,13808,5898],{"class":1121},[74,13810,111],{"class":84},[74,13812,1263],{"class":104},[74,13814,125],{"class":84},[74,13816,13817,13819,13821,13823,13825,13827,13829],{"class":76,"line":5696},[74,13818,5818],{"class":84},[74,13820,5893],{"class":80},[74,13822,101],{"class":84},[74,13824,5916],{"class":1121},[74,13826,111],{"class":84},[74,13828,3547],{"class":104},[74,13830,125],{"class":84},[74,13832,13833],{"class":76,"line":5704},[74,13834,5746],{"class":84},[74,13836,13837,13839],{"class":76,"line":5712},[74,13838,5933],{"class":80},[74,13840,5936],{"class":84},[74,13842,13843],{"class":76,"line":5717},[74,13844,5746],{"class":84},[74,13846,13847],{"class":76,"line":5723},[74,13848,5947],{"class":914},[74,13850,13851,13853,13855,13857,13859,13861,13863,13865,13867,13869,13871,13873,13875],{"class":76,"line":5743},[74,13852,5953],{"class":88},[74,13854,101],{"class":84},[74,13856,5958],{"class":88},[74,13858,5069],{"class":88},[74,13860,5963],{"class":84},[74,13862,89],{"class":88},[74,13864,5968],{"class":104},[74,13866,5971],{"class":84},[74,13868,1985],{"class":88},[74,13870,5976],{"class":104},[74,13872,5979],{"class":84},[74,13874,5982],{"class":88},[74,13876,1252],{"class":84},[74,13878,13879,13881,13883,13885,13887,13889,13891,13893,13895,13897,13899,13901],{"class":76,"line":5749},[74,13880,5990],{"class":80},[74,13882,95],{"class":84},[74,13884,5995],{"class":80},[74,13886,5998],{"class":84},[74,13888,89],{"class":88},[74,13890,92],{"class":80},[74,13892,95],{"class":84},[74,13894,5995],{"class":80},[74,13896,101],{"class":84},[74,13898,272],{"class":104},[74,13900,108],{"class":88},[74,13902,125],{"class":84},[74,13904,13905,13907,13909,13911,13913,13915],{"class":76,"line":5755},[74,13906,6020],{"class":84},[74,13908,89],{"class":88},[74,13910,92],{"class":80},[74,13912,95],{"class":84},[74,13914,6029],{"class":80},[74,13916,6032],{"class":84},[74,13918,13919,13921,13923,13925,13927,13929,13931],{"class":76,"line":5789},[74,13920,6038],{"class":88},[74,13922,6041],{"class":84},[74,13924,89],{"class":88},[74,13926,6046],{"class":104},[74,13928,108],{"class":88},[74,13930,876],{"class":88},[74,13932,6053],{"class":84},[74,13934,13935,13937,13939,13941,13943,13945,13947,13949,13951,13953,13955,13957,13959,13961,13963,13965,13967,13969,13971,13973,13975,13977,13979],{"class":76,"line":5804},[74,13936,6020],{"class":84},[74,13938,89],{"class":88},[74,13940,92],{"class":80},[74,13942,95],{"class":84},[74,13944,6067],{"class":80},[74,13946,6070],{"class":84},[74,13948,81],{"class":80},[74,13950,95],{"class":84},[74,13952,2044],{"class":80},[74,13954,6079],{"class":84},[74,13956,81],{"class":80},[74,13958,95],{"class":84},[74,13960,98],{"class":80},[74,13962,101],{"class":84},[74,13964,272],{"class":104},[74,13966,108],{"class":88},[74,13968,111],{"class":84},[74,13970,5770],{"class":104},[74,13972,108],{"class":88},[74,13974,111],{"class":84},[74,13976,3717],{"class":104},[74,13978,108],{"class":88},[74,13980,532],{"class":84},[74,13982,13983,13985,13987,13989,13991],{"class":76,"line":5809},[74,13984,6111],{"class":84},[74,13986,5842],{"class":80},[74,13988,101],{"class":84},[74,13990,5847],{"class":1121},[74,13992,6120],{"class":84},[74,13994,13995],{"class":76,"line":5815},[74,13996,1184],{"emptyLinePlaceholder":1183},[74,13998,13999,14001,14003,14005,14007,14009],{"class":76,"line":5826},[74,14000,6131],{"class":80},[74,14002,6134],{"class":84},[74,14004,1263],{"class":104},[74,14006,111],{"class":84},[74,14008,6141],{"class":104},[74,14010,125],{"class":84},[74,14012,14013],{"class":76,"line":5831},[74,14014,2388],{"class":84},[74,14016,14017],{"class":76,"line":5837},[74,14018,5746],{"class":84},[74,14020,14021],{"class":76,"line":5853},[74,14022,14023],{"class":914},"        \u002F\u002F 使用 ImGui 管理器渲染所有窗口\n",[74,14025,14026,14028,14031],{"class":76,"line":5868},[74,14027,10410],{"class":84},[74,14029,14030],{"class":80},"render",[74,14032,1355],{"class":84},[74,14034,14035],{"class":76,"line":5883},[74,14036,1184],{"emptyLinePlaceholder":1183},[74,14038,14039],{"class":76,"line":5888},[74,14040,6159],{"class":914},[74,14042,14043,14045],{"class":76,"line":5907},[74,14044,6165],{"class":80},[74,14046,3568],{"class":84},[74,14048,14049],{"class":76,"line":5925},[74,14050,1430],{"class":84},[74,14052,14053],{"class":76,"line":5930},[74,14054,1184],{"emptyLinePlaceholder":1183},[74,14056,14057],{"class":76,"line":5939},[74,14058,14059],{"class":914},"    \u002F\u002F 清理 ImGui 管理器\n",[74,14061,14062,14064,14067],{"class":76,"line":5944},[74,14063,11474],{"class":84},[74,14065,14066],{"class":80},"shutdown",[74,14068,1355],{"class":84},[74,14070,14071],{"class":76,"line":5950},[74,14072,1184],{"emptyLinePlaceholder":1183},[74,14074,14075],{"class":76,"line":5987},[74,14076,6183],{"class":914},[74,14078,14079,14081,14083,14085,14087,14089],{"class":76,"line":6017},[74,14080,6189],{"class":80},[74,14082,101],{"class":84},[74,14084,3547],{"class":104},[74,14086,111],{"class":84},[74,14088,1377],{"class":88},[74,14090,5366],{"class":84},[74,14092,14093,14095,14097,14099,14101,14103],{"class":76,"line":6035},[74,14094,6205],{"class":80},[74,14096,101],{"class":84},[74,14098,3547],{"class":104},[74,14100,111],{"class":84},[74,14102,1377],{"class":88},[74,14104,5416],{"class":84},[74,14106,14107,14109,14111,14113,14115,14117],{"class":76,"line":6056},[74,14108,6221],{"class":80},[74,14110,101],{"class":84},[74,14112,3547],{"class":104},[74,14114,111],{"class":84},[74,14116,1377],{"class":88},[74,14118,6232],{"class":84},[74,14120,14121,14123,14125,14127,14129,14131],{"class":76,"line":6108},[74,14122,6221],{"class":80},[74,14124,101],{"class":84},[74,14126,3547],{"class":104},[74,14128,111],{"class":84},[74,14130,1377],{"class":88},[74,14132,6248],{"class":84},[74,14134,14135,14137],{"class":76,"line":6123},[74,14136,6254],{"class":80},[74,14138,1355],{"class":84},[74,14140,14141,14143,14145],{"class":76,"line":6128},[74,14142,6262],{"class":88},[74,14144,5968],{"class":104},[74,14146,570],{"class":84},[74,14148,14149],{"class":76,"line":6146},[74,14150,1075],{"class":84},[10,14152,14154],{"className":68,"code":14153,"language":70,"meta":19,"style":19},"#pragma once\n\n#include \u003Cimgui.h>\n#include \u003Cimgui_impl_glfw.h>\n#include \u003Cimgui_impl_opengl3.h>\n#include \u003CGLFW\u002Fglfw3.h>\n#include \u003Cstring>\n#include \u003Cfunctional>\n#include \u003Cunordered_map>\n#include \u003Ciostream>\n\n\u002F**\n * @brief ImGui 窗口管理器类 - 封装 ImGui 的初始化和窗口管理\n * \n * 功能特性：\n * - 自动初始化和清理 ImGui\n * - 窗口注册和管理\n * - 统一的渲染循环\n * - 可扩展的窗口系统\n *\u002F\nclass ImGuiManager {\nprivate:\n    GLFWwindow* window;\n    bool initialized;\n    \n    \u002F\u002F 窗口注册系统\n    struct WindowInfo {\n        std::string name;\n        std::function\u003Cvoid()> renderFunc;\n        bool visible;\n    };\n    \n    std::unordered_map\u003Cstd::string, WindowInfo> windows;\n    \n    \u002F\u002F 字体管理\n    std::unordered_map\u003Cstd::string, ImFont*> fonts;\n    std::string defaultFont;\n\npublic:\n    \u002F**\n     * @brief 构造函数\n     *\u002F\n    ImGuiManager() : window(nullptr), initialized(false) {}\n\n    \u002F**\n     * @brief 析构函数\n     *\u002F\n    ~ImGuiManager() {\n        shutdown();\n    }\n\n    \u002F**\n     * @brief 初始化 ImGui 管理器\n     * @param glfwWindow GLFW 窗口指针\n     * @return 是否初始化成功\n     *\u002F\n    bool initialize(GLFWwindow* glfwWindow) {\n        if (initialized) return true;\n        \n        window = glfwWindow;\n        \n        \u002F\u002F 初始化 ImGui\n        IMGUI_CHECKVERSION();\n        ImGui::CreateContext();\n        ImGuiIO& io = ImGui::GetIO(); (void)io;\n        io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;\n        io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;\n\n        \u002F\u002F 设置 ImGui 样式\n        ImGui::StyleColorsDark();\n\n        \u002F\u002F 初始化 ImGui 平台\u002F渲染器绑定\n        ImGui_ImplGlfw_InitForOpenGL(window, true);\n        ImGui_ImplOpenGL3_Init(\"#version 330\");\n        \n        \u002F\u002F 加载默认字体\n        loadDefaultFonts();\n        \n        initialized = true;\n        std::cout \u003C\u003C \"ImGui 管理器已初始化\" \u003C\u003C std::endl;\n        return true;\n    }\n\n    \u002F**\n     * @brief 注册一个窗口\n     * @param name 窗口名称\n     * @param renderFunc 渲染函数\n     * @param visible 是否默认可见\n     *\u002F\n    void registerWindow(const std::string& name, std::function\u003Cvoid()> renderFunc, bool visible = true) {\n        windows[name] = {name, renderFunc, visible};\n    }\n\n    \u002F**\n     * @brief 切换窗口可见性\n     * @param name 窗口名称\n     *\u002F\n    void toggleWindow(const std::string& name) {\n        auto it = windows.find(name);\n        if (it != windows.end()) {\n            it->second.visible = !it->second.visible;\n        }\n    }\n\n    \u002F**\n     * @brief 设置窗口可见性\n     * @param name 窗口名称\n     * @param visible 是否可见\n     *\u002F\n    void setWindowVisible(const std::string& name, bool visible) {\n        auto it = windows.find(name);\n        if (it != windows.end()) {\n            it->second.visible = visible;\n        }\n    }\n\n    \u002F**\n     * @brief 开始新帧\n     *\u002F\n    void beginFrame() {\n        if (!initialized) return;\n        \n        ImGui_ImplOpenGL3_NewFrame();\n        ImGui_ImplGlfw_NewFrame();\n        ImGui::NewFrame();\n    }\n\n    \u002F**\n     * @brief 渲染所有注册的窗口\n     *\u002F\n    void renderWindows() {\n        if (!initialized) return;\n        \n        for (const auto& [name, windowInfo] : windows) {\n            if (windowInfo.visible) {\n                if (ImGui::Begin(name.c_str())) {\n                    windowInfo.renderFunc();\n                }\n                ImGui::End();\n            }\n        }\n    }\n\n    \u002F**\n     * @brief 结束帧并渲染\n     *\u002F\n    void endFrame() {\n        if (!initialized) return;\n        \n        ImGui::Render();\n        ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());\n    }\n\n    \u002F**\n     * @brief 完整的渲染循环（推荐使用）\n     *\u002F\n    void render() {\n        beginFrame();\n        renderWindows();\n        endFrame();\n    }\n\n    \u002F**\n     * @brief 获取 ImGui IO\n     * @return ImGuiIO 引用\n     *\u002F\n    ImGuiIO& getIO() {\n        return ImGui::GetIO();\n    }\n\n\n    \u002F**\n     * @brief 检查窗口是否存在\n     * @param name 窗口名称\n     * @return 是否存在\n     *\u002F\n    bool hasWindow(const std::string& name) const {\n        return windows.find(name) != windows.end();\n    }\n\n    \u002F**\n     * @brief 加载字体\n     * @param fontPath 字体文件路径\n     * @param fontName 字体名称\n     * @param fontSize 字体大小\n     * @param glyphRanges 字符范围\n     * @return 是否加载成功\n     *\u002F\n    bool loadFont(const std::string& fontPath, const std::string& fontName, \n                  float fontSize = 16.0f, const ImWchar* glyphRanges = nullptr) {\n        if (!initialized) return false;\n        \n        ImGuiIO& io = ImGui::GetIO();\n        ImFont* font = io.Fonts->AddFontFromFileTTF(fontPath.c_str(), fontSize, nullptr, glyphRanges);\n        \n        if (font) {\n            fonts[fontName] = font;\n            if (defaultFont.empty()) {\n                defaultFont = fontName;\n            }\n            \n            \u002F\u002F 重新构建字体纹理\n            io.Fonts->Build();\n            ImGui_ImplOpenGL3_CreateFontsTexture();\n            \n            std::cout \u003C\u003C \"字体加载成功: \" \u003C\u003C fontName \u003C\u003C \" (\" \u003C\u003C fontPath \u003C\u003C \")\" \u003C\u003C std::endl;\n            return true;\n        } else {\n            std::cerr \u003C\u003C \"字体加载失败: \" \u003C\u003C fontPath \u003C\u003C std::endl;\n            return false;\n        }\n    }\n\n    \u002F**\n     * @brief 使用指定字体\n     * @param fontName 字体名称\n     * @return 是否成功使用字体\n     *\u002F\n    bool useFont(const std::string& fontName) {\n        auto it = fonts.find(fontName);\n        if (it != fonts.end() && it->second) {\n            ImGui::PushFont(it->second);\n            return true;\n        }\n        return false;\n    }\n\n    \u002F**\n     * @brief 弹出当前字体\n     * @return 是否成功弹出字体\n     *\u002F\n    bool popFont() {\n        ImGuiIO& io = ImGui::GetIO();\n        if (io.Fonts->Fonts.Size > 0) {\n            ImGui::PopFont();\n            return true;\n        }\n        return false;\n    }\n\n    \u002F**\n     * @brief 设置默认字体\n     * @param fontName 字体名称\n     *\u002F\n    void setDefaultFont(const std::string& fontName) {\n        if (fonts.find(fontName) != fonts.end()) {\n            defaultFont = fontName;\n        }\n    }\n\n    \u002F**\n     * @brief 获取字体\n     * @param fontName 字体名称\n     * @return 字体指针\n     *\u002F\n    ImFont* getFont(const std::string& fontName) {\n        auto it = fonts.find(fontName);\n        return (it != fonts.end()) ? it->second : nullptr;\n    }\n\n    \u002F**\n     * @brief 检查字体是否存在\n     * @param fontName 字体名称\n     * @return 是否存在\n     *\u002F\n    bool hasFont(const std::string& fontName) const {\n        return fonts.find(fontName) != fonts.end();\n    }\n\n    \u002F**\n     * @brief 关闭 ImGui 管理器\n     *\u002F\n    void shutdown() {\n        if (!initialized) return;\n        \n        ImGui_ImplOpenGL3_Shutdown();\n        ImGui_ImplGlfw_Shutdown();\n        ImGui::DestroyContext();\n        \n        initialized = false;\n        windows.clear();\n        fonts.clear();\n        defaultFont.clear();\n        std::cout \u003C\u003C \"ImGui 管理器已关闭\" \u003C\u003C std::endl;\n    }\n\nprivate:\n    \u002F**\n     * @brief 加载默认字体\n     *\u002F\n    void loadDefaultFonts() {\n        \u002F\u002F 加载 Inter 字体\n        loadFont(\"Assets\u002FInter.ttc\", \"Inter\", 16.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        loadFont(\"Assets\u002FInter.ttc\", \"Inter-Large\", 20.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        loadFont(\"Assets\u002FInter.ttc\", \"Inter-Small\", 14.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        \n        \u002F\u002F 加载 Windows 系统黑体字体\n        loadFont(\"C:\\\\Windows\\\\Fonts\\\\simhei.ttf\", \"SimHei\", 18.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        loadFont(\"C:\\\\Windows\\\\Fonts\\\\simhei.ttf\", \"SimHei-Large\", 22.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        loadFont(\"C:\\\\Windows\\\\Fonts\\\\simhei.ttf\", \"SimHei-Small\", 16.0f, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull());\n        \n        \u002F\u002F 设置默认字体为黑体\n        setDefaultFont(\"SimHei\");\n    }\n};\n\n\n\u002F**\n * @brief 预定义的窗口创建器 - 提供常用的窗口模板\n *\u002F\nclass ImGuiWindowTemplates {\npublic:\n    \u002F**\n     * @brief 创建信息显示窗口\n     * @param title 窗口标题\n     * @param infoFunc 信息获取函数\n     * @return 窗口渲染函数\n     *\u002F\n    static std::function\u003Cvoid()> createInfoWindow(\n        const std::string& title, \n        std::function\u003Cstd::string()> infoFunc\n    ) {\n        return [title, infoFunc]() {\n            ImGui::Text(\"=== %s ===\", title.c_str());\n            ImGui::Separator();\n            ImGui::Text(\"%s\", infoFunc().c_str());\n        };\n    }\n\n    \u002F**\n     * @brief 创建控制面板窗口\n     * @param controls 控制函数列表\n     * @return 窗口渲染函数\n     *\u002F\n    static std::function\u003Cvoid()> createControlPanel(\n        std::vector\u003Cstd::function\u003Cvoid()>> controls\n    ) {\n        return [controls]() {\n            for (const auto& control : controls) {\n                control();\n            }\n        };\n    }\n\n    \u002F**\n     * @brief 创建性能监控窗口\n     * @return 窗口渲染函数\n     *\u002F\n    static std::function\u003Cvoid()> createPerformanceWindow() {\n        return []() {\n            ImGuiIO& io = ImGui::GetIO();\n            ImGui::Text(\"性能监控\");\n            ImGui::Separator();\n            ImGui::Text(\"FPS: %.1f\", io.Framerate);\n            ImGui::Text(\"帧时间: %.3f ms\", 1000.0f \u002F io.Framerate);\n            ImGui::Text(\"绘制调用: %d\", io.MetricsRenderVertices);\n        };\n    }\n\n    \u002F**\n     * @brief 创建调试信息窗口\n     * @param debugInfo 调试信息获取函数\n     * @return 窗口渲染函数\n     *\u002F\n    static std::function\u003Cvoid()> createDebugWindow(\n        std::function\u003Cstd::string()> debugInfo\n    ) {\n        return [debugInfo]() {\n            ImGui::Text(\"调试信息\");\n            ImGui::Separator();\n            ImGui::TextWrapped(\"%s\", debugInfo().c_str());\n        };\n    }\n};\n\n",[17,14155,14156,14162,14166,14172,14178,14184,14190,14196,14203,14210,14216,14220,14224,14233,14237,14241,14246,14251,14256,14261,14265,14274,14278,14287,14294,14298,14303,14313,14324,14340,14347,14351,14355,14380,14384,14389,14415,14426,14430,14434,14438,14446,14450,14478,14482,14486,14495,14499,14506,14513,14517,14521,14525,14534,14545,14554,14558,14574,14587,14591,14601,14605,14610,14617,14628,14652,14663,14672,14676,14681,14692,14696,14701,14712,14724,14728,14733,14740,14744,14755,14772,14780,14784,14788,14792,14801,14813,14825,14837,14841,14892,14902,14906,14910,14914,14923,14933,14937,14960,14979,14996,15009,15013,15017,15021,15025,15034,15044,15055,15059,15088,15102,15116,15124,15128,15132,15136,15140,15149,15153,15162,15177,15181,15188,15195,15206,15210,15214,15218,15227,15231,15240,15254,15258,15272,15279,15302,15311,15316,15328,15333,15337,15341,15345,15349,15358,15362,15371,15385,15389,15400,15416,15420,15424,15428,15437,15441,15450,15457,15464,15471,15475,15479,15483,15492,15501,15505,15517,15529,15533,15537,15541,15545,15554,15564,15573,15577,15604,15623,15627,15631,15635,15644,15656,15668,15680,15692,15701,15705,15743,15775,15791,15795,15813,15844,15848,15855,15865,15876,15886,15890,15895,15900,15910,15917,15921,15958,15966,15974,15995,16003,16007,16011,16015,16019,16028,16038,16047,16051,16074,16090,16109,16122,16130,16134,16142,16146,16150,16154,16163,16172,16176,16185,16203,16216,16227,16235,16239,16247,16251,16255,16259,16268,16278,16282,16305,16325,16334,16338,16342,16346,16350,16359,16369,16378,16382,16408,16422,16448,16452,16456,16460,16469,16479,16487,16491,16518,16536,16540,16544,16548,16557,16561,16570,16584,16588,16595,16602,16613,16617,16627,16637,16646,16655,16672,16676,16680,16684,16688,16697,16701,16710,16715,16753,16787,16821,16825,16830,16881,16927,16972,16976,16981,16992,16996,17000,17004,17008,17012,17021,17025,17034,17038,17042,17051,17063,17075,17084,17088,17110,17127,17148,17153,17171,17196,17207,17233,17238,17242,17246,17250,17259,17271,17279,17283,17304,17330,17334,17345,17359,17366,17370,17374,17378,17382,17386,17396,17405,17410,17432,17440,17460,17475,17486,17505,17532,17554,17559,17564,17569,17574,17584,17597,17606,17611,17633,17655,17660,17672,17687,17698,17726,17731,17736],{"__ignoreMap":19},[74,14157,14158,14160],{"class":76,"line":77},[74,14159,6309],{"class":88},[74,14161,6312],{"class":80},[74,14163,14164],{"class":76,"line":192},[74,14165,1184],{"emptyLinePlaceholder":1183},[74,14167,14168,14170],{"class":76,"line":475},[74,14169,1118],{"class":88},[74,14171,10008],{"class":1121},[74,14173,14174,14176],{"class":76,"line":505},[74,14175,1118],{"class":88},[74,14177,10015],{"class":1121},[74,14179,14180,14182],{"class":76,"line":627},[74,14181,1118],{"class":88},[74,14183,10022],{"class":1121},[74,14185,14186,14188],{"class":76,"line":938},[74,14187,1118],{"class":88},[74,14189,1129],{"class":1121},[74,14191,14192,14194],{"class":76,"line":954},[74,14193,1118],{"class":88},[74,14195,6355],{"class":1121},[74,14197,14198,14200],{"class":76,"line":970},[74,14199,1118],{"class":88},[74,14201,14202],{"class":1121}," \u003Cfunctional>\n",[74,14204,14205,14207],{"class":76,"line":984},[74,14206,1118],{"class":88},[74,14208,14209],{"class":1121}," \u003Cunordered_map>\n",[74,14211,14212,14214],{"class":76,"line":1000},[74,14213,1118],{"class":88},[74,14215,1143],{"class":1121},[74,14217,14218],{"class":76,"line":1029},[74,14219,1184],{"emptyLinePlaceholder":1183},[74,14221,14222],{"class":76,"line":1045},[74,14223,6371],{"class":914},[74,14225,14226,14228,14230],{"class":76,"line":1072},[74,14227,6376],{"class":914},[74,14229,6379],{"class":88},[74,14231,14232],{"class":914}," ImGui 窗口管理器类 - 封装 ImGui 的初始化和窗口管理\n",[74,14234,14235],{"class":76,"line":1214},[74,14236,6387],{"class":914},[74,14238,14239],{"class":76,"line":1220},[74,14240,6392],{"class":914},[74,14242,14243],{"class":76,"line":1255},[74,14244,14245],{"class":914}," * - 自动初始化和清理 ImGui\n",[74,14247,14248],{"class":76,"line":1273},[74,14249,14250],{"class":914}," * - 窗口注册和管理\n",[74,14252,14253],{"class":76,"line":1278},[74,14254,14255],{"class":914}," * - 统一的渲染循环\n",[74,14257,14258],{"class":76,"line":1283},[74,14259,14260],{"class":914}," * - 可扩展的窗口系统\n",[74,14262,14263],{"class":76,"line":1300},[74,14264,6417],{"class":914},[74,14266,14267,14269,14272],{"class":76,"line":1322},[74,14268,6422],{"class":88},[74,14270,14271],{"class":80}," ImGuiManager",[74,14273,1328],{"class":84},[74,14275,14276],{"class":76,"line":1331},[74,14277,6432],{"class":88},[74,14279,14280,14282,14284],{"class":76,"line":1337},[74,14281,3462],{"class":80},[74,14283,593],{"class":88},[74,14285,14286],{"class":84}," window;\n",[74,14288,14289,14291],{"class":76,"line":1358},[74,14290,2154],{"class":88},[74,14292,14293],{"class":84}," initialized;\n",[74,14295,14296],{"class":76,"line":1383},[74,14297,1750],{"class":84},[74,14299,14300],{"class":76,"line":1417},[74,14301,14302],{"class":914},"    \u002F\u002F 窗口注册系统\n",[74,14304,14305,14308,14311],{"class":76,"line":1427},[74,14306,14307],{"class":88},"    struct",[74,14309,14310],{"class":80}," WindowInfo",[74,14312,1328],{"class":84},[74,14314,14315,14317,14319,14321],{"class":76,"line":1433},[74,14316,1386],{"class":80},[74,14318,95],{"class":84},[74,14320,1291],{"class":80},[74,14322,14323],{"class":84}," name;\n",[74,14325,14326,14328,14330,14333,14335,14337],{"class":76,"line":1438},[74,14327,1386],{"class":80},[74,14329,95],{"class":84},[74,14331,14332],{"class":80},"function",[74,14334,1985],{"class":84},[74,14336,865],{"class":88},[74,14338,14339],{"class":84},"()> renderFunc;\n",[74,14341,14342,14344],{"class":76,"line":1443},[74,14343,8066],{"class":88},[74,14345,14346],{"class":84}," visible;\n",[74,14348,14349],{"class":76,"line":1449},[74,14350,2975],{"class":84},[74,14352,14353],{"class":76,"line":1480},[74,14354,1750],{"class":84},[74,14356,14357,14359,14361,14364,14366,14368,14370,14372,14374,14377],{"class":76,"line":1516},[74,14358,3145],{"class":80},[74,14360,95],{"class":84},[74,14362,14363],{"class":80},"unordered_map",[74,14365,1985],{"class":84},[74,14367,1286],{"class":80},[74,14369,95],{"class":84},[74,14371,1291],{"class":80},[74,14373,111],{"class":84},[74,14375,14376],{"class":80},"WindowInfo",[74,14378,14379],{"class":84},"> windows;\n",[74,14381,14382],{"class":76,"line":1549},[74,14383,1750],{"class":84},[74,14385,14386],{"class":76,"line":1554},[74,14387,14388],{"class":914},"    \u002F\u002F 字体管理\n",[74,14390,14391,14393,14395,14397,14399,14401,14403,14405,14407,14410,14412],{"class":76,"line":1560},[74,14392,3145],{"class":80},[74,14394,95],{"class":84},[74,14396,14363],{"class":80},[74,14398,1985],{"class":84},[74,14400,1286],{"class":80},[74,14402,95],{"class":84},[74,14404,1291],{"class":80},[74,14406,111],{"class":84},[74,14408,14409],{"class":80},"ImFont",[74,14411,593],{"class":88},[74,14413,14414],{"class":84},"> fonts;\n",[74,14416,14417,14419,14421,14423],{"class":76,"line":1583},[74,14418,3145],{"class":80},[74,14420,95],{"class":84},[74,14422,1291],{"class":80},[74,14424,14425],{"class":84}," defaultFont;\n",[74,14427,14428],{"class":76,"line":1603},[74,14429,1184],{"emptyLinePlaceholder":1183},[74,14431,14432],{"class":76,"line":1623},[74,14433,6599],{"class":88},[74,14435,14436],{"class":76,"line":1643},[74,14437,6604],{"class":914},[74,14439,14440,14442,14444],{"class":76,"line":1662},[74,14441,6609],{"class":914},[74,14443,6379],{"class":88},[74,14445,6614],{"class":914},[74,14447,14448],{"class":76,"line":1679},[74,14449,6656],{"class":914},[74,14451,14452,14455,14458,14460,14462,14465,14467,14470,14472,14475],{"class":76,"line":1684},[74,14453,14454],{"class":80},"    ImGuiManager",[74,14456,14457],{"class":84},"() : ",[74,14459,880],{"class":80},[74,14461,101],{"class":84},[74,14463,14464],{"class":104},"nullptr",[74,14466,674],{"class":84},[74,14468,14469],{"class":80},"initialized",[74,14471,101],{"class":84},[74,14473,14474],{"class":104},"false",[74,14476,14477],{"class":84},") {}\n",[74,14479,14480],{"class":76,"line":1690},[74,14481,1184],{"emptyLinePlaceholder":1183},[74,14483,14484],{"class":76,"line":1723},[74,14485,6604],{"class":914},[74,14487,14488,14490,14492],{"class":76,"line":1729},[74,14489,6609],{"class":914},[74,14491,6379],{"class":88},[74,14493,14494],{"class":914}," 析构函数\n",[74,14496,14497],{"class":76,"line":1747},[74,14498,6656],{"class":914},[74,14500,14501,14504],{"class":76,"line":1753},[74,14502,14503],{"class":80},"    ~ImGuiManager",[74,14505,1297],{"class":84},[74,14507,14508,14511],{"class":76,"line":1761},[74,14509,14510],{"class":80},"        shutdown",[74,14512,1355],{"class":84},[74,14514,14515],{"class":76,"line":1772},[74,14516,1430],{"class":84},[74,14518,14519],{"class":76,"line":1783},[74,14520,1184],{"emptyLinePlaceholder":1183},[74,14522,14523],{"class":76,"line":1796},[74,14524,6604],{"class":914},[74,14526,14527,14529,14531],{"class":76,"line":1801},[74,14528,6609],{"class":914},[74,14530,6379],{"class":88},[74,14532,14533],{"class":914}," 初始化 ImGui 管理器\n",[74,14535,14536,14538,14540,14543],{"class":76,"line":1806},[74,14537,6609],{"class":914},[74,14539,6621],{"class":88},[74,14541,14542],{"class":879}," glfwWindow",[74,14544,6995],{"class":914},[74,14546,14547,14549,14551],{"class":76,"line":1824},[74,14548,6609],{"class":914},[74,14550,8496],{"class":88},[74,14552,14553],{"class":914}," 是否初始化成功\n",[74,14555,14556],{"class":76,"line":1844},[74,14557,6656],{"class":914},[74,14559,14560,14562,14564,14566,14568,14570,14572],{"class":76,"line":1854},[74,14561,2154],{"class":88},[74,14563,7007],{"class":80},[74,14565,101],{"class":84},[74,14567,873],{"class":80},[74,14569,593],{"class":88},[74,14571,14542],{"class":879},[74,14573,1252],{"class":84},[74,14575,14576,14578,14581,14583,14585],{"class":76,"line":1864},[74,14577,2250],{"class":88},[74,14579,14580],{"class":84}," (initialized) ",[74,14582,1742],{"class":88},[74,14584,1654],{"class":104},[74,14586,570],{"class":84},[74,14588,14589],{"class":76,"line":1869},[74,14590,5746],{"class":84},[74,14592,14593,14596,14598],{"class":76,"line":1886},[74,14594,14595],{"class":84},"        window ",[74,14597,89],{"class":88},[74,14599,14600],{"class":84}," glfwWindow;\n",[74,14602,14603],{"class":76,"line":1898},[74,14604,5746],{"class":84},[74,14606,14607],{"class":76,"line":1908},[74,14608,14609],{"class":914},"        \u002F\u002F 初始化 ImGui\n",[74,14611,14612,14615],{"class":76,"line":1913},[74,14613,14614],{"class":80},"        IMGUI_CHECKVERSION",[74,14616,1355],{"class":84},[74,14618,14619,14621,14623,14626],{"class":76,"line":1924},[74,14620,11506],{"class":80},[74,14622,95],{"class":84},[74,14624,14625],{"class":80},"CreateContext",[74,14627,1355],{"class":84},[74,14629,14630,14632,14634,14636,14638,14640,14642,14644,14647,14649],{"class":76,"line":1935},[74,14631,11714],{"class":80},[74,14633,1377],{"class":88},[74,14635,11719],{"class":84},[74,14637,89],{"class":88},[74,14639,11724],{"class":80},[74,14641,95],{"class":84},[74,14643,11729],{"class":80},[74,14645,14646],{"class":84},"(); (",[74,14648,865],{"class":88},[74,14650,14651],{"class":84},")io;\n",[74,14653,14654,14657,14660],{"class":76,"line":1940},[74,14655,14656],{"class":84},"        io.ConfigFlags ",[74,14658,14659],{"class":88},"|=",[74,14661,14662],{"class":84}," ImGuiConfigFlags_NavEnableKeyboard;\n",[74,14664,14665,14667,14669],{"class":76,"line":1946},[74,14666,14656],{"class":84},[74,14668,14659],{"class":88},[74,14670,14671],{"class":84}," ImGuiConfigFlags_NavEnableGamepad;\n",[74,14673,14674],{"class":76,"line":1964},[74,14675,1184],{"emptyLinePlaceholder":1183},[74,14677,14678],{"class":76,"line":1978},[74,14679,14680],{"class":914},"        \u002F\u002F 设置 ImGui 样式\n",[74,14682,14683,14685,14687,14690],{"class":76,"line":1997},[74,14684,11506],{"class":80},[74,14686,95],{"class":84},[74,14688,14689],{"class":80},"StyleColorsDark",[74,14691,1355],{"class":84},[74,14693,14694],{"class":76,"line":2012},[74,14695,1184],{"emptyLinePlaceholder":1183},[74,14697,14698],{"class":76,"line":2017},[74,14699,14700],{"class":914},"        \u002F\u002F 初始化 ImGui 平台\u002F渲染器绑定\n",[74,14702,14703,14706,14708,14710],{"class":76,"line":2023},[74,14704,14705],{"class":80},"        ImGui_ImplGlfw_InitForOpenGL",[74,14707,7030],{"class":84},[74,14709,6767],{"class":104},[74,14711,125],{"class":84},[74,14713,14714,14717,14719,14722],{"class":76,"line":2032},[74,14715,14716],{"class":80},"        ImGui_ImplOpenGL3_Init",[74,14718,101],{"class":84},[74,14720,14721],{"class":1121},"\"#version 330\"",[74,14723,125],{"class":84},[74,14725,14726],{"class":76,"line":2061},[74,14727,5746],{"class":84},[74,14729,14730],{"class":76,"line":2077},[74,14731,14732],{"class":914},"        \u002F\u002F 加载默认字体\n",[74,14734,14735,14738],{"class":76,"line":2103},[74,14736,14737],{"class":80},"        loadDefaultFonts",[74,14739,1355],{"class":84},[74,14741,14742],{"class":76,"line":2117},[74,14743,5746],{"class":84},[74,14745,14746,14749,14751,14753],{"class":76,"line":2122},[74,14747,14748],{"class":84},"        initialized ",[74,14750,89],{"class":88},[74,14752,1654],{"class":104},[74,14754,570],{"class":84},[74,14756,14757,14759,14761,14763,14766,14768,14770],{"class":76,"line":2127},[74,14758,1386],{"class":80},[74,14760,2304],{"class":84},[74,14762,1392],{"class":88},[74,14764,14765],{"class":1121}," \"ImGui 管理器已初始化\"",[74,14767,1398],{"class":88},[74,14769,1312],{"class":80},[74,14771,1414],{"class":84},[74,14773,14774,14776,14778],{"class":76,"line":2145},[74,14775,1340],{"class":88},[74,14777,1654],{"class":104},[74,14779,570],{"class":84},[74,14781,14782],{"class":76,"line":2151},[74,14783,1430],{"class":84},[74,14785,14786],{"class":76,"line":2179},[74,14787,1184],{"emptyLinePlaceholder":1183},[74,14789,14790],{"class":76,"line":2193},[74,14791,6604],{"class":914},[74,14793,14794,14796,14798],{"class":76,"line":2216},[74,14795,6609],{"class":914},[74,14797,6379],{"class":88},[74,14799,14800],{"class":914}," 注册一个窗口\n",[74,14802,14803,14805,14807,14810],{"class":76,"line":2228},[74,14804,6609],{"class":914},[74,14806,6621],{"class":88},[74,14808,14809],{"class":879}," name",[74,14811,14812],{"class":914}," 窗口名称\n",[74,14814,14815,14817,14819,14822],{"class":76,"line":2233},[74,14816,6609],{"class":914},[74,14818,6621],{"class":88},[74,14820,14821],{"class":879}," renderFunc",[74,14823,14824],{"class":914}," 渲染函数\n",[74,14826,14827,14829,14831,14834],{"class":76,"line":2247},[74,14828,6609],{"class":914},[74,14830,6621],{"class":88},[74,14832,14833],{"class":879}," visible",[74,14835,14836],{"class":914}," 是否默认可见\n",[74,14838,14839],{"class":76,"line":2256},[74,14840,6656],{"class":914},[74,14842,14843,14845,14848,14850,14852,14854,14856,14858,14860,14862,14864,14866,14868,14870,14872,14874,14877,14880,14882,14884,14886,14888,14890],{"class":76,"line":2262},[74,14844,7004],{"class":88},[74,14846,14847],{"class":80}," registerWindow",[74,14849,101],{"class":84},[74,14851,1369],{"class":88},[74,14853,1312],{"class":80},[74,14855,95],{"class":84},[74,14857,1291],{"class":80},[74,14859,1377],{"class":88},[74,14861,14809],{"class":879},[74,14863,111],{"class":84},[74,14865,1286],{"class":80},[74,14867,95],{"class":84},[74,14869,14332],{"class":80},[74,14871,1985],{"class":84},[74,14873,865],{"class":88},[74,14875,14876],{"class":84},"()> ",[74,14878,14879],{"class":879},"renderFunc",[74,14881,111],{"class":84},[74,14883,1646],{"class":88},[74,14885,14833],{"class":879},[74,14887,1309],{"class":88},[74,14889,1654],{"class":104},[74,14891,1252],{"class":84},[74,14893,14894,14897,14899],{"class":76,"line":2271},[74,14895,14896],{"class":84},"        windows[name] ",[74,14898,89],{"class":88},[74,14900,14901],{"class":84}," {name, renderFunc, visible};\n",[74,14903,14904],{"class":76,"line":2283},[74,14905,1430],{"class":84},[74,14907,14908],{"class":76,"line":2298},[74,14909,1184],{"emptyLinePlaceholder":1183},[74,14911,14912],{"class":76,"line":2318},[74,14913,6604],{"class":914},[74,14915,14916,14918,14920],{"class":76,"line":2329},[74,14917,6609],{"class":914},[74,14919,6379],{"class":88},[74,14921,14922],{"class":914}," 切换窗口可见性\n",[74,14924,14925,14927,14929,14931],{"class":76,"line":2335},[74,14926,6609],{"class":914},[74,14928,6621],{"class":88},[74,14930,14809],{"class":879},[74,14932,14812],{"class":914},[74,14934,14935],{"class":76,"line":2343},[74,14936,6656],{"class":914},[74,14938,14939,14941,14944,14946,14948,14950,14952,14954,14956,14958],{"class":76,"line":2354},[74,14940,7004],{"class":88},[74,14942,14943],{"class":80}," toggleWindow",[74,14945,101],{"class":84},[74,14947,1369],{"class":88},[74,14949,1312],{"class":80},[74,14951,95],{"class":84},[74,14953,1291],{"class":80},[74,14955,1377],{"class":88},[74,14957,14809],{"class":879},[74,14959,1252],{"class":84},[74,14961,14962,14965,14968,14970,14973,14976],{"class":76,"line":2367},[74,14963,14964],{"class":88},"        auto",[74,14966,14967],{"class":84}," it ",[74,14969,89],{"class":88},[74,14971,14972],{"class":84}," windows.",[74,14974,14975],{"class":80},"find",[74,14977,14978],{"class":84},"(name);\n",[74,14980,14981,14983,14986,14989,14991,14994],{"class":76,"line":2385},[74,14982,2250],{"class":88},[74,14984,14985],{"class":84}," (it ",[74,14987,14988],{"class":88},"!=",[74,14990,14972],{"class":84},[74,14992,14993],{"class":80},"end",[74,14995,3188],{"class":84},[74,14997,14998,15001,15003,15006],{"class":76,"line":2391},[74,14999,15000],{"class":84},"            it->second.visible ",[74,15002,89],{"class":88},[74,15004,15005],{"class":88}," !",[74,15007,15008],{"class":84},"it->second.visible;\n",[74,15010,15011],{"class":76,"line":2396},[74,15012,2388],{"class":84},[74,15014,15015],{"class":76,"line":2401},[74,15016,1430],{"class":84},[74,15018,15019],{"class":76,"line":2407},[74,15020,1184],{"emptyLinePlaceholder":1183},[74,15022,15023],{"class":76,"line":2422},[74,15024,6604],{"class":914},[74,15026,15027,15029,15031],{"class":76,"line":2427},[74,15028,6609],{"class":914},[74,15030,6379],{"class":88},[74,15032,15033],{"class":914}," 设置窗口可见性\n",[74,15035,15036,15038,15040,15042],{"class":76,"line":2442},[74,15037,6609],{"class":914},[74,15039,6621],{"class":88},[74,15041,14809],{"class":879},[74,15043,14812],{"class":914},[74,15045,15046,15048,15050,15052],{"class":76,"line":2457},[74,15047,6609],{"class":914},[74,15049,6621],{"class":88},[74,15051,14833],{"class":879},[74,15053,15054],{"class":914}," 是否可见\n",[74,15056,15057],{"class":76,"line":2470},[74,15058,6656],{"class":914},[74,15060,15061,15063,15066,15068,15070,15072,15074,15076,15078,15080,15082,15084,15086],{"class":76,"line":2485},[74,15062,7004],{"class":88},[74,15064,15065],{"class":80}," setWindowVisible",[74,15067,101],{"class":84},[74,15069,1369],{"class":88},[74,15071,1312],{"class":80},[74,15073,95],{"class":84},[74,15075,1291],{"class":80},[74,15077,1377],{"class":88},[74,15079,14809],{"class":879},[74,15081,111],{"class":84},[74,15083,1646],{"class":88},[74,15085,14833],{"class":879},[74,15087,1252],{"class":84},[74,15089,15090,15092,15094,15096,15098,15100],{"class":76,"line":2498},[74,15091,14964],{"class":88},[74,15093,14967],{"class":84},[74,15095,89],{"class":88},[74,15097,14972],{"class":84},[74,15099,14975],{"class":80},[74,15101,14978],{"class":84},[74,15103,15104,15106,15108,15110,15112,15114],{"class":76,"line":2513},[74,15105,2250],{"class":88},[74,15107,14985],{"class":84},[74,15109,14988],{"class":88},[74,15111,14972],{"class":84},[74,15113,14993],{"class":80},[74,15115,3188],{"class":84},[74,15117,15118,15120,15122],{"class":76,"line":2532},[74,15119,15000],{"class":84},[74,15121,89],{"class":88},[74,15123,14346],{"class":84},[74,15125,15126],{"class":76,"line":2547},[74,15127,2388],{"class":84},[74,15129,15130],{"class":76,"line":2566},[74,15131,1430],{"class":84},[74,15133,15134],{"class":76,"line":2571},[74,15135,1184],{"emptyLinePlaceholder":1183},[74,15137,15138],{"class":76,"line":2576},[74,15139,6604],{"class":914},[74,15141,15142,15144,15146],{"class":76,"line":2586},[74,15143,6609],{"class":914},[74,15145,6379],{"class":88},[74,15147,15148],{"class":914}," 开始新帧\n",[74,15150,15151],{"class":76,"line":2591},[74,15152,6656],{"class":914},[74,15154,15155,15157,15160],{"class":76,"line":2597},[74,15156,7004],{"class":88},[74,15158,15159],{"class":80}," beginFrame",[74,15161,1297],{"class":84},[74,15163,15164,15166,15168,15170,15173,15175],{"class":76,"line":2619},[74,15165,2250],{"class":88},[74,15167,923],{"class":84},[74,15169,1736],{"class":88},[74,15171,15172],{"class":84},"initialized) ",[74,15174,1742],{"class":88},[74,15176,570],{"class":84},[74,15178,15179],{"class":76,"line":2668},[74,15180,5746],{"class":84},[74,15182,15183,15186],{"class":76,"line":2673},[74,15184,15185],{"class":80},"        ImGui_ImplOpenGL3_NewFrame",[74,15187,1355],{"class":84},[74,15189,15190,15193],{"class":76,"line":2679},[74,15191,15192],{"class":80},"        ImGui_ImplGlfw_NewFrame",[74,15194,1355],{"class":84},[74,15196,15197,15199,15201,15204],{"class":76,"line":2699},[74,15198,11506],{"class":80},[74,15200,95],{"class":84},[74,15202,15203],{"class":80},"NewFrame",[74,15205,1355],{"class":84},[74,15207,15208],{"class":76,"line":2719},[74,15209,1430],{"class":84},[74,15211,15212],{"class":76,"line":2724},[74,15213,1184],{"emptyLinePlaceholder":1183},[74,15215,15216],{"class":76,"line":2730},[74,15217,6604],{"class":914},[74,15219,15220,15222,15224],{"class":76,"line":2793},[74,15221,6609],{"class":914},[74,15223,6379],{"class":88},[74,15225,15226],{"class":914}," 渲染所有注册的窗口\n",[74,15228,15229],{"class":76,"line":2798},[74,15230,6656],{"class":914},[74,15232,15233,15235,15238],{"class":76,"line":2804},[74,15234,7004],{"class":88},[74,15236,15237],{"class":80}," renderWindows",[74,15239,1297],{"class":84},[74,15241,15242,15244,15246,15248,15250,15252],{"class":76,"line":2816},[74,15243,2250],{"class":88},[74,15245,923],{"class":84},[74,15247,1736],{"class":88},[74,15249,15172],{"class":84},[74,15251,1742],{"class":88},[74,15253,570],{"class":84},[74,15255,15256],{"class":76,"line":2843},[74,15257,5746],{"class":84},[74,15259,15260,15262,15264,15266,15269],{"class":76,"line":2873},[74,15261,5953],{"class":88},[74,15263,923],{"class":84},[74,15265,1369],{"class":88},[74,15267,15268],{"class":88}," auto&",[74,15270,15271],{"class":84}," [name, windowInfo] : windows) {\n",[74,15273,15274,15276],{"class":76,"line":2907},[74,15275,7932],{"class":88},[74,15277,15278],{"class":84}," (windowInfo.visible) {\n",[74,15280,15281,15284,15286,15288,15290,15293,15296,15299],{"class":76,"line":2940},[74,15282,15283],{"class":88},"                if",[74,15285,923],{"class":84},[74,15287,11594],{"class":80},[74,15289,95],{"class":84},[74,15291,15292],{"class":80},"Begin",[74,15294,15295],{"class":84},"(name.",[74,15297,15298],{"class":80},"c_str",[74,15300,15301],{"class":84},"())) {\n",[74,15303,15304,15307,15309],{"class":76,"line":2972},[74,15305,15306],{"class":84},"                    windowInfo.",[74,15308,14879],{"class":80},[74,15310,1355],{"class":84},[74,15312,15313],{"class":76,"line":2978},[74,15314,15315],{"class":84},"                }\n",[74,15317,15318,15321,15323,15326],{"class":76,"line":2983},[74,15319,15320],{"class":80},"                ImGui",[74,15322,95],{"class":84},[74,15324,15325],{"class":80},"End",[74,15327,1355],{"class":84},[74,15329,15330],{"class":76,"line":3008},[74,15331,15332],{"class":84},"            }\n",[74,15334,15335],{"class":76,"line":3031},[74,15336,2388],{"class":84},[74,15338,15339],{"class":76,"line":3057},[74,15340,1430],{"class":84},[74,15342,15343],{"class":76,"line":3080},[74,15344,1184],{"emptyLinePlaceholder":1183},[74,15346,15347],{"class":76,"line":3097},[74,15348,6604],{"class":914},[74,15350,15351,15353,15355],{"class":76,"line":3116},[74,15352,6609],{"class":914},[74,15354,6379],{"class":88},[74,15356,15357],{"class":914}," 结束帧并渲染\n",[74,15359,15360],{"class":76,"line":3131},[74,15361,6656],{"class":914},[74,15363,15364,15366,15369],{"class":76,"line":3136},[74,15365,7004],{"class":88},[74,15367,15368],{"class":80}," endFrame",[74,15370,1297],{"class":84},[74,15372,15373,15375,15377,15379,15381,15383],{"class":76,"line":3142},[74,15374,2250],{"class":88},[74,15376,923],{"class":84},[74,15378,1736],{"class":88},[74,15380,15172],{"class":84},[74,15382,1742],{"class":88},[74,15384,570],{"class":84},[74,15386,15387],{"class":76,"line":3161},[74,15388,5746],{"class":84},[74,15390,15391,15393,15395,15398],{"class":76,"line":3177},[74,15392,11506],{"class":80},[74,15394,95],{"class":84},[74,15396,15397],{"class":80},"Render",[74,15399,1355],{"class":84},[74,15401,15402,15405,15407,15409,15411,15414],{"class":76,"line":3191},[74,15403,15404],{"class":80},"        ImGui_ImplOpenGL3_RenderDrawData",[74,15406,101],{"class":84},[74,15408,11594],{"class":80},[74,15410,95],{"class":84},[74,15412,15413],{"class":80},"GetDrawData",[74,15415,11581],{"class":84},[74,15417,15418],{"class":76,"line":3213},[74,15419,1430],{"class":84},[74,15421,15422],{"class":76,"line":3223},[74,15423,1184],{"emptyLinePlaceholder":1183},[74,15425,15426],{"class":76,"line":3228},[74,15427,6604],{"class":914},[74,15429,15430,15432,15434],{"class":76,"line":3240},[74,15431,6609],{"class":914},[74,15433,6379],{"class":88},[74,15435,15436],{"class":914}," 完整的渲染循环（推荐使用）\n",[74,15438,15439],{"class":76,"line":3262},[74,15440,6656],{"class":914},[74,15442,15443,15445,15448],{"class":76,"line":3271},[74,15444,7004],{"class":88},[74,15446,15447],{"class":80}," render",[74,15449,1297],{"class":84},[74,15451,15452,15455],{"class":76,"line":3276},[74,15453,15454],{"class":80},"        beginFrame",[74,15456,1355],{"class":84},[74,15458,15459,15462],{"class":76,"line":3281},[74,15460,15461],{"class":80},"        renderWindows",[74,15463,1355],{"class":84},[74,15465,15466,15469],{"class":76,"line":3314},[74,15467,15468],{"class":80},"        endFrame",[74,15470,1355],{"class":84},[74,15472,15473],{"class":76,"line":3346},[74,15474,1430],{"class":84},[74,15476,15477],{"class":76,"line":3351},[74,15478,1184],{"emptyLinePlaceholder":1183},[74,15480,15481],{"class":76,"line":3369},[74,15482,6604],{"class":914},[74,15484,15485,15487,15489],{"class":76,"line":3385},[74,15486,6609],{"class":914},[74,15488,6379],{"class":88},[74,15490,15491],{"class":914}," 获取 ImGui IO\n",[74,15493,15494,15496,15498],{"class":76,"line":3390},[74,15495,6609],{"class":914},[74,15497,8496],{"class":88},[74,15499,15500],{"class":914}," ImGuiIO 引用\n",[74,15502,15503],{"class":76,"line":3395},[74,15504,6656],{"class":914},[74,15506,15507,15510,15512,15515],{"class":76,"line":3400},[74,15508,15509],{"class":80},"    ImGuiIO",[74,15511,1377],{"class":88},[74,15513,15514],{"class":80}," getIO",[74,15516,1297],{"class":84},[74,15518,15519,15521,15523,15525,15527],{"class":76,"line":3406},[74,15520,1340],{"class":88},[74,15522,11724],{"class":80},[74,15524,95],{"class":84},[74,15526,11729],{"class":80},[74,15528,1355],{"class":84},[74,15530,15531],{"class":76,"line":3414},[74,15532,1430],{"class":84},[74,15534,15535],{"class":76,"line":3428},[74,15536,1184],{"emptyLinePlaceholder":1183},[74,15538,15539],{"class":76,"line":3440},[74,15540,1184],{"emptyLinePlaceholder":1183},[74,15542,15543],{"class":76,"line":3448},[74,15544,6604],{"class":914},[74,15546,15547,15549,15551],{"class":76,"line":3453},[74,15548,6609],{"class":914},[74,15550,6379],{"class":88},[74,15552,15553],{"class":914}," 检查窗口是否存在\n",[74,15555,15556,15558,15560,15562],{"class":76,"line":3459},[74,15557,6609],{"class":914},[74,15559,6621],{"class":88},[74,15561,14809],{"class":879},[74,15563,14812],{"class":914},[74,15565,15566,15568,15570],{"class":76,"line":3499},[74,15567,6609],{"class":914},[74,15569,8496],{"class":88},[74,15571,15572],{"class":914}," 是否存在\n",[74,15574,15575],{"class":76,"line":3514},[74,15576,6656],{"class":914},[74,15578,15579,15581,15584,15586,15588,15590,15592,15594,15596,15598,15600,15602],{"class":76,"line":3532},[74,15580,2154],{"class":88},[74,15582,15583],{"class":80}," hasWindow",[74,15585,101],{"class":84},[74,15587,1369],{"class":88},[74,15589,1312],{"class":80},[74,15591,95],{"class":84},[74,15593,1291],{"class":80},[74,15595,1377],{"class":88},[74,15597,14809],{"class":879},[74,15599,7466],{"class":84},[74,15601,1369],{"class":88},[74,15603,1328],{"class":84},[74,15605,15606,15608,15610,15612,15615,15617,15619,15621],{"class":76,"line":3540},[74,15607,1340],{"class":88},[74,15609,14972],{"class":84},[74,15611,14975],{"class":80},[74,15613,15614],{"class":84},"(name) ",[74,15616,14988],{"class":88},[74,15618,14972],{"class":84},[74,15620,14993],{"class":80},[74,15622,1355],{"class":84},[74,15624,15625],{"class":76,"line":3552},[74,15626,1430],{"class":84},[74,15628,15629],{"class":76,"line":3557},[74,15630,1184],{"emptyLinePlaceholder":1183},[74,15632,15633],{"class":76,"line":3562},[74,15634,6604],{"class":914},[74,15636,15637,15639,15641],{"class":76,"line":3571},[74,15638,6609],{"class":914},[74,15640,6379],{"class":88},[74,15642,15643],{"class":914}," 加载字体\n",[74,15645,15646,15648,15650,15653],{"class":76,"line":3580},[74,15647,6609],{"class":914},[74,15649,6621],{"class":88},[74,15651,15652],{"class":879}," fontPath",[74,15654,15655],{"class":914}," 字体文件路径\n",[74,15657,15658,15660,15662,15665],{"class":76,"line":3589},[74,15659,6609],{"class":914},[74,15661,6621],{"class":88},[74,15663,15664],{"class":879}," fontName",[74,15666,15667],{"class":914}," 字体名称\n",[74,15669,15670,15672,15674,15677],{"class":76,"line":3594},[74,15671,6609],{"class":914},[74,15673,6621],{"class":88},[74,15675,15676],{"class":879}," fontSize",[74,15678,15679],{"class":914}," 字体大小\n",[74,15681,15682,15684,15686,15689],{"class":76,"line":3600},[74,15683,6609],{"class":914},[74,15685,6621],{"class":88},[74,15687,15688],{"class":879}," glyphRanges",[74,15690,15691],{"class":914}," 字符范围\n",[74,15693,15694,15696,15698],{"class":76,"line":3608},[74,15695,6609],{"class":914},[74,15697,8496],{"class":88},[74,15699,15700],{"class":914}," 是否加载成功\n",[74,15702,15703],{"class":76,"line":3613},[74,15704,6656],{"class":914},[74,15706,15707,15709,15712,15714,15716,15718,15720,15722,15724,15726,15728,15730,15732,15734,15736,15738,15740],{"class":76,"line":3619},[74,15708,2154],{"class":88},[74,15710,15711],{"class":80}," loadFont",[74,15713,101],{"class":84},[74,15715,1369],{"class":88},[74,15717,1312],{"class":80},[74,15719,95],{"class":84},[74,15721,1291],{"class":80},[74,15723,1377],{"class":88},[74,15725,15652],{"class":879},[74,15727,111],{"class":84},[74,15729,1369],{"class":88},[74,15731,1312],{"class":80},[74,15733,95],{"class":84},[74,15735,1291],{"class":80},[74,15737,1377],{"class":88},[74,15739,15664],{"class":879},[74,15741,15742],{"class":84},", \n",[74,15744,15745,15748,15750,15752,15755,15757,15759,15761,15764,15766,15768,15770,15773],{"class":76,"line":3634},[74,15746,15747],{"class":88},"                  float",[74,15749,15676],{"class":879},[74,15751,1309],{"class":88},[74,15753,15754],{"class":104}," 16.0",[74,15756,108],{"class":88},[74,15758,111],{"class":84},[74,15760,1369],{"class":88},[74,15762,15763],{"class":80}," ImWchar",[74,15765,593],{"class":88},[74,15767,15688],{"class":879},[74,15769,1309],{"class":88},[74,15771,15772],{"class":104}," nullptr",[74,15774,1252],{"class":84},[74,15776,15777,15779,15781,15783,15785,15787,15789],{"class":76,"line":3652},[74,15778,2250],{"class":88},[74,15780,923],{"class":84},[74,15782,1736],{"class":88},[74,15784,15172],{"class":84},[74,15786,1742],{"class":88},[74,15788,1791],{"class":104},[74,15790,570],{"class":84},[74,15792,15793],{"class":76,"line":3663},[74,15794,5746],{"class":84},[74,15796,15797,15799,15801,15803,15805,15807,15809,15811],{"class":76,"line":3668},[74,15798,11714],{"class":80},[74,15800,1377],{"class":88},[74,15802,11719],{"class":84},[74,15804,89],{"class":88},[74,15806,11724],{"class":80},[74,15808,95],{"class":84},[74,15810,11729],{"class":80},[74,15812,1355],{"class":84},[74,15814,15815,15818,15820,15823,15825,15828,15831,15834,15836,15839,15841],{"class":76,"line":3673},[74,15816,15817],{"class":80},"        ImFont",[74,15819,593],{"class":88},[74,15821,15822],{"class":84}," font ",[74,15824,89],{"class":88},[74,15826,15827],{"class":84}," io.Fonts->",[74,15829,15830],{"class":80},"AddFontFromFileTTF",[74,15832,15833],{"class":84},"(fontPath.",[74,15835,15298],{"class":80},[74,15837,15838],{"class":84},"(), fontSize, ",[74,15840,14464],{"class":104},[74,15842,15843],{"class":84},", glyphRanges);\n",[74,15845,15846],{"class":76,"line":3679},[74,15847,5746],{"class":84},[74,15849,15850,15852],{"class":76,"line":3688},[74,15851,2250],{"class":88},[74,15853,15854],{"class":84}," (font) {\n",[74,15856,15857,15860,15862],{"class":76,"line":3693},[74,15858,15859],{"class":84},"            fonts[fontName] ",[74,15861,89],{"class":88},[74,15863,15864],{"class":84}," font;\n",[74,15866,15867,15869,15872,15874],{"class":76,"line":3705},[74,15868,7932],{"class":88},[74,15870,15871],{"class":84}," (defaultFont.",[74,15873,3185],{"class":80},[74,15875,3188],{"class":84},[74,15877,15878,15881,15883],{"class":76,"line":3711},[74,15879,15880],{"class":84},"                defaultFont ",[74,15882,89],{"class":88},[74,15884,15885],{"class":84}," fontName;\n",[74,15887,15888],{"class":76,"line":3753},[74,15889,15332],{"class":84},[74,15891,15892],{"class":76,"line":3791},[74,15893,15894],{"class":84},"            \n",[74,15896,15897],{"class":76,"line":3826},[74,15898,15899],{"class":914},"            \u002F\u002F 重新构建字体纹理\n",[74,15901,15902,15905,15908],{"class":76,"line":3861},[74,15903,15904],{"class":84},"            io.Fonts->",[74,15906,15907],{"class":80},"Build",[74,15909,1355],{"class":84},[74,15911,15912,15915],{"class":76,"line":3898},[74,15913,15914],{"class":80},"            ImGui_ImplOpenGL3_CreateFontsTexture",[74,15916,1355],{"class":84},[74,15918,15919],{"class":76,"line":3937},[74,15920,15894],{"class":84},[74,15922,15923,15925,15927,15929,15932,15934,15937,15939,15942,15944,15947,15949,15952,15954,15956],{"class":76,"line":3942},[74,15924,2301],{"class":80},[74,15926,2304],{"class":84},[74,15928,1392],{"class":88},[74,15930,15931],{"class":1121}," \"字体加载成功: \"",[74,15933,1398],{"class":88},[74,15935,15936],{"class":84}," fontName ",[74,15938,1392],{"class":88},[74,15940,15941],{"class":1121}," \" (\"",[74,15943,1398],{"class":88},[74,15945,15946],{"class":84}," fontPath ",[74,15948,1392],{"class":88},[74,15950,15951],{"class":1121}," \")\"",[74,15953,1398],{"class":88},[74,15955,1312],{"class":80},[74,15957,1414],{"class":84},[74,15959,15960,15962,15964],{"class":76,"line":3979},[74,15961,7331],{"class":88},[74,15963,1654],{"class":104},[74,15965,570],{"class":84},[74,15967,15968,15970,15972],{"class":76,"line":4014},[74,15969,2321],{"class":84},[74,15971,2324],{"class":88},[74,15973,1328],{"class":84},[74,15975,15976,15978,15980,15982,15985,15987,15989,15991,15993],{"class":76,"line":4047},[74,15977,2301],{"class":80},[74,15979,1389],{"class":84},[74,15981,1392],{"class":88},[74,15983,15984],{"class":1121}," \"字体加载失败: \"",[74,15986,1398],{"class":88},[74,15988,15946],{"class":84},[74,15990,1392],{"class":88},[74,15992,1312],{"class":80},[74,15994,1414],{"class":84},[74,15996,15997,15999,16001],{"class":76,"line":4080},[74,15998,7331],{"class":88},[74,16000,1791],{"class":104},[74,16002,570],{"class":84},[74,16004,16005],{"class":76,"line":4115},[74,16006,2388],{"class":84},[74,16008,16009],{"class":76,"line":4152},[74,16010,1430],{"class":84},[74,16012,16013],{"class":76,"line":4157},[74,16014,1184],{"emptyLinePlaceholder":1183},[74,16016,16017],{"class":76,"line":4192},[74,16018,6604],{"class":914},[74,16020,16021,16023,16025],{"class":76,"line":4229},[74,16022,6609],{"class":914},[74,16024,6379],{"class":88},[74,16026,16027],{"class":914}," 使用指定字体\n",[74,16029,16030,16032,16034,16036],{"class":76,"line":4268},[74,16031,6609],{"class":914},[74,16033,6621],{"class":88},[74,16035,15664],{"class":879},[74,16037,15667],{"class":914},[74,16039,16040,16042,16044],{"class":76,"line":4307},[74,16041,6609],{"class":914},[74,16043,8496],{"class":88},[74,16045,16046],{"class":914}," 是否成功使用字体\n",[74,16048,16049],{"class":76,"line":4344},[74,16050,6656],{"class":914},[74,16052,16053,16055,16058,16060,16062,16064,16066,16068,16070,16072],{"class":76,"line":4379},[74,16054,2154],{"class":88},[74,16056,16057],{"class":80}," useFont",[74,16059,101],{"class":84},[74,16061,1369],{"class":88},[74,16063,1312],{"class":80},[74,16065,95],{"class":84},[74,16067,1291],{"class":80},[74,16069,1377],{"class":88},[74,16071,15664],{"class":879},[74,16073,1252],{"class":84},[74,16075,16076,16078,16080,16082,16085,16087],{"class":76,"line":4384},[74,16077,14964],{"class":88},[74,16079,14967],{"class":84},[74,16081,89],{"class":88},[74,16083,16084],{"class":84}," fonts.",[74,16086,14975],{"class":80},[74,16088,16089],{"class":84},"(fontName);\n",[74,16091,16092,16094,16096,16098,16100,16102,16104,16106],{"class":76,"line":4417},[74,16093,2250],{"class":88},[74,16095,14985],{"class":84},[74,16097,14988],{"class":88},[74,16099,16084],{"class":84},[74,16101,14993],{"class":80},[74,16103,1407],{"class":84},[74,16105,2241],{"class":88},[74,16107,16108],{"class":84}," it->second) {\n",[74,16110,16111,16114,16116,16119],{"class":76,"line":4452},[74,16112,16113],{"class":80},"            ImGui",[74,16115,95],{"class":84},[74,16117,16118],{"class":80},"PushFont",[74,16120,16121],{"class":84},"(it->second);\n",[74,16123,16124,16126,16128],{"class":76,"line":4489},[74,16125,7331],{"class":88},[74,16127,1654],{"class":104},[74,16129,570],{"class":84},[74,16131,16132],{"class":76,"line":4526},[74,16133,2388],{"class":84},[74,16135,16136,16138,16140],{"class":76,"line":4561},[74,16137,1340],{"class":88},[74,16139,1791],{"class":104},[74,16141,570],{"class":84},[74,16143,16144],{"class":76,"line":4594},[74,16145,1430],{"class":84},[74,16147,16148],{"class":76,"line":4599},[74,16149,1184],{"emptyLinePlaceholder":1183},[74,16151,16152],{"class":76,"line":4638},[74,16153,6604],{"class":914},[74,16155,16156,16158,16160],{"class":76,"line":4675},[74,16157,6609],{"class":914},[74,16159,6379],{"class":88},[74,16161,16162],{"class":914}," 弹出当前字体\n",[74,16164,16165,16167,16169],{"class":76,"line":4710},[74,16166,6609],{"class":914},[74,16168,8496],{"class":88},[74,16170,16171],{"class":914}," 是否成功弹出字体\n",[74,16173,16174],{"class":76,"line":4745},[74,16175,6656],{"class":914},[74,16177,16178,16180,16183],{"class":76,"line":4782},[74,16179,2154],{"class":88},[74,16181,16182],{"class":80}," popFont",[74,16184,1297],{"class":84},[74,16186,16187,16189,16191,16193,16195,16197,16199,16201],{"class":76,"line":4821},[74,16188,11714],{"class":80},[74,16190,1377],{"class":88},[74,16192,11719],{"class":84},[74,16194,89],{"class":88},[74,16196,11724],{"class":80},[74,16198,95],{"class":84},[74,16200,11729],{"class":80},[74,16202,1355],{"class":84},[74,16204,16205,16207,16210,16212,16214],{"class":76,"line":4826},[74,16206,2250],{"class":88},[74,16208,16209],{"class":84}," (io.Fonts->Fonts.Size ",[74,16211,1954],{"class":88},[74,16213,5968],{"class":104},[74,16215,1252],{"class":84},[74,16217,16218,16220,16222,16225],{"class":76,"line":4863},[74,16219,16113],{"class":80},[74,16221,95],{"class":84},[74,16223,16224],{"class":80},"PopFont",[74,16226,1355],{"class":84},[74,16228,16229,16231,16233],{"class":76,"line":4898},[74,16230,7331],{"class":88},[74,16232,1654],{"class":104},[74,16234,570],{"class":84},[74,16236,16237],{"class":76,"line":4931},[74,16238,2388],{"class":84},[74,16240,16241,16243,16245],{"class":76,"line":4964},[74,16242,1340],{"class":88},[74,16244,1791],{"class":104},[74,16246,570],{"class":84},[74,16248,16249],{"class":76,"line":4999},[74,16250,1430],{"class":84},[74,16252,16253],{"class":76,"line":5035},[74,16254,1184],{"emptyLinePlaceholder":1183},[74,16256,16257],{"class":76,"line":5041},[74,16258,6604],{"class":914},[74,16260,16261,16263,16265],{"class":76,"line":5046},[74,16262,6609],{"class":914},[74,16264,6379],{"class":88},[74,16266,16267],{"class":914}," 设置默认字体\n",[74,16269,16270,16272,16274,16276],{"class":76,"line":5052},[74,16271,6609],{"class":914},[74,16273,6621],{"class":88},[74,16275,15664],{"class":879},[74,16277,15667],{"class":914},[74,16279,16280],{"class":76,"line":5057},[74,16281,6656],{"class":914},[74,16283,16284,16286,16289,16291,16293,16295,16297,16299,16301,16303],{"class":76,"line":5063},[74,16285,7004],{"class":88},[74,16287,16288],{"class":80}," setDefaultFont",[74,16290,101],{"class":84},[74,16292,1369],{"class":88},[74,16294,1312],{"class":80},[74,16296,95],{"class":84},[74,16298,1291],{"class":80},[74,16300,1377],{"class":88},[74,16302,15664],{"class":879},[74,16304,1252],{"class":84},[74,16306,16307,16309,16312,16314,16317,16319,16321,16323],{"class":76,"line":5075},[74,16308,2250],{"class":88},[74,16310,16311],{"class":84}," (fonts.",[74,16313,14975],{"class":80},[74,16315,16316],{"class":84},"(fontName) ",[74,16318,14988],{"class":88},[74,16320,16084],{"class":84},[74,16322,14993],{"class":80},[74,16324,3188],{"class":84},[74,16326,16327,16330,16332],{"class":76,"line":5085},[74,16328,16329],{"class":84},"            defaultFont ",[74,16331,89],{"class":88},[74,16333,15885],{"class":84},[74,16335,16336],{"class":76,"line":5105},[74,16337,2388],{"class":84},[74,16339,16340],{"class":76,"line":5123},[74,16341,1430],{"class":84},[74,16343,16344],{"class":76,"line":5128},[74,16345,1184],{"emptyLinePlaceholder":1183},[74,16347,16348],{"class":76,"line":5134},[74,16349,6604],{"class":914},[74,16351,16352,16354,16356],{"class":76,"line":5143},[74,16353,6609],{"class":914},[74,16355,6379],{"class":88},[74,16357,16358],{"class":914}," 获取字体\n",[74,16360,16361,16363,16365,16367],{"class":76,"line":5155},[74,16362,6609],{"class":914},[74,16364,6621],{"class":88},[74,16366,15664],{"class":879},[74,16368,15667],{"class":914},[74,16370,16371,16373,16375],{"class":76,"line":5167},[74,16372,6609],{"class":914},[74,16374,8496],{"class":88},[74,16376,16377],{"class":914}," 字体指针\n",[74,16379,16380],{"class":76,"line":5177},[74,16381,6656],{"class":914},[74,16383,16384,16387,16389,16392,16394,16396,16398,16400,16402,16404,16406],{"class":76,"line":5188},[74,16385,16386],{"class":80},"    ImFont",[74,16388,593],{"class":88},[74,16390,16391],{"class":80}," getFont",[74,16393,101],{"class":84},[74,16395,1369],{"class":88},[74,16397,1312],{"class":80},[74,16399,95],{"class":84},[74,16401,1291],{"class":80},[74,16403,1377],{"class":88},[74,16405,15664],{"class":879},[74,16407,1252],{"class":84},[74,16409,16410,16412,16414,16416,16418,16420],{"class":76,"line":5198},[74,16411,14964],{"class":88},[74,16413,14967],{"class":84},[74,16415,89],{"class":88},[74,16417,16084],{"class":84},[74,16419,14975],{"class":80},[74,16421,16089],{"class":84},[74,16423,16424,16426,16428,16430,16432,16434,16436,16438,16441,16444,16446],{"class":76,"line":5220},[74,16425,1340],{"class":88},[74,16427,14985],{"class":84},[74,16429,14988],{"class":88},[74,16431,16084],{"class":84},[74,16433,14993],{"class":80},[74,16435,590],{"class":84},[74,16437,9025],{"class":88},[74,16439,16440],{"class":84}," it->second ",[74,16442,16443],{"class":88},":",[74,16445,15772],{"class":104},[74,16447,570],{"class":84},[74,16449,16450],{"class":76,"line":5232},[74,16451,1430],{"class":84},[74,16453,16454],{"class":76,"line":5237},[74,16455,1184],{"emptyLinePlaceholder":1183},[74,16457,16458],{"class":76,"line":5243},[74,16459,6604],{"class":914},[74,16461,16462,16464,16466],{"class":76,"line":5251},[74,16463,6609],{"class":914},[74,16465,6379],{"class":88},[74,16467,16468],{"class":914}," 检查字体是否存在\n",[74,16470,16471,16473,16475,16477],{"class":76,"line":5261},[74,16472,6609],{"class":914},[74,16474,6621],{"class":88},[74,16476,15664],{"class":879},[74,16478,15667],{"class":914},[74,16480,16481,16483,16485],{"class":76,"line":5270},[74,16482,6609],{"class":914},[74,16484,8496],{"class":88},[74,16486,15572],{"class":914},[74,16488,16489],{"class":76,"line":5280},[74,16490,6656],{"class":914},[74,16492,16493,16495,16498,16500,16502,16504,16506,16508,16510,16512,16514,16516],{"class":76,"line":5289},[74,16494,2154],{"class":88},[74,16496,16497],{"class":80}," hasFont",[74,16499,101],{"class":84},[74,16501,1369],{"class":88},[74,16503,1312],{"class":80},[74,16505,95],{"class":84},[74,16507,1291],{"class":80},[74,16509,1377],{"class":88},[74,16511,15664],{"class":879},[74,16513,7466],{"class":84},[74,16515,1369],{"class":88},[74,16517,1328],{"class":84},[74,16519,16520,16522,16524,16526,16528,16530,16532,16534],{"class":76,"line":5298},[74,16521,1340],{"class":88},[74,16523,16084],{"class":84},[74,16525,14975],{"class":80},[74,16527,16316],{"class":84},[74,16529,14988],{"class":88},[74,16531,16084],{"class":84},[74,16533,14993],{"class":80},[74,16535,1355],{"class":84},[74,16537,16538],{"class":76,"line":5317},[74,16539,1430],{"class":84},[74,16541,16542],{"class":76,"line":5326},[74,16543,1184],{"emptyLinePlaceholder":1183},[74,16545,16546],{"class":76,"line":5331},[74,16547,6604],{"class":914},[74,16549,16550,16552,16554],{"class":76,"line":5336},[74,16551,6609],{"class":914},[74,16553,6379],{"class":88},[74,16555,16556],{"class":914}," 关闭 ImGui 管理器\n",[74,16558,16559],{"class":76,"line":5342},[74,16560,6656],{"class":914},[74,16562,16563,16565,16568],{"class":76,"line":5352},[74,16564,7004],{"class":88},[74,16566,16567],{"class":80}," shutdown",[74,16569,1297],{"class":84},[74,16571,16572,16574,16576,16578,16580,16582],{"class":76,"line":5369},[74,16573,2250],{"class":88},[74,16575,923],{"class":84},[74,16577,1736],{"class":88},[74,16579,15172],{"class":84},[74,16581,1742],{"class":88},[74,16583,570],{"class":84},[74,16585,16586],{"class":76,"line":5381},[74,16587,5746],{"class":84},[74,16589,16590,16593],{"class":76,"line":5386},[74,16591,16592],{"class":80},"        ImGui_ImplOpenGL3_Shutdown",[74,16594,1355],{"class":84},[74,16596,16597,16600],{"class":76,"line":5392},[74,16598,16599],{"class":80},"        ImGui_ImplGlfw_Shutdown",[74,16601,1355],{"class":84},[74,16603,16604,16606,16608,16611],{"class":76,"line":5402},[74,16605,11506],{"class":80},[74,16607,95],{"class":84},[74,16609,16610],{"class":80},"DestroyContext",[74,16612,1355],{"class":84},[74,16614,16615],{"class":76,"line":5419},[74,16616,5746],{"class":84},[74,16618,16619,16621,16623,16625],{"class":76,"line":5431},[74,16620,14748],{"class":84},[74,16622,89],{"class":88},[74,16624,1791],{"class":104},[74,16626,570],{"class":84},[74,16628,16629,16632,16635],{"class":76,"line":5446},[74,16630,16631],{"class":84},"        windows.",[74,16633,16634],{"class":80},"clear",[74,16636,1355],{"class":84},[74,16638,16639,16642,16644],{"class":76,"line":5451},[74,16640,16641],{"class":84},"        fonts.",[74,16643,16634],{"class":80},[74,16645,1355],{"class":84},[74,16647,16648,16651,16653],{"class":76,"line":5460},[74,16649,16650],{"class":84},"        defaultFont.",[74,16652,16634],{"class":80},[74,16654,1355],{"class":84},[74,16656,16657,16659,16661,16663,16666,16668,16670],{"class":76,"line":5474},[74,16658,1386],{"class":80},[74,16660,2304],{"class":84},[74,16662,1392],{"class":88},[74,16664,16665],{"class":1121}," \"ImGui 管理器已关闭\"",[74,16667,1398],{"class":88},[74,16669,1312],{"class":80},[74,16671,1414],{"class":84},[74,16673,16674],{"class":76,"line":5497},[74,16675,1430],{"class":84},[74,16677,16678],{"class":76,"line":5502},[74,16679,1184],{"emptyLinePlaceholder":1183},[74,16681,16682],{"class":76,"line":5508},[74,16683,6432],{"class":88},[74,16685,16686],{"class":76,"line":5548},[74,16687,6604],{"class":914},[74,16689,16690,16692,16694],{"class":76,"line":5563},[74,16691,6609],{"class":914},[74,16693,6379],{"class":88},[74,16695,16696],{"class":914}," 加载默认字体\n",[74,16698,16699],{"class":76,"line":5568},[74,16700,6656],{"class":914},[74,16702,16703,16705,16708],{"class":76,"line":5574},[74,16704,7004],{"class":88},[74,16706,16707],{"class":80}," loadDefaultFonts",[74,16709,1297],{"class":84},[74,16711,16712],{"class":76,"line":5620},[74,16713,16714],{"class":914},"        \u002F\u002F 加载 Inter 字体\n",[74,16716,16717,16720,16722,16725,16727,16730,16732,16735,16737,16739,16741,16743,16745,16748,16751],{"class":76,"line":5631},[74,16718,16719],{"class":80},"        loadFont",[74,16721,101],{"class":84},[74,16723,16724],{"class":1121},"\"Assets\u002FInter.ttc\"",[74,16726,111],{"class":84},[74,16728,16729],{"class":1121},"\"Inter\"",[74,16731,111],{"class":84},[74,16733,16734],{"class":104},"16.0",[74,16736,108],{"class":88},[74,16738,111],{"class":84},[74,16740,11594],{"class":80},[74,16742,95],{"class":84},[74,16744,11729],{"class":80},[74,16746,16747],{"class":84},"().Fonts->",[74,16749,16750],{"class":80},"GetGlyphRangesChineseFull",[74,16752,11581],{"class":84},[74,16754,16755,16757,16759,16761,16763,16766,16768,16771,16773,16775,16777,16779,16781,16783,16785],{"class":76,"line":5636},[74,16756,16719],{"class":80},[74,16758,101],{"class":84},[74,16760,16724],{"class":1121},[74,16762,111],{"class":84},[74,16764,16765],{"class":1121},"\"Inter-Large\"",[74,16767,111],{"class":84},[74,16769,16770],{"class":104},"20.0",[74,16772,108],{"class":88},[74,16774,111],{"class":84},[74,16776,11594],{"class":80},[74,16778,95],{"class":84},[74,16780,11729],{"class":80},[74,16782,16747],{"class":84},[74,16784,16750],{"class":80},[74,16786,11581],{"class":84},[74,16788,16789,16791,16793,16795,16797,16800,16802,16805,16807,16809,16811,16813,16815,16817,16819],{"class":76,"line":5642},[74,16790,16719],{"class":80},[74,16792,101],{"class":84},[74,16794,16724],{"class":1121},[74,16796,111],{"class":84},[74,16798,16799],{"class":1121},"\"Inter-Small\"",[74,16801,111],{"class":84},[74,16803,16804],{"class":104},"14.0",[74,16806,108],{"class":88},[74,16808,111],{"class":84},[74,16810,11594],{"class":80},[74,16812,95],{"class":84},[74,16814,11729],{"class":80},[74,16816,16747],{"class":84},[74,16818,16750],{"class":80},[74,16820,11581],{"class":84},[74,16822,16823],{"class":76,"line":5663},[74,16824,5746],{"class":84},[74,16826,16827],{"class":76,"line":5668},[74,16828,16829],{"class":914},"        \u002F\u002F 加载 Windows 系统黑体字体\n",[74,16831,16832,16834,16836,16839,16842,16845,16847,16850,16852,16855,16857,16860,16862,16865,16867,16869,16871,16873,16875,16877,16879],{"class":76,"line":5674},[74,16833,16719],{"class":80},[74,16835,101],{"class":84},[74,16837,16838],{"class":1121},"\"C:",[74,16840,16841],{"class":104},"\\\\",[74,16843,16844],{"class":1121},"Windows",[74,16846,16841],{"class":104},[74,16848,16849],{"class":1121},"Fonts",[74,16851,16841],{"class":104},[74,16853,16854],{"class":1121},"simhei.ttf\"",[74,16856,111],{"class":84},[74,16858,16859],{"class":1121},"\"SimHei\"",[74,16861,111],{"class":84},[74,16863,16864],{"class":104},"18.0",[74,16866,108],{"class":88},[74,16868,111],{"class":84},[74,16870,11594],{"class":80},[74,16872,95],{"class":84},[74,16874,11729],{"class":80},[74,16876,16747],{"class":84},[74,16878,16750],{"class":80},[74,16880,11581],{"class":84},[74,16882,16883,16885,16887,16889,16891,16893,16895,16897,16899,16901,16903,16906,16908,16911,16913,16915,16917,16919,16921,16923,16925],{"class":76,"line":5690},[74,16884,16719],{"class":80},[74,16886,101],{"class":84},[74,16888,16838],{"class":1121},[74,16890,16841],{"class":104},[74,16892,16844],{"class":1121},[74,16894,16841],{"class":104},[74,16896,16849],{"class":1121},[74,16898,16841],{"class":104},[74,16900,16854],{"class":1121},[74,16902,111],{"class":84},[74,16904,16905],{"class":1121},"\"SimHei-Large\"",[74,16907,111],{"class":84},[74,16909,16910],{"class":104},"22.0",[74,16912,108],{"class":88},[74,16914,111],{"class":84},[74,16916,11594],{"class":80},[74,16918,95],{"class":84},[74,16920,11729],{"class":80},[74,16922,16747],{"class":84},[74,16924,16750],{"class":80},[74,16926,11581],{"class":84},[74,16928,16929,16931,16933,16935,16937,16939,16941,16943,16945,16947,16949,16952,16954,16956,16958,16960,16962,16964,16966,16968,16970],{"class":76,"line":5696},[74,16930,16719],{"class":80},[74,16932,101],{"class":84},[74,16934,16838],{"class":1121},[74,16936,16841],{"class":104},[74,16938,16844],{"class":1121},[74,16940,16841],{"class":104},[74,16942,16849],{"class":1121},[74,16944,16841],{"class":104},[74,16946,16854],{"class":1121},[74,16948,111],{"class":84},[74,16950,16951],{"class":1121},"\"SimHei-Small\"",[74,16953,111],{"class":84},[74,16955,16734],{"class":104},[74,16957,108],{"class":88},[74,16959,111],{"class":84},[74,16961,11594],{"class":80},[74,16963,95],{"class":84},[74,16965,11729],{"class":80},[74,16967,16747],{"class":84},[74,16969,16750],{"class":80},[74,16971,11581],{"class":84},[74,16973,16974],{"class":76,"line":5704},[74,16975,5746],{"class":84},[74,16977,16978],{"class":76,"line":5712},[74,16979,16980],{"class":914},"        \u002F\u002F 设置默认字体为黑体\n",[74,16982,16983,16986,16988,16990],{"class":76,"line":5717},[74,16984,16985],{"class":80},"        setDefaultFont",[74,16987,101],{"class":84},[74,16989,16859],{"class":1121},[74,16991,125],{"class":84},[74,16993,16994],{"class":76,"line":5723},[74,16995,1430],{"class":84},[74,16997,16998],{"class":76,"line":5743},[74,16999,5038],{"class":84},[74,17001,17002],{"class":76,"line":5749},[74,17003,1184],{"emptyLinePlaceholder":1183},[74,17005,17006],{"class":76,"line":5755},[74,17007,1184],{"emptyLinePlaceholder":1183},[74,17009,17010],{"class":76,"line":5789},[74,17011,6371],{"class":914},[74,17013,17014,17016,17018],{"class":76,"line":5804},[74,17015,6376],{"class":914},[74,17017,6379],{"class":88},[74,17019,17020],{"class":914}," 预定义的窗口创建器 - 提供常用的窗口模板\n",[74,17022,17023],{"class":76,"line":5809},[74,17024,6417],{"class":914},[74,17026,17027,17029,17032],{"class":76,"line":5815},[74,17028,6422],{"class":88},[74,17030,17031],{"class":80}," ImGuiWindowTemplates",[74,17033,1328],{"class":84},[74,17035,17036],{"class":76,"line":5826},[74,17037,6599],{"class":88},[74,17039,17040],{"class":76,"line":5831},[74,17041,6604],{"class":914},[74,17043,17044,17046,17048],{"class":76,"line":5837},[74,17045,6609],{"class":914},[74,17047,6379],{"class":88},[74,17049,17050],{"class":914}," 创建信息显示窗口\n",[74,17052,17053,17055,17057,17060],{"class":76,"line":5853},[74,17054,6609],{"class":914},[74,17056,6621],{"class":88},[74,17058,17059],{"class":879}," title",[74,17061,17062],{"class":914}," 窗口标题\n",[74,17064,17065,17067,17069,17072],{"class":76,"line":5868},[74,17066,6609],{"class":914},[74,17068,6621],{"class":88},[74,17070,17071],{"class":879}," infoFunc",[74,17073,17074],{"class":914}," 信息获取函数\n",[74,17076,17077,17079,17081],{"class":76,"line":5883},[74,17078,6609],{"class":914},[74,17080,8496],{"class":88},[74,17082,17083],{"class":914}," 窗口渲染函数\n",[74,17085,17086],{"class":76,"line":5888},[74,17087,6656],{"class":914},[74,17089,17090,17092,17094,17096,17098,17100,17102,17104,17107],{"class":76,"line":5907},[74,17091,6947],{"class":88},[74,17093,1312],{"class":80},[74,17095,95],{"class":84},[74,17097,14332],{"class":80},[74,17099,1985],{"class":84},[74,17101,865],{"class":88},[74,17103,14876],{"class":84},[74,17105,17106],{"class":80},"createInfoWindow",[74,17108,17109],{"class":84},"(\n",[74,17111,17112,17115,17117,17119,17121,17123,17125],{"class":76,"line":5925},[74,17113,17114],{"class":88},"        const",[74,17116,1312],{"class":80},[74,17118,95],{"class":84},[74,17120,1291],{"class":80},[74,17122,1377],{"class":88},[74,17124,17059],{"class":879},[74,17126,15742],{"class":84},[74,17128,17129,17131,17133,17135,17137,17139,17141,17143,17145],{"class":76,"line":5930},[74,17130,1386],{"class":80},[74,17132,95],{"class":84},[74,17134,14332],{"class":80},[74,17136,1985],{"class":84},[74,17138,1286],{"class":80},[74,17140,95],{"class":84},[74,17142,1291],{"class":80},[74,17144,14876],{"class":84},[74,17146,17147],{"class":879},"infoFunc\n",[74,17149,17150],{"class":76,"line":5939},[74,17151,17152],{"class":84},"    ) {\n",[74,17154,17155,17157,17160,17163,17165,17168],{"class":76,"line":5944},[74,17156,1340],{"class":88},[74,17158,17159],{"class":84}," [",[74,17161,17162],{"class":879},"title",[74,17164,111],{"class":84},[74,17166,17167],{"class":879},"infoFunc",[74,17169,17170],{"class":84},"]() {\n",[74,17172,17173,17175,17177,17179,17181,17184,17186,17189,17192,17194],{"class":76,"line":5950},[74,17174,16113],{"class":80},[74,17176,95],{"class":84},[74,17178,11511],{"class":80},[74,17180,101],{"class":84},[74,17182,17183],{"class":1121},"\"=== ",[74,17185,11534],{"class":104},[74,17187,17188],{"class":1121}," ===\"",[74,17190,17191],{"class":84},", title.",[74,17193,15298],{"class":80},[74,17195,11581],{"class":84},[74,17197,17198,17200,17202,17205],{"class":76,"line":5987},[74,17199,16113],{"class":80},[74,17201,95],{"class":84},[74,17203,17204],{"class":80},"Separator",[74,17206,1355],{"class":84},[74,17208,17209,17211,17213,17215,17217,17219,17221,17223,17225,17227,17229,17231],{"class":76,"line":6017},[74,17210,16113],{"class":80},[74,17212,95],{"class":84},[74,17214,11511],{"class":80},[74,17216,101],{"class":84},[74,17218,8935],{"class":1121},[74,17220,11534],{"class":104},[74,17222,8935],{"class":1121},[74,17224,111],{"class":84},[74,17226,17167],{"class":80},[74,17228,1350],{"class":84},[74,17230,15298],{"class":80},[74,17232,11581],{"class":84},[74,17234,17235],{"class":76,"line":6035},[74,17236,17237],{"class":84},"        };\n",[74,17239,17240],{"class":76,"line":6056},[74,17241,1430],{"class":84},[74,17243,17244],{"class":76,"line":6108},[74,17245,1184],{"emptyLinePlaceholder":1183},[74,17247,17248],{"class":76,"line":6123},[74,17249,6604],{"class":914},[74,17251,17252,17254,17256],{"class":76,"line":6128},[74,17253,6609],{"class":914},[74,17255,6379],{"class":88},[74,17257,17258],{"class":914}," 创建控制面板窗口\n",[74,17260,17261,17263,17265,17268],{"class":76,"line":6146},[74,17262,6609],{"class":914},[74,17264,6621],{"class":88},[74,17266,17267],{"class":879}," controls",[74,17269,17270],{"class":914}," 控制函数列表\n",[74,17272,17273,17275,17277],{"class":76,"line":6151},[74,17274,6609],{"class":914},[74,17276,8496],{"class":88},[74,17278,17083],{"class":914},[74,17280,17281],{"class":76,"line":6156},[74,17282,6656],{"class":914},[74,17284,17285,17287,17289,17291,17293,17295,17297,17299,17302],{"class":76,"line":6162},[74,17286,6947],{"class":88},[74,17288,1312],{"class":80},[74,17290,95],{"class":84},[74,17292,14332],{"class":80},[74,17294,1985],{"class":84},[74,17296,865],{"class":88},[74,17298,14876],{"class":84},[74,17300,17301],{"class":80},"createControlPanel",[74,17303,17109],{"class":84},[74,17305,17306,17308,17310,17312,17314,17316,17318,17320,17322,17324,17327],{"class":76,"line":6170},[74,17307,1386],{"class":80},[74,17309,95],{"class":84},[74,17311,3150],{"class":80},[74,17313,1985],{"class":84},[74,17315,1286],{"class":80},[74,17317,95],{"class":84},[74,17319,14332],{"class":80},[74,17321,1985],{"class":84},[74,17323,865],{"class":88},[74,17325,17326],{"class":84},"()>> ",[74,17328,17329],{"class":879},"controls\n",[74,17331,17332],{"class":76,"line":6175},[74,17333,17152],{"class":84},[74,17335,17336,17338,17340,17343],{"class":76,"line":6180},[74,17337,1340],{"class":88},[74,17339,17159],{"class":84},[74,17341,17342],{"class":879},"controls",[74,17344,17170],{"class":84},[74,17346,17347,17350,17352,17354,17356],{"class":76,"line":6186},[74,17348,17349],{"class":88},"            for",[74,17351,923],{"class":84},[74,17353,1369],{"class":88},[74,17355,15268],{"class":88},[74,17357,17358],{"class":84}," control : controls) {\n",[74,17360,17361,17364],{"class":76,"line":6202},[74,17362,17363],{"class":80},"                control",[74,17365,1355],{"class":84},[74,17367,17368],{"class":76,"line":6218},[74,17369,15332],{"class":84},[74,17371,17372],{"class":76,"line":6235},[74,17373,17237],{"class":84},[74,17375,17376],{"class":76,"line":6251},[74,17377,1430],{"class":84},[74,17379,17380],{"class":76,"line":6259},[74,17381,1184],{"emptyLinePlaceholder":1183},[74,17383,17384],{"class":76,"line":6269},[74,17385,6604],{"class":914},[74,17387,17389,17391,17393],{"class":76,"line":17388},346,[74,17390,6609],{"class":914},[74,17392,6379],{"class":88},[74,17394,17395],{"class":914}," 创建性能监控窗口\n",[74,17397,17399,17401,17403],{"class":76,"line":17398},347,[74,17400,6609],{"class":914},[74,17402,8496],{"class":88},[74,17404,17083],{"class":914},[74,17406,17408],{"class":76,"line":17407},348,[74,17409,6656],{"class":914},[74,17411,17413,17415,17417,17419,17421,17423,17425,17427,17430],{"class":76,"line":17412},349,[74,17414,6947],{"class":88},[74,17416,1312],{"class":80},[74,17418,95],{"class":84},[74,17420,14332],{"class":80},[74,17422,1985],{"class":84},[74,17424,865],{"class":88},[74,17426,14876],{"class":84},[74,17428,17429],{"class":80},"createPerformanceWindow",[74,17431,1297],{"class":84},[74,17433,17435,17437],{"class":76,"line":17434},350,[74,17436,1340],{"class":88},[74,17438,17439],{"class":84}," []() {\n",[74,17441,17443,17446,17448,17450,17452,17454,17456,17458],{"class":76,"line":17442},351,[74,17444,17445],{"class":80},"            ImGuiIO",[74,17447,1377],{"class":88},[74,17449,11719],{"class":84},[74,17451,89],{"class":88},[74,17453,11724],{"class":80},[74,17455,95],{"class":84},[74,17457,11729],{"class":80},[74,17459,1355],{"class":84},[74,17461,17463,17465,17467,17469,17471,17473],{"class":76,"line":17462},352,[74,17464,16113],{"class":80},[74,17466,95],{"class":84},[74,17468,11511],{"class":80},[74,17470,101],{"class":84},[74,17472,10482],{"class":1121},[74,17474,125],{"class":84},[74,17476,17478,17480,17482,17484],{"class":76,"line":17477},353,[74,17479,16113],{"class":80},[74,17481,95],{"class":84},[74,17483,17204],{"class":80},[74,17485,1355],{"class":84},[74,17487,17489,17491,17493,17495,17497,17499,17501,17503],{"class":76,"line":17488},354,[74,17490,16113],{"class":80},[74,17492,95],{"class":84},[74,17494,11511],{"class":80},[74,17496,101],{"class":84},[74,17498,11744],{"class":1121},[74,17500,11747],{"class":104},[74,17502,8935],{"class":1121},[74,17504,11752],{"class":84},[74,17506,17508,17510,17512,17514,17516,17518,17520,17522,17524,17526,17528,17530],{"class":76,"line":17507},355,[74,17509,16113],{"class":80},[74,17511,95],{"class":84},[74,17513,11511],{"class":80},[74,17515,101],{"class":84},[74,17517,11765],{"class":1121},[74,17519,11571],{"class":104},[74,17521,11770],{"class":1121},[74,17523,111],{"class":84},[74,17525,11775],{"class":104},[74,17527,108],{"class":88},[74,17529,2765],{"class":88},[74,17531,11782],{"class":84},[74,17533,17535,17537,17539,17541,17543,17546,17549,17551],{"class":76,"line":17534},356,[74,17536,16113],{"class":80},[74,17538,95],{"class":84},[74,17540,11511],{"class":80},[74,17542,101],{"class":84},[74,17544,17545],{"class":1121},"\"绘制调用: ",[74,17547,17548],{"class":104},"%d",[74,17550,8935],{"class":1121},[74,17552,17553],{"class":84},", io.MetricsRenderVertices);\n",[74,17555,17557],{"class":76,"line":17556},357,[74,17558,17237],{"class":84},[74,17560,17562],{"class":76,"line":17561},358,[74,17563,1430],{"class":84},[74,17565,17567],{"class":76,"line":17566},359,[74,17568,1184],{"emptyLinePlaceholder":1183},[74,17570,17572],{"class":76,"line":17571},360,[74,17573,6604],{"class":914},[74,17575,17577,17579,17581],{"class":76,"line":17576},361,[74,17578,6609],{"class":914},[74,17580,6379],{"class":88},[74,17582,17583],{"class":914}," 创建调试信息窗口\n",[74,17585,17587,17589,17591,17594],{"class":76,"line":17586},362,[74,17588,6609],{"class":914},[74,17590,6621],{"class":88},[74,17592,17593],{"class":879}," debugInfo",[74,17595,17596],{"class":914}," 调试信息获取函数\n",[74,17598,17600,17602,17604],{"class":76,"line":17599},363,[74,17601,6609],{"class":914},[74,17603,8496],{"class":88},[74,17605,17083],{"class":914},[74,17607,17609],{"class":76,"line":17608},364,[74,17610,6656],{"class":914},[74,17612,17614,17616,17618,17620,17622,17624,17626,17628,17631],{"class":76,"line":17613},365,[74,17615,6947],{"class":88},[74,17617,1312],{"class":80},[74,17619,95],{"class":84},[74,17621,14332],{"class":80},[74,17623,1985],{"class":84},[74,17625,865],{"class":88},[74,17627,14876],{"class":84},[74,17629,17630],{"class":80},"createDebugWindow",[74,17632,17109],{"class":84},[74,17634,17636,17638,17640,17642,17644,17646,17648,17650,17652],{"class":76,"line":17635},366,[74,17637,1386],{"class":80},[74,17639,95],{"class":84},[74,17641,14332],{"class":80},[74,17643,1985],{"class":84},[74,17645,1286],{"class":80},[74,17647,95],{"class":84},[74,17649,1291],{"class":80},[74,17651,14876],{"class":84},[74,17653,17654],{"class":879},"debugInfo\n",[74,17656,17658],{"class":76,"line":17657},367,[74,17659,17152],{"class":84},[74,17661,17663,17665,17667,17670],{"class":76,"line":17662},368,[74,17664,1340],{"class":88},[74,17666,17159],{"class":84},[74,17668,17669],{"class":879},"debugInfo",[74,17671,17170],{"class":84},[74,17673,17675,17677,17679,17681,17683,17685],{"class":76,"line":17674},369,[74,17676,16113],{"class":80},[74,17678,95],{"class":84},[74,17680,11511],{"class":80},[74,17682,101],{"class":84},[74,17684,10514],{"class":1121},[74,17686,125],{"class":84},[74,17688,17690,17692,17694,17696],{"class":76,"line":17689},370,[74,17691,16113],{"class":80},[74,17693,95],{"class":84},[74,17695,17204],{"class":80},[74,17697,1355],{"class":84},[74,17699,17701,17703,17705,17708,17710,17712,17714,17716,17718,17720,17722,17724],{"class":76,"line":17700},371,[74,17702,16113],{"class":80},[74,17704,95],{"class":84},[74,17706,17707],{"class":80},"TextWrapped",[74,17709,101],{"class":84},[74,17711,8935],{"class":1121},[74,17713,11534],{"class":104},[74,17715,8935],{"class":1121},[74,17717,111],{"class":84},[74,17719,17669],{"class":80},[74,17721,1350],{"class":84},[74,17723,15298],{"class":80},[74,17725,11581],{"class":84},[74,17727,17729],{"class":76,"line":17728},372,[74,17730,17237],{"class":84},[74,17732,17734],{"class":76,"line":17733},373,[74,17735,1430],{"class":84},[74,17737,17739],{"class":76,"line":17738},374,[74,17740,5038],{"class":84},[17742,17743,17744],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":19,"searchDepth":192,"depth":192,"links":17746},[17747,17753,17754,17755,17758,17759,17767,17770,17776,17777,17778],{"id":27,"depth":192,"text":28,"children":17748},[17749,17750,17751,17752],{"id":58,"depth":475,"text":58},{"id":139,"depth":475,"text":139},{"id":230,"depth":475,"text":230},{"id":313,"depth":475,"text":313},{"id":368,"depth":192,"text":369},{"id":6274,"depth":192,"text":6274},{"id":9352,"depth":192,"text":9353,"children":17756},[17757],{"id":9356,"depth":475,"text":9357},{"id":9394,"depth":192,"text":9395},{"id":9475,"depth":192,"text":9476,"children":17760},[17761,17763,17765],{"id":9479,"depth":475,"text":17762},"1. DPI 漂移检测",{"id":9524,"depth":475,"text":17764},"2. 平滑处理",{"id":9558,"depth":475,"text":17766},"3. 统计监控",{"id":9579,"depth":192,"text":9580,"children":17768},[17769],{"id":9583,"depth":475,"text":9584},{"id":9645,"depth":192,"text":9646,"children":17771},[17772,17774],{"id":9649,"depth":475,"text":17773},"1. 基本使用",{"id":9773,"depth":475,"text":17775},"2. 高级功能",{"id":9876,"depth":192,"text":9877},{"id":9912,"depth":192,"text":9913},{"id":9942,"depth":192,"text":9943},"md",{},"\u002Fgraphy\u002Fopengel\u002F摄像机",{"description":19},"graphy\u002Fopengel\u002F摄像机","iC20acpBFuY8Si671DDQROHJbljTgarPlH3t5QeSa7g",1792338203906]