After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 243 KiB |
@ -0,0 +1,285 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<title>Threejs实现3D场景中添加html网页</title> |
||||
|
<!-- <script type="text/javascript" src="libs/statistics.js"></script> --> |
||||
|
<!-- <script type="text/javascript" src="libs/steak.js"></script> --> |
||||
|
<style> |
||||
|
body { |
||||
|
background-color: #ffffff; |
||||
|
margin: 0; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
|
<script type="importmap"> |
||||
|
{ |
||||
|
"imports": { |
||||
|
"three": "./libs/three/three.module.js", |
||||
|
"jsm/": "./libs/three/jsm/" |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
</head> |
||||
|
|
||||
|
<body ontouchstart=""> |
||||
|
<div class="info">2D数据表格显示 不旋转 厌氧系统 </div> |
||||
|
<script type="module"> |
||||
|
|
||||
|
import * as THREE from 'three'; |
||||
|
// import { APP } from './js/app2.0.js'; |
||||
|
|
||||
|
|
||||
|
import { OrbitControls } from 'jsm/controls/OrbitControls.js'; |
||||
|
import { GLTFLoader } from 'jsm/loaders/GLTFLoader.js'; |
||||
|
|
||||
|
import { CSS3DRenderer, CSS3DObject } from 'jsm/renderers/CSS3DRenderer.js'; |
||||
|
import { Water } from 'jsm/objects/Water.js'; |
||||
|
import modellabel from './js/units/modellabel.js' |
||||
|
import css3dlabel from './js/units/css3dlabel.js' |
||||
|
import config from './js/config.js' |
||||
|
|
||||
|
|
||||
|
var controls, camera, glScene, cssScene, glRenderer, cssRenderer; |
||||
|
|
||||
|
function createGlRenderer() { |
||||
|
var glRenderer = new THREE.WebGLRenderer({ |
||||
|
antialias: true, |
||||
|
alpha: true |
||||
|
}); |
||||
|
|
||||
|
glRenderer.setClearColor(0xECF8FF); |
||||
|
glRenderer.setPixelRatio(window.devicePixelRatio); |
||||
|
glRenderer.setSize(window.innerWidth, window.innerHeight); |
||||
|
|
||||
|
glRenderer.domElement.style.position = 'absolute'; |
||||
|
glRenderer.domElement.style.zIndex = 1; |
||||
|
glRenderer.domElement.style.top = 0; |
||||
|
|
||||
|
return glRenderer; |
||||
|
} |
||||
|
|
||||
|
function createCssRenderer() { |
||||
|
var cssRenderer = new CSS3DRenderer(); |
||||
|
cssRenderer.setSize(window.innerWidth, window.innerHeight); |
||||
|
cssRenderer.domElement.style.position = 'absolute'; |
||||
|
glRenderer.domElement.style.zIndex = 0; |
||||
|
cssRenderer.domElement.style.top = 0; |
||||
|
return cssRenderer; |
||||
|
} |
||||
|
|
||||
|
function createPlane(w, h, position, rotation) { |
||||
|
|
||||
|
var material = new THREE.MeshBasicMaterial({ |
||||
|
color: 0x000000, |
||||
|
opacity: 0.0, |
||||
|
side: THREE.DoubleSide |
||||
|
}); |
||||
|
|
||||
|
var geometry = new THREE.PlaneGeometry(w, h); |
||||
|
|
||||
|
var mesh = new THREE.Mesh(geometry, material); |
||||
|
|
||||
|
mesh.position.x = position.x; |
||||
|
mesh.position.y = position.y; |
||||
|
mesh.position.z = position.z; |
||||
|
|
||||
|
mesh.rotation.x = rotation.x; |
||||
|
mesh.rotation.y = rotation.y; |
||||
|
mesh.rotation.z = rotation.z; |
||||
|
|
||||
|
mesh.scale.set(0.003, 0.003, 0.003); |
||||
|
return mesh; |
||||
|
} |
||||
|
|
||||
|
function createCssObject(w, h, position, rotation, url) { |
||||
|
var iframe = document.createElement('iframe') |
||||
|
iframe.src = url; |
||||
|
iframe.style.width = w + 'px'; |
||||
|
iframe.style.height = h + 'px'; |
||||
|
iframe.style.border = '0px'; |
||||
|
// const iframe = document.createElement('div'); |
||||
|
// // iframe.className = 'className'; |
||||
|
// iframe.name = "csslabeldiv" |
||||
|
// iframe.textContent = '测试11111'; |
||||
|
|
||||
|
// iframe.style.pointerEvents = 'none';//避免HTML标签遮挡三维场景的鼠标事件 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
var cssObject = new CSS3DObject(iframe); |
||||
|
cssObject.position.x = position.x; |
||||
|
cssObject.position.y = position.y; |
||||
|
cssObject.position.z = position.z; |
||||
|
|
||||
|
cssObject.rotation.x = rotation.x; |
||||
|
cssObject.rotation.y = rotation.y; |
||||
|
cssObject.rotation.z = rotation.z; |
||||
|
|
||||
|
cssObject.scale.set(0.003, 0.003, 0.003); |
||||
|
return cssObject; |
||||
|
} |
||||
|
|
||||
|
function initModel() { |
||||
|
var loader = new GLTFLoader(); |
||||
|
loader.load('assets/models/gallery.glb', function (gltf) { |
||||
|
gltf.scene.traverse(function (child) { |
||||
|
switch (child.name) { |
||||
|
case 'walls': |
||||
|
initWalls(child) |
||||
|
break |
||||
|
case 'stairs': |
||||
|
initStairs(child) |
||||
|
break |
||||
|
} |
||||
|
|
||||
|
//设置展画边框贴图 |
||||
|
if (child.name.includes('paint')) { |
||||
|
initFrames(child) |
||||
|
} |
||||
|
//设置展画图片贴图 |
||||
|
if (child.name.includes('draw')) { |
||||
|
initDraws(child) |
||||
|
} |
||||
|
}) |
||||
|
glScene.add(gltf.scene) |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function initDraws(child) { } |
||||
|
|
||||
|
function initFrames(child) { |
||||
|
child.material = new THREE.MeshBasicMaterial({ |
||||
|
color: 0x7f5816, |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
function initStairs(child) { |
||||
|
child.material = new THREE.MeshStandardMaterial({ |
||||
|
color: 0xd1cdb7, |
||||
|
}) |
||||
|
child.material.roughness = 0.5 |
||||
|
child.material.metalness = 0.6 |
||||
|
} |
||||
|
|
||||
|
function initWalls(child) { |
||||
|
child.material = new THREE.MeshStandardMaterial({ |
||||
|
color: 0xffffff, |
||||
|
}) |
||||
|
child.material.roughness = 0.5 |
||||
|
child.material.metalness = 0.6 |
||||
|
} |
||||
|
|
||||
|
function create3dPage(w, h, position, rotation, url) { |
||||
|
var plane = createPlane( |
||||
|
w, h, |
||||
|
position, |
||||
|
rotation); |
||||
|
glScene.add(plane); |
||||
|
|
||||
|
var cssObject = createCssObject( |
||||
|
w, h, |
||||
|
position, |
||||
|
rotation, |
||||
|
url); |
||||
|
cssScene.add(cssObject); |
||||
|
} |
||||
|
|
||||
|
function createLights() { |
||||
|
const light = new THREE.AmbientLight("#ffffff"); |
||||
|
glScene.add(light); |
||||
|
|
||||
|
const light1 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light1.position.set(-2, 3, 2) |
||||
|
glScene.add(light1) |
||||
|
|
||||
|
const light2 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light2.position.set(0, 3, -6) |
||||
|
glScene.add(light2) |
||||
|
|
||||
|
const light3 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light3.position.set(-12, 3, 6) |
||||
|
glScene.add(light3) |
||||
|
|
||||
|
const light4 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light4.position.set(-12, 4, -4) |
||||
|
glScene.add(light4) |
||||
|
|
||||
|
const light5 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light5.position.set(12, 4, -8) |
||||
|
glScene.add(light5) |
||||
|
|
||||
|
const light6 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light6.position.set(12, 4, 0) |
||||
|
glScene.add(light6) |
||||
|
|
||||
|
const light7 = new THREE.PointLight(0xe0ffff, 0.1, 20) |
||||
|
light7.position.set(12, 4, 8) |
||||
|
glScene.add(light7) |
||||
|
} |
||||
|
|
||||
|
function initialize() { |
||||
|
camera = new THREE.PerspectiveCamera( |
||||
|
45, |
||||
|
window.innerWidth / window.innerHeight, |
||||
|
1, |
||||
|
10000); |
||||
|
|
||||
|
camera.position.set(-10, 5, -10); |
||||
|
|
||||
|
glRenderer = createGlRenderer(); |
||||
|
cssRenderer = createCssRenderer(); |
||||
|
|
||||
|
controls = new OrbitControls(camera, cssRenderer.domElement); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// document.body.appendChild(glRenderer.domElement); |
||||
|
document.body.appendChild(cssRenderer.domElement); |
||||
|
cssRenderer.domElement.appendChild(glRenderer.domElement); |
||||
|
|
||||
|
glScene = new THREE.Scene(); |
||||
|
cssScene = glScene//new THREE.Scene(); |
||||
|
|
||||
|
var ambientLight = new THREE.AmbientLight(0x555555); |
||||
|
glScene.add(ambientLight); |
||||
|
|
||||
|
var directionalLight = new THREE.DirectionalLight(0xffffff); |
||||
|
directionalLight.position.set(-.5, .5, -1.5).normalize(); |
||||
|
glScene.add(directionalLight); |
||||
|
|
||||
|
for (var i = 0; i < 2; i++) { |
||||
|
create3dPage( |
||||
|
1020, 680, |
||||
|
new THREE.Vector3(-2 - i, 1 + i / 3, -4.2 + i), |
||||
|
new THREE.Vector3(0, Math.PI, 0), |
||||
|
'https://zuoben.blog.csdn.net/'); |
||||
|
} |
||||
|
|
||||
|
initModel(); |
||||
|
createLights(); |
||||
|
|
||||
|
update(); |
||||
|
} |
||||
|
|
||||
|
function update() { |
||||
|
|
||||
|
controls.update(); |
||||
|
|
||||
|
glRenderer.render(glScene, camera); |
||||
|
|
||||
|
cssRenderer.render(cssScene, camera); |
||||
|
|
||||
|
requestAnimationFrame(update); |
||||
|
} |
||||
|
|
||||
|
initialize(); |
||||
|
</script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 526 KiB |
After Width: | Height: | Size: 464 KiB |
After Width: | Height: | Size: 464 KiB |
After Width: | Height: | Size: 390 KiB |
After Width: | Height: | Size: 216 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 151 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 137 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 745 B |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 180 KiB |
After Width: | Height: | Size: 459 KiB |
After Width: | Height: | Size: 459 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 86 KiB |