我正在使用THREE.js OBJ加载器将模型导入场景.
我知道我可以很好地导入几何体,因为当我为它指定一个MeshNormalMaterial时,它显示出很棒的效果.但是,如果我使用任何需要UV坐标的东西,它会给我错误:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1
Run Code Online (Sandbox Code Playgroud)
我知道这是因为加载的OBJ没有UV坐标,但我想知道是否有任何方法可以生成所需的纹理坐标.我试过了
material.needsUpdate = true;
geometry.uvsNeedUpdate = true;
geometry.buffersNeedUpdate = true;
Run Code Online (Sandbox Code Playgroud)
......但无济于事.
有没有办法使用three.js自动生成UV纹理,还是我必须自己分配坐标?
我正在尝试在每个面上创建一个具有不同纹理的three.js立方体.
基本上是一个骰子.这是在我的沙盒环境中,所以应该只在每侧产生一个带有骰子图像(1-6)的旋转立方体.完成后,我打算将其用于浏览器基础游戏.这个例子我只在Chrome中测试过,虽然考虑将其更改为画布渲染器以获得额外的浏览器支持.
在这里看了几个关于SO和其他大量谷歌搜索的问题,尽管我得到了答案(实际上看起来相当简单),但我根本无法让它发挥作用.
我是three.js的新手,但不是JavaScript.
我用来参考的页面是
和enriquemorenotent.com - three.js在每个面上构建一个具有不同材质的立方体
我的守则
var camera, scene, renderer, dice;
init();
animate();
function init() {
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(110, 110, 250);
camera.lookAt(scene.position);
scene.add(camera);
var materials = [
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-1-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-2-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-3-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-4-hi.png')
}),
new THREE.MeshLambertMaterial({ …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个类似于此的形状,具有12个五边形的六边形,任意大小.
(图片来源)
唯一的问题是,我完全不知道生成它需要什么样的代码!
目标是能够在3D空间中获取一个点并将其转换为网格上的位置坐标,反之亦然,并获取网格位置并获取绘制网格的相关顶点.
我甚至不知道如何为此存储网格位置.3个五边形之间的每个"三部分"是否都有自己的2D坐标?
我很可能会使用C#,但我更感兴趣的是使用哪种算法以及它们如何工作的解释,而不是只给我一段代码的人.
algorithm geometry tiling hexagonal-tiles computational-geometry