Прикрепление атрибута к объекту x3dom
Это может показаться глупым вопросом, но я ищу способ присвоения идентификатора каждой стороне объекта x3dom, скажем, куба, чтобы я мог создавать различные атрибуты для каждого отдельного лица. Единственный метод, который я видел до сих пор, это функция "def". Было бы очень полезно, если бы кто-нибудь мог предоставить простой образец для куба. Заранее спасибо.
1 ответ
def предназначен для определения формы для повторного использования, вы можете определить объект и затем повторно использовать его в сцене. полезно, скажем, сделать лес из похожих деревьев. пример на сайте x3dom приведен здесь, просто посмотрите на источник.
http://x3dom.org/x3dom/example/x3dom_defUse.xhtml
если вы используете только коробку x3d, определение каждой стороны невозможно, так как примитивная форма, def или id на коробке не сможет повлиять на одно лицо
если бы вы использовали индексированные наборы треугольников, то каждому из них можно было бы присвоить идентификатор таким образом
подробнее о них здесь
http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter13-GeometryTrianglesQuadrilaterals/_pages/page03.html
о том, как использовать CSS ID
http://x3dom.org/docs/dev/tutorial/styling.html
Вот простой пример использования getelement по тегу и идентификатору
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link rel="stylesheet" type="text/css" href="http://x3dom.org/x3dom/example/x3dom.css"></link>
<script type="text/javascript" src = "http://x3dom.org/x3dom/example/x3dom.js"></script>
</head>
<body>
<X3D width="500px" height="400px" showLog='true' showStat="true">
<Scene DEF='scene' >
<Shape >
<Box onclick="toggleRendering();" onmouseover="toggleRendering2();" onmouseout="toggleRendering3();" />
<Appearance><Material id="themat" diffuseColor='0 1 0' /></Appearance>
</Shape>
</Scene>
</X3D>
<script>
var flag = true;
function toggleRendering()
{
flag = !flag;
var aMat = document.getElementById("themat");
if (flag) aMat.diffuseColor = "1 0 0";
else aMat.diffuseColor = "0 0 1";
return false;
}
function toggleRendering2()
{
var mat = document.getElementsByTagName("Material");
var aMat = mat[0];
aMat.diffuseColor = "1 1 1";
return false;
}
function toggleRendering3()
{
var mat = document.getElementsByTagName("Material");
var aMat = mat[0];
aMat.diffuseColor = "0 0 0";
return false;
}
</script>
</body>
</html>