gpt4 book ai didi

html - 如何在具有透明背景的 Three.js Canvas 上绘制
元素?

转载 作者:行者123 更新时间:2023-12-02 20:17:39 26 4
gpt4 key购买 nike

我正在阅读this answer但所提出的方法纯粹是理论上的。在我的 HTML5 代码中,我尝试过这样的操作:

<div id='gameCanvas'>
<div id="insideText">First trial</div>
</div>

我在 CSS 中添加了以下内容:

#insideText{
background-color: transparent;
}

当涉及到 HTML/CSS 时,我是个新手,所以我可能会犯一些简单的错误,但这样我的 Canvas 上方会出现一条黑线,并且文本会出现在该黑线上。我希望文本出现在 Canvas 上而没有这条黑线,并且我还想知道如何在 Canvas 的不同区域上放置一些文本(我的 Canvas 不是全屏的)。

编辑:如果我输入 <div>在 Canvas 元素之外,它确实具有透明背景,但始终作为 Canvas 的单独元素。

最佳答案

您的问题并不特定于三个或 Canvas 。这只是一个基本的 HTML/CSS 问题,我确信这个网站上已经回答了 1000 次,但由于搜索很糟糕,我会再次回答,并将其留给更有耐心的人来关闭作为一个骗子

要使 2 个或更多元素重叠,通常需要一个父元素。该元素必须具有 css position: relative;position:absolute; 。这使其成为其子项的 anchor /起源/基础。注:<body>已经这样标记了。

然后对于所有 child ,您可以使用 position:absolute并用left设置他们的位置, top , right ,或bottom

示例

const ctx = document.querySelector('canvas').getContext('2d');
ctx.fillStyle = 'yellow';
ctx.fillRect(0, 0, 300, 150);
ctx.fillStyle = 'red';
ctx.arc(150, 75, 125, 0, Math.PI * 2, true);
ctx.fill();
<h1>Some text</h1>

<div style="position: relative; display: inline-block;">
<canvas></canvas>
<div style="position: absolute; left: 1em; top: 1em;">foo</div>
<div style="position: absolute; right: 1em; bottom: 1em;">bar</div>
</div>

注意:display: inline-block;是使外部元素适合内容而不是拉伸(stretch)到其父元素(在本例中为主体)的宽度。还有数百种其他方法来设置元素的大小。

请注意,元素默认是透明的,因此无需将背景颜色设置为透明,除非您将其在其他地方设置为不透明

const renderer = new THREE.WebGLRenderer();
document.querySelector('#gameCanvas').appendChild(renderer.domElement);
const scene = new THREE.Scene();
scene.add(
new THREE.Mesh(
new THREE.SphereGeometry(1),
new THREE.MeshBasicMaterial({color:'red'})
)
);
scene.background = new THREE.Color('yellow');
const camera = new THREE.PerspectiveCamera(45, 2, .1, 10);
camera.position.z = 2;
renderer.render(scene, camera);
#gameCanvas {
position: relative;
}
#insideText {
position: absolute;
left: 20px;
top: 20px;
}
<h1>some text</h1>
<div id='gameCanvas'>
<div id="insideText">First trial</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/95/three.min.js"></script>

关于html - 如何在具有透明背景的 Three.js Canvas 上绘制 <div> 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com