Web Dev #WebGL #Web Development #Frontend #JavaScript

Cobe 輕量 WebGL 地球儀配置教學與 Vue 專案整合指南

想要在網頁上放一個酷炫的 3D 地球,但又不想載入沉重的 Three.js?COBE 是你的最佳選擇。

為什麼選擇 COBE?

在網頁開發中,加入 3D 元素通常意味著要載入數百 KB 的庫(例如 Three.js)。但如果你只需要一個簡單、優雅且流暢的 3D 地球,COBE 絕對會讓你驚艷。

它是一個基於 WebGL 的輕量級地球儀庫,壓縮後的大小僅約 5KB。它不依賴於任何大型框架,性能極佳,且支援高度自定義。


實作展示 (Live Demo)

下面就是我在 Nuxt 3 裡實作的 COBE 地球儀,你可以嘗試用滑鼠拖動它


官方展示 (Official Demo)

我認為官方做的非常厲害介面設計能力比我強太多了 點這裡進入官網


如何在你的專案中使用?

1. 安裝套件

你可以使用 npm 或 pnpm 安裝:

bash
npm install cobe

2. 核心代碼實作

在 Vue 3 或 Nuxt 3 中,我們需要確保程式碼在客戶端執行(因為涉及 Canvas API)。

vue
<script setup>
import createGlobe from 'cobe'
import { ref, onMounted } from 'vue'

const canvasRef = ref(null)

onMounted(() => {
  const globe = createGlobe(canvasRef.value, {
    devicePixelRatio: 2,
    width: 600 * 2,
    height: 600 * 2,
    phi: 0,
    theta: 0,
    dark: 1,
    diffuse: 1.2,
    mapSamples: 16000,
    mapBrightness: 6,
    baseColor: [0.3, 0.3, 0.3],
    markerColor: [233 / 255, 115 / 255, 40 / 255],
    glowColor: [1, 1, 1],
    markers: [
      { location: [25.0330, 121.5654], size: 0.1 }, // 標註台北
    ],
    onRender: (state) => {
      // 每一幀的旋轉邏輯
      state.phi += 0.005
    },
  })
})
</script>

<template>
  <canvas ref="canvasRef" style="width: 600px; height: 600px" />
</template>

核心配置說明

COBE 提供了豐富的參數讓你調整地球的外觀:

參數說明範例值
dark背景明暗度0 (明亮) / 1 (黑暗)
mapSamples地圖採樣點數量愈高愈細緻,但也愈吃效能 (建議 16000)
baseColor地球表面顏色[r, g, b] 格式
markerColor標記點顏色[r, g, b] 格式
markers地圖上的標註點經緯度座標清單

個人心得

我非常喜歡 COBE 的設計哲學:只做一件事,並把它做到最好。

如果你只是想為你的 Landing Page 增加一點視覺上的「高級感」,或者像我一樣想在個人部落格展示一下所在地,COBE 的 CP 值真的非常高。它不像 Three.js 那樣有極高的學習曲線,幾行程式碼就能搞定。

小建議:在 Nuxt 中使用時,記得用 <ClientOnly> 包裹,否則會因為 SSR 找不到 window/canvas 而報錯喔!


相關連結:


本文地球儀實作參考自 COBE 官方範例並針對 Nuxt 3 進行組件化封裝。