Web Dev #WebGL #Web Development #Frontend #JavaScript

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

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

5 min read/ Easy

為什麼選擇 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 進行組件化封裝。