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

在Rust Macroquad中填充四点围成区域(3D立方体投影场景)

在Macroquad中填充任意四边形区域

要填充四个点围成的非矩形区域,Macroquad提供了直接支持多边形填充的draw_polygon函数,完全适配你3D立方体投影到2D的场景。具体实现步骤如下:

步骤1:转换坐标类型

Macroquad的绘图API使用Vec2结构体表示2D坐标,你需要先把现有的Vec数组转换成Vec2:

use macroquad::math::Vec2;

// 假设你的x1/y1等是f32类型,如果是整数需要先转成f32
let a = Vec2::new(x1, y1);
let b = Vec2::new(x2, y2);
let c = Vec2::new(x3, y3);
let d = Vec2::new(x4, y4);

步骤2:按顺序排列点

确保四个点是顺时针或逆时针连续排列的(不能交叉)——3D立方体的面顶点投影后,只要保持原面的顶点顺序(比如立方体正面的四个顶点按顺时针排列),投影后的点顺序也能保证四边形是凸的,填充不会出错。

步骤3:调用填充函数

使用draw_polygon直接填充区域,同时可以可选添加边框:

use macroquad::color::Color;
use macroquad::shapes::draw_polygon;

// 定义填充颜色(比如半透明蓝色)
let fill_color = Color::new(0.2, 0.4, 0.8, 0.7);
// 可选:边框颜色和宽度
let stroke_color = Color::new(0.0, 0.0, 0.0, 1.0);
let stroke_width = 1.0;

// 把点按顺序放入数组
let polygon_points = [a, b, c, d];

// 执行填充
draw_polygon(
    &polygon_points,
    fill_color,
    Some((stroke_color, stroke_width))
);

常见问题排查

  • 如果填充区域显示异常(比如空洞、反向),检查点的排列顺序,尝试颠倒整个顺序(比如改成[d, c, b, a])。
  • 如果你的坐标是整数类型(比如i32),需要先转换成f32:Vec2::new(x1 as f32, y1 as f32)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:20