![](/img/trans.png)
[英]How do I put a clear button inside my HTML text input box like the iPhone does?
[英]How do I make a TextGeometry multiline? How do I put it inside a square so it wraps like html text does inside a div?
我正在使用WebGL
、 three.js
和THREE.TextGeometry
制作一些 3D 文本。 到目前为止它运行良好。 我能够创建一行 3D 文本。
现在我想创建多行文本,就像一个短段落。 最好,我希望它在到达放置它的框/矩形的边界时自然换行。我想要标准HTML
文本在 div 内部时具有的类似行为,当它到达时换行到多行它的父 div 的边缘。
这是我创建单行的方式:
textGeo = new THREE.TextGeometry(
'Hello there. Am I a paragraph? I hope so.',
'size': 30
'height': 2
'font': 'helvetiker'
'weight': 'normal'
'style': 'normal'
bevelThickness: 0.1
bevelSize: 0
bevelEnabled: true
material: 0
extrudeMaterial: 1
)
materialArray = [
new THREE.MeshBasicMaterial( { color: 0xFFFFFF } )
new THREE.MeshBasicMaterial( { color: 0x666666, shading: THREE.SmoothShading } )
]
textMaterial = new THREE.MeshFaceMaterial(materialArray)
textGeo = new THREE.Mesh(textGeo, textMaterial)
textGeo.position.x = -150
textGeo.rotation.y = de2ra(15)
scene.add textGeo
我怎样才能制作这个多线? 另外,我怎样才能把它放在一个正方形里,让它包裹起来? 如何创建正方形?
一种方法可能是在 HTML 中绘制文本并在 3D 场景中呈现它。
另一种方法是实例化文本,测试它有多大,如果它大于所需的最大宽度,则将其拆分为多个 TextGeometry 实例,在 y 轴上偏移高度。 您可以使用geometry.boundingBox
(在调用geometry.computeBoundingBox()
)获取几何尺寸,它是一个THREE.Box3
。 边界框具有min
和max
属性,它们是表示对角顶点的向量,因此您可以通过调用例如:
geometry.boundingBox.max.x - geometry.boundingBox.min.x
Three.js 的 API 非常低级。 我不相信这在一般情况下是可能的。 您可以解决此问题的一种方法是生成多个 TextGeometry 实例,每行一个,并手动将它们定位在不同的 y 坐标处。
添加此作为更新的解决方法,可用于使用TextGeometry
呈现多行文本。
如果您使用模板文字字符串并将要用于TextGeometry
字符串的文本拆分为多行(甚至包括行之间的空格),则TextGeometry
将尊重这些空格。 这可用于手动实现多行效果,但这不会“将其放入正方形”并使其自动换行。
例子
let text = `
first line.
second line.
third line.
`;
objectGeometry = new THREE.TextGeometry(text, {
font: font,
size: 10,
height: 0,
curveSegments: 10
}).center();
跟进之前的帖子。 您还可以使用\\n
换行,文本几何图形会尊重它。 然而,这并不能解决“类似 html 的包装”
IE
let text = `first line. \n second line. \n third line.`;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.