中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)優(yōu)化文章重慶今日頭條新聞消息

網(wǎng)站建設(shè)優(yōu)化文章,重慶今日頭條新聞消息,山西推廣公司,做網(wǎng)站用哪個寫比較好簡化需求:實現(xiàn)項目內(nèi)嵌人體模型,實現(xiàn)點擊不同部位彈出部位名稱 一:優(yōu)先3d, 方案:基于three.js,.gltf格式模型,vue3 缺點:合適且免費的3d模型找不到,因為項目對部位有要…

簡化需求:實現(xiàn)項目內(nèi)嵌人體模型,實現(xiàn)點擊不同部位彈出部位名稱

一:優(yōu)先3d,

方案:基于three.js,.gltf格式模型,vue3
缺點:合適且免費的3d模型找不到,因為項目對部位有要求。
注意:模型地址請使用絕對路徑。
效果圖:

代碼:
<template><div ref="canvasContainer" class="canvas-container"></div>
</template><script setup>
import * as THREE from 'three'
import { onMounted, ref } from 'vue'
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'const canvasContainer = ref(null)onMounted(() => {let scene, camera, renderer, modellet raycaster = new THREE.Raycaster()let mouse = new THREE.Vector2()let selectedPart = nulllet isDragging = falselet previousMousePosition = { x: 0, y: 0 }const init = () => {// 創(chuàng)建場景scene = new THREE.Scene()scene.background = new THREE.Color(0xeeeeee)// 創(chuàng)建相機camera = new THREE.PerspectiveCamera(45, 500 / 500, 0.1, 1000)camera.position.set(0, 1.6, 3) // 相機位置// 創(chuàng)建渲染器,并設(shè)置大小為500px × 500pxrenderer = new THREE.WebGLRenderer({ antialias: true })renderer.setSize(500, 500)canvasContainer.value.appendChild(renderer.domElement)// 添加光源const light = new THREE.DirectionalLight(0xffffff, 1)light.position.set(5, 10, 7.5)scene.add(light)// 加載3D模型const loader = new GLTFLoader()loader.load('src/assets/models/b1_battle_droid/scene.gltf', (gltf) => {model = gltf.scenescene.add(model)})// 鼠標事件監(jiān)聽window.addEventListener('mousemove', onMouseMove)window.addEventListener('click', onClick)window.addEventListener('mousedown', onMouseDown)window.addEventListener('mouseup', onMouseUp)window.addEventListener('mousemove', onMouseMoveRotation)}const onMouseMove = (event) => {// 將鼠標位置標準化為Three.js坐標const rect = renderer.domElement.getBoundingClientRect()mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1raycaster.setFromCamera(mouse, camera)const intersects = raycaster.intersectObjects(scene.children, true)if (intersects.length > 0) {if (selectedPart) {// 恢復(fù)之前選中的部件顏色selectedPart.material.emissive.setHex(selectedPart.currentHex)}selectedPart = intersects[0].objectselectedPart.currentHex = selectedPart.material.emissive.getHex()selectedPart.material.emissive.setHex(0xff0000) // 懸浮變色} else if (selectedPart) {// 鼠標離開時恢復(fù)顏色selectedPart.material.emissive.setHex(selectedPart.currentHex)selectedPart = null}}const onClick = (event) => {if (selectedPart) {alert(`你點擊了: ${selectedPart.name}`)}}const onMouseDown = () => {isDragging = true}const onMouseUp = () => {isDragging = false}const onMouseMoveRotation = (event) => {if (isDragging) {const deltaMove = {x: event.clientX - previousMousePosition.x,y: event.clientY - previousMousePosition.y,}const rotationSpeed = 0.005model.rotation.y += deltaMove.x * rotationSpeedmodel.rotation.x += deltaMove.y * rotationSpeed}previousMousePosition = {x: event.clientX,y: event.clientY,}}const animate = () => {requestAnimationFrame(animate)renderer.render(scene, camera)}init()animate()
})
</script><style>
.canvas-container {width: 500px;height: 500px;overflow: hidden;margin: 0 auto;/* 居中對齊 */
}
</style>

方案二:差強人意選2d

方案:基于canvas,.png格式圖片,vue3

缺點:效果差一些,旋轉(zhuǎn)沒有了,身體部位區(qū)分做不到很細致。

注意:圖片地址import引入,再引用。

效果圖:

代碼:

<template><div><canvas ref="canvas" @click="handleClick"></canvas></div>
</template><script setup>
import { onMounted, ref } from 'vue'
import imgsrc from '@/assets/models/person.png'
const canvas = ref(null)
const bodyParts = [{ name: 'Head', x: 50, y: 30, width: 100, height: 100 },{ name: 'Chest', x: 50, y: 150, width: 100, height: 100 },{ name: 'Abdomen', x: 50, y: 270, width: 100, height: 100 },{ name: 'Legs', x: 50, y: 390, width: 100, height: 100 },
]onMounted(() => {handleImage()
})
const handleImage = () => {const ctx = canvas.value.getContext('2d')canvas.value.width = 200 // 設(shè)置 canvas 的寬度canvas.value.height = 500 // 設(shè)置 canvas 的高度const img = new Image()img.src = imgsrc // 使用 Vue 項目中的圖片路徑img.onload = function () {// 確保圖片加載完成后繪制到 canvas 上ctx.clearRect(0, 0, canvas.value.width, canvas.value.height) // 清空 canvasctx.drawImage(img, 0, 0, canvas.value.width, canvas.value.height) // 繪制圖片// 調(diào)試用:繪制點擊區(qū)域的邊框bodyParts.forEach((part) => {ctx.strokeStyle = 'red' // 用紅色邊框標記部位ctx.strokeRect(part.x, part.y, part.width, part.height)})}console.log('path is ' + img.src)
}
const handleClick = (event) => {const rect = canvas.value.getBoundingClientRect()const x = event.clientX - rect.leftconst y = event.clientY - rect.topconst clickedPart = bodyParts.find((part) => {return (x >= part.x &&x <= part.x + part.width &&y >= part.y &&y <= part.y + part.height)})if (clickedPart) {alert(`You clicked on: ${clickedPart.name}`)}
}
</script><style scoped>
canvas {border: 1px solid black;
}
</style>

三:蹲蹲更好的解決方法。

http://www.risenshineclean.com/news/50497.html

相關(guān)文章:

  • 石家莊免費做網(wǎng)站杭州seo公司
  • 哈爾濱做設(shè)計和網(wǎng)站的公司嗎電話營銷外包公司
  • 地方門戶網(wǎng)站模板seo教程seo優(yōu)化
  • 網(wǎng)頁制作模板的含義和作用在線seo工具
  • 簡單介紹網(wǎng)站建設(shè)的一般流程專業(yè)公司網(wǎng)絡(luò)推廣
  • 網(wǎng)站seo建設(shè)方案浙江seo推廣
  • 網(wǎng)站建設(shè)費 科目天津網(wǎng)站排名提升多少錢
  • 網(wǎng)站宣傳方案網(wǎng)絡(luò)推廣長沙網(wǎng)絡(luò)推廣
  • 商城網(wǎng)站備案做網(wǎng)站哪家公司比較好而且不貴
  • 做購物網(wǎng)站適合的服務(wù)器站長工具國色天香
  • 政務(wù)網(wǎng)站集約化建設(shè)難點與建議湖南關(guān)鍵詞優(yōu)化首選
  • 網(wǎng)站導(dǎo)航css代碼培訓(xùn)課
  • 做高級電工題的網(wǎng)站外鏈工具在線
  • 校園互動網(wǎng)站建設(shè)站長工具同大全站
  • 食品營銷網(wǎng)站建設(shè)調(diào)查問卷免費網(wǎng)站流量統(tǒng)計工具
  • 做汽配找哪個網(wǎng)站好軟件排名工具
  • ruby 做網(wǎng)站谷歌推廣公司哪家好
  • 長沙手機網(wǎng)站建設(shè)哪些內(nèi)容建網(wǎng)站需要什么條件
  • icp網(wǎng)站備案系統(tǒng)中國最好的營銷策劃公司
  • 公司做網(wǎng)站推廣的價格鮮花網(wǎng)絡(luò)營銷推廣方案
  • 做優(yōu)化網(wǎng)站哪個公司好win10優(yōu)化大師是官方的嗎
  • 啟東做網(wǎng)站的網(wǎng)絡(luò)公司有哪些外貿(mào)網(wǎng)絡(luò)營銷推廣
  • 做阿里巴巴網(wǎng)站圖片尺寸枸櫞酸西地那非片的功效與作用
  • 通過網(wǎng)站如何做海外貿(mào)易大連seo按天付費
  • 如何在門戶網(wǎng)站做搜索引擎廈門網(wǎng)站建設(shè)公司
  • 響應(yīng)式網(wǎng)站介紹東莞網(wǎng)絡(luò)排名優(yōu)化
  • 做網(wǎng)站一定要學(xué)java嗎寫軟文平臺
  • php 網(wǎng)站 模板無錫百度競價公司
  • 代刷網(wǎng)站推廣鏈接快手百度賬號申請注冊
  • 局域網(wǎng)網(wǎng)站開發(fā)軟件seo優(yōu)化有哪些