Prechádzať zdrojové kódy

修复OpenGL矩阵模式设置,解决3D树状图显示问题

zhong (钟鹏群) 1 mesiac pred
rodič
commit
7a1d88d0a2
1 zmenil súbory, kde vykonal 20 pridanie a 3 odobranie
  1. 20 3
      ball-demo.py

+ 20 - 3
ball-demo.py

@@ -51,10 +51,16 @@ glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient)
 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse)
 glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular)
 
-# 设置视角
+# 设置投影矩阵(透视投影)
+glMatrixMode(GL_PROJECTION)
+glLoadIdentity()
 gluPerspective(45, (width/height), 0.1, 50.0)
-# 移动相机
-glTranslatef(0.0, 0.0, -5)
+
+# 设置模型视图矩阵
+glMatrixMode(GL_MODELVIEW)
+glLoadIdentity()
+# 移动相机(现在在主循环中每帧设置)
+# glTranslatef(0.0, 0.0, -5)
 
 def build_directory_tree(root_path, max_depth=3, max_children_per_node=30):
     # 递归扫描目录树
@@ -182,12 +188,18 @@ blinking_nodes = set()
 file_content_cache = {}
 blink_start_time = pygame.time.get_ticks()
 
+# 旋转控制变量
+rotation_angle = 0.0
+
 # 主循环
 running = True
 while running:
     # 获取当前时间(用于闪烁效果)
     current_time = pygame.time.get_ticks()
     
+    # 更新旋转角度(每10秒旋转一圈)
+    rotation_angle = (current_time * 0.036) % 360.0
+    
     # 检查剪贴板内容是否变化(如果剪贴板功能可用)
     if clipboard_available:
         if current_time - clipboard_check_time > 1000:  # 每秒检查一次
@@ -251,6 +263,11 @@ while running:
     # 清除屏幕
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
+    # 重置模型视图矩阵并设置相机位置
+    glLoadIdentity()
+    glTranslatef(0.0, 0.0, -5)  # 相机向后移动
+    glRotatef(rotation_angle, 0.0, 1.0, 0.0)  # 绕竖直中线/Y轴旋转
+    
     # 目录树可视化
     ball_radius = 0.0667  # 节点球的半径(原来的1/3)