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

求助:基于ThreeJS将冰壶模型代码转换为保龄球瓶模型

基于Three.js实现保龄球瓶模型的改造方案

核心思路

保龄球瓶是旋转对称几何体,和冰壶一样适合用THREE.LatheGeometry实现。我们只需要重新定义轮廓顶点、调整尺寸参数,替换原冰壶的生成逻辑即可。

改造后的完整代码

// 保龄球瓶基础尺寸常量(可根据游戏场景缩放)
const PIN_HEIGHT = 38; // 参考标准保龄球瓶高度比例设置
const PIN_BASE_RADIUS = 3; // 底部半径
const PIN_MAX_RADIUS = 5.4; // 瓶身最粗处半径
const PIN_NECK_RADIUS = 2.5; // 颈部收窄处半径
const PIN_TOP_RADIUS = 1.2; // 瓶口顶部半径

makeBowlingPin(mainColor = 0xFFFFFF) { // 默认白色,可自定义颜色
  // 定义保龄球瓶的轮廓顶点(沿Y轴排列,X轴为旋转半径)
  const profilePoints = [
    new THREE.Vector2(PIN_TOP_RADIUS, PIN_HEIGHT), // 顶部顶点
    new THREE.Vector2(PIN_NECK_RADIUS, PIN_HEIGHT * 0.9), // 颈部收窄位置
    new THREE.Vector2(PIN_MAX_RADIUS, PIN_HEIGHT * 0.6), // 瓶身最粗处
    new THREE.Vector2(PIN_MAX_RADIUS * 0.8, PIN_HEIGHT * 0.3), // 瓶身向下过渡段
    new THREE.Vector2(PIN_BASE_RADIUS, PIN_HEIGHT * 0.05), // 底部边缘
    new THREE.Vector2(PIN_BASE_RADIUS * 1.1, 0), // 底部底座(略宽于瓶身增加稳定性)
    new THREE.Vector2(PIN_BASE_RADIUS * 0.9, -0.5) // 底部小凸起
  ];

  // 创建材质(保留Phong材质支持光影效果)
  const pinMaterial = new THREE.MeshPhongMaterial({
    color: mainColor,
    flatShading: false,
    side: THREE.DoubleSide,
    shininess: 100 // 模拟保龄球瓶的光滑漆面质感
  });

  // 生成旋转几何体
  const latheGeometry = new THREE.LatheGeometry(profilePoints, 32); // 32段数保证模型平滑度
  const bowlingPin = new THREE.Mesh(latheGeometry, pinMaterial);

  return bowlingPin;
}

关键改造点说明

  • 尺寸参数适配:替换冰壶的尺寸常量为保龄球瓶的真实比例,可通过调整PIN_HEIGHT快速适配游戏场景大小。
  • 轮廓顶点重构:按照保龄球瓶“顶窄-颈收-身粗-底稳”的形态定义顶点,确保旋转后符合真实瓶身轮廓。
  • 材质优化:增加shininess参数模拟光滑漆面,默认白色贴合真实保龄球瓶样式。
  • 逻辑简化:去掉冰壶的teamColor参数(若需多色瓶可保留并调整材质逻辑),聚焦保龄球瓶核心生成逻辑。

使用示例

// 在场景中添加保龄球瓶
const pin = makeBowlingPin();
pin.position.set(0, PIN_HEIGHT/2, 0); // 调整位置使底部贴合地面
scene.add(pin);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:05:20