javascript - Three.js Geometry 没有在浏览器中显示,但场景是

标签 javascript html css three.js

按照教程让整个场景在 body 标签中工作,然后我尝试将它移动到一个 div 中,现在只有场景会渲染。我没有收到任何错误,并且我已经在控制台记录了所有内容以确保它可以访问。但我不明白为什么我没有显示任何内容。

// console.log ("Java Script is working!")

// get div for 3D area
const container = document.querySelector('#container')
// console.log (container)
var scene = new THREE.Scene()

var camera = new THREE.PerspectiveCamera(
  75,
  container.innerWidth / container.innerHeight,
  0.1,
  1000
)
camera.position.z = 3

var renderer = new THREE.WebGLRenderer({
  antialias: true
})
renderer.setClearColor('#0D1033')
renderer.setSize(container.innerWidth, container.innerHeight)

container.appendChild(renderer.domElement)

container.addEventListener('resize', () => {
  renderer.setSize(container.innerWidth, container.innerHeight)
  camera.aspect = container.innerWidth / container.innerHeight
  camera.updateProjectionMatrix()
})


var geometry = new THREE.BoxGeometry(10, 1, 1)
var material = new THREE.MeshLambertMaterial({
  color: 0x90e9f9,
  side: THREE.DoubleSide
})
var mesh = new THREE.Mesh(geometry, material)

scene.add(mesh)


var light = new THREE.PointLight(0xffffff, 5, 500)
light.position.set(10, 0, 25)
scene.add(light)

var render = function() {
  requestAnimationFrame(render)
  renderer.render(scene, camera)
}
console.log(mesh)
console.log(camera)

render()
* {
  box-sizing: border-box;
}

body {
  padding: 0;
  margin: 0;
  height: 100vh;
}

canvas {
  display: block;
  height: 100%;
  width: 100%;
}

#container {
  background-color: black;
  height: 100vh;
}
<!DOCTYPE html>

<body>
  <div id="container">

  </div>


  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/102/three.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.2/TweenMax.min.js"></script>
  <script src="main.js"></script>
</body>

</html>

我试图首先让它工作,所以我知道在我将它移到我的主元素之前它可以工作,我试图在网站上的一个 div 中有一个 3d 空间,但不占用全部页

最佳答案

您只能在 window 对象上使用 innerWidthinnerHeight。使用 clientWidthclientHeight 代替:

const container = document.querySelector('#container')

const scene = new THREE.Scene()

const camera = new THREE.PerspectiveCamera(
  75,
  container.clientWidth / container.clientHeight,
  0.1,
  1000
)
camera.position.z = 3

const renderer = new THREE.WebGLRenderer({
  antialias: true
})
renderer.setClearColor('#0D1033')
renderer.setSize(container.clientWidth, container.clientHeight)

container.appendChild(renderer.domElement)

container.addEventListener('resize', () => {
  renderer.setSize(container.clientWidth, container.clientHeight)
  camera.aspect = container.clientWidth / container.clientHeight
  camera.updateProjectionMatrix()
})


const geometry = new THREE.BoxGeometry(10, 1, 1)
const material = new THREE.MeshLambertMaterial({
  color: 0x90e9f9,
  side: THREE.DoubleSide
})
const mesh = new THREE.Mesh(geometry, material)
scene.add(mesh)


const light = new THREE.PointLight(0xffffff, 5, 500)
light.position.set(10, 0, 25)
scene.add(light)

const render = function() {
  requestAnimationFrame(render)
  renderer.render(scene, camera)
}

render()
* {
  box-sizing: border-box;
}

body {
  padding: 0;
  margin: 0;
  height: 100vh;
}

canvas {
  display: block;
  height: 100%;
  width: 100%;
}

#container {
  background-color: black;
  height: 100vh;
}
<script src="https://cdn.jsdelivr.net/npm/three@0.133.1/build/three.min.js"></script>
<div id="container">

</div>

关于javascript - Three.js Geometry 没有在浏览器中显示,但场景是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69735159/

相关文章:

javascript - <option ng-repeat value={{object}}> 我如何强制 Angular 将对象插入模型?

javascript - 使用 JavaScript 在 if 语句中设置变量抛出错误(已声明)

php - 如果还有 css

css - 在我自己和其他人的代码中总是期望语义正确的标记是不明智的吗?

html - 第 n 个 child (2n)不起作用?

html - Internet Explorer 和 FireFox 之间的 CSS Top 属性不同

javascript - 没有空格的长文本的弹出窗口

javascript - Contenteditable 在 Firefox 上删除尾随空格,但在 Chrome 上没有

html - 定位方案会影响子元素

javascript - 如何为 Canvas 创建标尺工具?