You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Arcade库绘制圆形时显示为三角形的问题咨询

问题描述

我尝试使用Python的Arcade库绘制一个简单的圆形,但最终显示的却是位置完全准确的三角形。

我使用的示例代码如下:

import arcade

# Set constants for the screen size
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 400
SCREEN_TITLE = "Happy Face Example"

# Open the window. Set the window title and dimensions
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)

# Set the background color
arcade.set_background_color(arcade.color.WHITE)

arcade.start_render()

# Draw the face
x = SCREEN_WIDTH // 2
y = SCREEN_HEIGHT // 2
radius = 100
arcade.draw_circle_filled(x, y, radius, arcade.color.YELLOW)

arcade.finish_render()

# Keep the window open until the user hits the 'close' button
arcade.run()

问题现象截图:
问题现象截图

我在网上搜索了数小时未找到解决方案,尝试在另一台电脑运行相同代码,成功得到了正常的圆形。

我的设备配置:

  • AMD Ryzen 5 2500U 处理器,Vega 8 显卡
  • 8 GB RAM
  • 操作系统:Ubuntu 21.10
  • Python 版本:3.10

可正常运行的设备同样搭载Ubuntu 21.10系统,配置为AMD CPU + GTX 1060 6 GB 显卡,安装的Python版本也为3.10。

请问该问题可能是什么原因导致的?


问题解答

核心原因

该问题属于AMD Vega 8核显与Ubuntu 21.10自带Mesa开源驱动的OpenGL渲染兼容性问题,与代码逻辑无关:
Arcade底层通过Pyglet调用OpenGL接口绘制图形,填充圆形的实现逻辑是生成指定数量的顶点组成三角形扇来模拟圆形边缘。Ubuntu 21.10自带的Mesa 21.2.x版本驱动对Ryzen 2500U搭载的Vega 8(Raven Ridge架构)的OpenGL参数传递存在已知bug,会把圆形的细分边数参数错误篡改为3,最终渲染为三角形。另一台设备使用的NVIDIA独显驱动无该兼容性问题,因此运行正常。

解决方案

可任选以下一种方案修复:

  • 手动指定圆形细分边数:调用draw_circle_filled时主动添加num_segments参数,强制指定顶点数量,绕过驱动参数读取bug:
    arcade.draw_circle_filled(x, y, radius, arcade.color.YELLOW, num_segments=32)
    
  • 升级Mesa驱动到22.0及以上稳定版本,修复老版本的兼容性缺陷。
  • 关闭窗口抗锯齿:调用open_window时添加antialiasing=False参数,避免抗锯齿逻辑触发渲染异常:
    arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE, antialiasing=False)
    
  • 临时使用软件渲染:运行代码前设置环境变量LIBGL_ALWAYS_SOFTWARE=1,通过CPU完成渲染绕过显卡驱动问题,适合小窗口测试场景。

内容的提问来源于stack exchange,提问作者Chironito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:03