国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

03.Three.js的入門教程(二)如何創(chuàng)建一個(gè)3D地球?

這篇具有很好參考價(jià)值的文章主要介紹了03.Three.js的入門教程(二)如何創(chuàng)建一個(gè)3D地球?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:通過上節(jié)課?02.Three.js的入門課程(一),我們了解了Three.js的最小案例DEMO,熟悉了幾個(gè)重要組成部分。這節(jié)課帶領(lǐng)大家編寫一個(gè)3D地球。

一、通過紋理圖渲染一個(gè)地球

1.1.創(chuàng)建一個(gè)紋理加載器對(duì)象TextureLoader,可以加載圖片作為紋理貼圖;

// 引入three.js
import * as THREE from '../../../three.js-r123/build/three.module.js';

// 創(chuàng)建地球mesh網(wǎng)格對(duì)象
// 地球半徑
var R = 100;

var earth = createSphereMesh(R);

// R:地球半徑
function createSphereMesh(R) {

    // 創(chuàng)建紋理加載器對(duì)象
    var textureLoader = new THREE.TextureLoader();

    // 加載紋理貼圖
    var texture = textureLoader.load('earth.jpg');

    // 創(chuàng)建一個(gè)球體幾何對(duì)象
    var geometry = new THREE.SphereBufferGeometry(R, 40, 40); 
  
    // 材質(zhì)對(duì)象Material
    var material = new THREE.MeshLambertMaterial({
        // color: 0x00ffff,
        map: texture,//設(shè)置地球顏色貼圖map
    });

    // 網(wǎng)格模型對(duì)象Mesh
    var mesh = new THREE.Mesh(geometry, material); 

    return mesh;
}

export { earth }

1.2.完整代碼結(jié)構(gòu)

threejs 3d地球,javascript,html5,前端

二、小球標(biāo)注球面上一點(diǎn)

2.1.創(chuàng)建一個(gè)小球的網(wǎng)格模型

// 引入Three.js
import * as THREE from '../../../three.js-r123/build/three.module.js';

// 創(chuàng)建一個(gè)小球用于測(cè)試
function createSphereMesh(R,x,y,z) {
  // 創(chuàng)建一個(gè)球體幾何對(duì)象  
  var geometry = new THREE.SphereGeometry(R, 25, 25); 
  
  // 材質(zhì)對(duì)象Material
  var material = new THREE.MeshLambertMaterial({
      color: 0xff0000
  });

  // 網(wǎng)格模型對(duì)象Mesh
  var mesh = new THREE.Mesh(geometry, material);

  mesh.position.set(x,y,z);

  return mesh
}

export { createSphereMesh }

2.2.完整代碼

html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title></title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
    }
  </style>
</head>

<body>
  <script type="module">
        
    /**
     * 01.創(chuàng)建地球
     */
    import { scene, renderer } from './scene.js'
    // Three.js渲染結(jié)果Canvas畫布插入到body元素中
    document.body.appendChild(renderer.domElement); 
    
    /**
     * 02.創(chuàng)建小球mesh
     */
    // 地球半徑
    var R = 100;
    import { createSphereMesh } from './help.js'
    // 北極球面上繪制一個(gè)小球標(biāo)注
    scene.add(createSphereMesh(10,0,R,0));

  </script>
</body>

</html>

scene.js

/**
 * 01.引入第三方依賴
 */
// 引入Three.js
import * as THREE from '../../../three.js-r123/build/three.module.js';

// 引入Three.js擴(kuò)展庫(kù)
import { OrbitControls } from '../../../three.js-r123/examples/jsm/controls/OrbitControls.js';

// 引入地球
import { earth } from './earth.js'


/**
 * 02.創(chuàng)建場(chǎng)景對(duì)象Scene
 */
var scene = new THREE.Scene();
scene.add(earth);

/**
 * 03.光源設(shè)置
 */
// 平行光1
var directionalLight = new THREE.DirectionalLight(0xffffff, 0.6);
directionalLight.position.set(400, 200, 300);
scene.add(directionalLight);

// 平行光2
var directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.6);
directionalLight2.position.set(-400, -200, -300);
scene.add(directionalLight2);

//環(huán)境光
var ambient = new THREE.AmbientLight(0xffffff, 0.6);
scene.add(ambient);

/**
 * 04.相機(jī)設(shè)置
 */
// width和height用來設(shè)置Three.js輸出Canvas畫布尺寸,同時(shí)用來輔助設(shè)置相機(jī)渲染范圍
// 窗口文檔顯示區(qū)的寬度
var width = window.innerWidth; 
// 窗口文檔顯示區(qū)的高度
var height = window.innerHeight; 

// Three.js輸出的Cnavas畫布寬高比
var k = width / height; 
// 控制相機(jī)渲染空間左右上下渲染范圍,s越大,相機(jī)渲染范圍越大
var s = 200; 
// THREE.OrthographicCamera()創(chuàng)建一個(gè)正投影相機(jī)對(duì)象
// -s * k, s * k, s, -s, 1, 1000定義了一個(gè)長(zhǎng)方體渲染空間,渲染空間外的模型不會(huì)被渲染
var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);

// 相機(jī)在Three.js坐標(biāo)系中的位置
camera.position.set(200, 300, 200); 
// 相機(jī)指向Three.js坐標(biāo)系原點(diǎn)
camera.lookAt(0, 0, 0); 

/**
 * 05.創(chuàng)建渲染器對(duì)象
 */
var renderer = new THREE.WebGLRenderer({
  antialias: true, //開啟鋸齒
});

// 設(shè)置設(shè)備像素比率,防止Canvas畫布輸出模糊
renderer.setPixelRatio(window.devicePixelRatio);
// 設(shè)置渲染區(qū)域尺寸
renderer.setSize(width, height); 

// 設(shè)置背景顏色
// renderer.setClearColor(0xb9d3ff, 1); 
// renderer.domElement表示Three.js渲染結(jié)果,也就是一個(gè)HTML元素(Canvas畫布)
// body元素中插入canvas對(duì)象
// document.body.appendChild(renderer.domElement); 

/**
 * 06.渲染循環(huán)
 */ 
function render() {
  // 地球繞y軸旋轉(zhuǎn)動(dòng)畫
  // earth.rotateY(0.01);
  // 執(zhí)行渲染操作
  renderer.render(scene, camera); 
  // 請(qǐng)求再次執(zhí)行渲染函數(shù)render,渲染下一幀
  requestAnimationFrame(render); 
}
render();

/**
 * 07.Three.js三維坐標(biāo)軸 三個(gè)坐標(biāo)軸顏色RGB分別對(duì)應(yīng)xyz軸
 */
var axesHelper = new THREE.AxesHelper(250);
scene.add(axesHelper);


/**
 * 08.創(chuàng)建控件對(duì)象  控件可以監(jiān)聽鼠標(biāo)的變化,改變相機(jī)對(duì)象的屬性
 */
// 旋轉(zhuǎn):拖動(dòng)鼠標(biāo)左鍵
// 縮放:滾動(dòng)鼠標(biāo)中鍵
// 平移:拖動(dòng)鼠標(biāo)右鍵
var controls = new OrbitControls(camera, renderer.domElement);

export { scene, renderer}

earth.js

// 引入three.js
import * as THREE from '../../../three.js-r123/build/three.module.js';

// 地球半徑
var R = 100;
// 創(chuàng)建地球mesh
var earth = createSphereMesh(R);

function createSphereMesh(r) {
  // TextureLoader創(chuàng)建一個(gè)紋理加載器對(duì)象,可以加載圖片作為紋理貼圖
  var textureLoader = new THREE.TextureLoader();

  // 加載紋理貼圖
  var texture = textureLoader.load('earth.jpg');

  // 創(chuàng)建一個(gè)球體幾何對(duì)象
  var geometry = new THREE.SphereBufferGeometry(r, 40, 40); 

  // 材質(zhì)對(duì)象Material
  var material = new THREE.MeshLambertMaterial({
    // color: 0x00ffff,
    // 設(shè)置地球顏色貼圖map
    map: texture,
  });

  // 網(wǎng)格模型對(duì)象Mesh
  var mesh = new THREE.Mesh(geometry, material); 

  return mesh
}

export { earth }

help.js

// 引入Three.js
import * as THREE from '../../../three.js-r123/build/three.module.js';

// 創(chuàng)建一個(gè)小球用于測(cè)試
function createSphereMesh(R,x,y,z) {
  // 創(chuàng)建一個(gè)球體幾何對(duì)象
  var geometry = new THREE.SphereGeometry(R, 25, 25); 

  // 材質(zhì)對(duì)象Material
  var material = new THREE.MeshLambertMaterial({
    color: 0xff0000
  }); 

  // 網(wǎng)格模型對(duì)象Mesh
  var mesh = new THREE.Mesh(geometry, material);

  mesh.position.set(x,y,z);
  return mesh
}

export { createSphereMesh }

earth.png

threejs 3d地球,javascript,html5,前端

2.3.運(yùn)行效果圖

threejs 3d地球,javascript,html5,前端

說明:本文代碼參考技術(shù)博客:www.yanhuangxueyuan.com,如有侵權(quán),請(qǐng)私信作者,刪除博文處理。?文章來源地址http://www.zghlxwxcb.cn/news/detail-761143.html

到了這里,關(guān)于03.Three.js的入門教程(二)如何創(chuàng)建一個(gè)3D地球?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Three.js基礎(chǔ)入門】:創(chuàng)建你的第一個(gè)3D場(chǎng)景

    【Three.js基礎(chǔ)入門】:創(chuàng)建你的第一個(gè)3D場(chǎng)景

    Three.js是一種強(qiáng)大的JavaScript庫(kù),用于在Web瀏覽器中創(chuàng)建交互式的3D圖形和動(dòng)畫。無需熟練的圖形編程經(jīng)驗(yàn),你也可以通過Three.js輕松地構(gòu)建令人驚嘆的3D場(chǎng)景。 本文將帶你逐步學(xué)習(xí)如何入門Three.js,從創(chuàng)建一個(gè)簡(jiǎn)單的3D場(chǎng)景開始。 我們將介紹如何使用Three.js創(chuàng)建你的第一個(gè)3D場(chǎng)景

    2024年02月16日
    瀏覽(764)
  • 【Golang入門教程】如何使用Goland創(chuàng)建并運(yùn)行項(xiàng)目

    【Golang入門教程】如何使用Goland創(chuàng)建并運(yùn)行項(xiàng)目

    前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站: 人工智能 前言 在Go語言的開發(fā)過程中,選擇一個(gè)合適的集成開發(fā)環(huán)境(IDE)是提高效率和編寫可維護(hù)代碼的關(guān)鍵一步。 JetBrains的Goland作為一款專門為Go語言開發(fā)的

    2024年01月25日
    瀏覽(111)
  • Django框架入門到精通(04)Django創(chuàng)建第一個(gè)項(xiàng)目 (黃菊華老師大學(xué)生畢業(yè)設(shè)計(jì)學(xué)習(xí)教程)

    Django框架入門到精通(04)Django創(chuàng)建第一個(gè)項(xiàng)目 (黃菊華老師大學(xué)生畢業(yè)設(shè)計(jì)學(xué)習(xí)教程)

    博主介紹: 《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月06日
    瀏覽(29)
  • web自動(dòng)化測(cè)試入門篇03——selenium使用教程_(2)在上述學(xué)習(xí)基礎(chǔ)上,自行選擇一個(gè)合適的網(wǎng)站,進(jìn)一步在實(shí)踐中去運(yùn)用selenium webd(1)

    web自動(dòng)化測(cè)試入門篇03——selenium使用教程_(2)在上述學(xué)習(xí)基礎(chǔ)上,自行選擇一個(gè)合適的網(wǎng)站,進(jìn)一步在實(shí)踐中去運(yùn)用selenium webd(1)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新大數(shù)據(jù)全套學(xué)習(xí)資料》,

    2024年04月27日
    瀏覽(39)
  • three.js(一):認(rèn)識(shí)three.js并創(chuàng)建第一個(gè)3D應(yīng)用

    three.js(一):認(rèn)識(shí)three.js并創(chuàng)建第一個(gè)3D應(yīng)用

    1-three.js 是什么? three.js是用JavaScript編寫的WebGL第三方庫(kù); three.js 提供了非常多的3D顯示和編輯功能; 具體而言,three.js 是一款運(yùn)行在瀏覽器中的 3D 引擎,可以用three.js 創(chuàng)建各種三維場(chǎng)景,并對(duì)其進(jìn)行編輯; 在three.js 的官網(wǎng)上看到許多精彩的演示和文檔 three.js 官網(wǎng):https://thre

    2024年02月11日
    瀏覽(310)
  • 跟著pink老師前端入門教程-day03

    跟著pink老師前端入門教程-day03

    6.1 表格的主要作用 主要用于 顯示、展示數(shù)據(jù) ,可以讓數(shù)據(jù)顯示的規(guī)整,可讀性非常好,特別是后臺(tái)展示數(shù)據(jù)時(shí),能夠熟練運(yùn)用表格就顯得很重要。 6.2 基本語法 6.3 表頭單元格標(biāo)簽 一般表頭單元格位于表格的 第一行或第一列 ,表頭單元格里面的 文本內(nèi)容加粗居中顯示 ,突

    2024年01月18日
    瀏覽(21)
  • ESP8266入門教程03:點(diǎn)亮LED燈

    ESP8266入門教程03:點(diǎn)亮LED燈

    ESP8266默認(rèn)是高電平工作,所以想要點(diǎn)亮LED只需要給相應(yīng)的引腳設(shè)置低電平即可。 ?第11行:使用pinMode(pin, mode)來設(shè)置GPIO口工作模式,pin取值范圍0 ~ 16,數(shù)字引腳0-15可設(shè)置為INPUT、OUTPUT、INPUT_PULLUP模式(輸入、輸出、上拉輸入);數(shù)字引腳16可設(shè)置為INPUT、OUTPUT、INPUT_PULLDOWN_16模式

    2024年02月14日
    瀏覽(103)
  • 如何做一個(gè)快速粉的小紅薯ai繪畫號(hào)?????????教程篇:零基礎(chǔ)小白如何從入門到精通

    如何做一個(gè)快速粉的小紅薯ai繪畫號(hào)?????????教程篇:零基礎(chǔ)小白如何從入門到精通

    2.1 mewxai繪畫教程 2.1.1 什么是mewxai? mewxai是一款微信小程序,打開你的微信,搜索\\\"mewxai\\\"就可以找到,意為\\\"我的微信ai\\\",由于讀音不太習(xí)慣,加上它的頭像酷似一個(gè)一個(gè)小海豚,所以ai繪畫圈子一般稱它為\\\"小海豚\\\"。 mewxai的開發(fā)者為知乎大v\\\"程序員秋風(fēng)\\\",開發(fā)完成時(shí)間為2022年

    2023年04月09日
    瀏覽(20)
  • Apache Doris 入門教程03:使用Docker或Kubernetes部署Doris

    該文檔主要介紹了如何通過 Dockerfile 來制作 Apache Doris 的運(yùn)行鏡像,以便于在容器化編排工具或者快速測(cè)試過程中可迅速拉取一個(gè) Apache Doris Image 來完成集群的創(chuàng)建。 概述? Docker 鏡像在制作前要提前準(zhǔn)備好制作機(jī)器,該機(jī)器的平臺(tái)架構(gòu)決定了制作以后的 Docker Image 適用的平臺(tái)

    2024年02月07日
    瀏覽(21)
  • 【STM32零基礎(chǔ)入門教程03】GPIO輸入輸出之GPIO框圖分析

    【STM32零基礎(chǔ)入門教程03】GPIO輸入輸出之GPIO框圖分析

    ? ???????本章節(jié)主要講解點(diǎn)亮LED的基本原理,以及GPIO框圖的講解。 ????????首先我們查看原理圖,觀察電路圖中LED的連接情況,如下圖可以看出我們的板子中LED一端通過限流電阻連接的PB0另一端連接的是高電平VCC,那么我們將PB0位置接地是不是燈就亮了,那我們就想

    2024年02月14日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包