我正在使用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纹理,还是我必须自己分配坐标?
我正在为自己的工具编写自己的uv编辑器,并且我正在尝试将尽可能多的算法合并到投影中.我需要采用任意网格,并为每个顶点制作uv坐标.
到目前为止,我有平面和最小二乘保形贴图.
我想加入更多,如三平面,圆柱,球面,但我很难找到信息来执行算法.三平面看起来会生成一种颜色,但我需要在UV坐标中获取所有内容.
非常感谢帮助!!
我一直在七个互联网上进行广泛搜索,但无济于事.最接近我需要的似乎是切割库存问题,仅在2D(这是令人失望的,因为维基百科没有提供如何解决该问题的任何指示).另一个看似相似的问题是UV展开.那里有解决方案,但只有那些你从各种3D软件附加组件中获得的解决方案.
缩短谈话时间 - 我想要的是:给定一个已知宽度和高度的矩形,我必须找出有多少已知尺寸的形状(多边形)(可以随意旋转)可以放在那个矩形内.
例如,我可以选择一个T形件,在同一个矩形中,我可以有效地打包它,每个矩形产生4个形状

以及根据他们的边界框平铺它们,我只能适应3的情况

但当然,这只是一个例子......我认为解决这个特殊情况并不是很有用.我现在能想到的唯一方法就是回顾它们的复杂性或只解决这个问题的特定情况.所以...任何想法?
更新5
创建了另一个小提琴以显示预期的外观。添加了不可见的穹顶和魔方相机,并使用了环境贴图;就我而言,由于已经提到的原因,不应使用这些技术。
var MatcapTransformer = function(uvs, face) {
for (var i = uvs.length; i-- > 0;) {
uvs[i].x = face.vertexNormals[i].x * 0.5 + 0.5;
uvs[i].y = face.vertexNormals[i].y * 0.5 + 0.5;
}
};
var TransformUv = function(geometry, xformer) {
// The first argument is also used as an array in the recursive calls
// as there's no method overloading in javascript; and so is the callback.
var a = arguments[0],
callback = arguments[1];
var faceIterator = function(uvFaces, index) {
xformer(uvFaces[index], …Run Code Online (Sandbox Code Playgroud)我正在按照以下教程设置:https://www.youtube.com/watch?v = owBt9SNKXCI&index = 6&list = PLbghT7MmckI4qGA0Wm_TZS8LVrqS47I9R来动态构建切片贴图布局.它适用于某一点,但它产生了一个非常奇怪的布局,128 x 128大小的瓷砖.
很明显,不应该发生奇怪的分区,但我似乎无法追查导致它的原因.这是我的代码版本,它与quill18creates的版本大致相同,只有一些小差异:
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class TileMap : MonoBehaviour {
public int size_x = 100;
public int size_z = 50;
public float tileSize = 1.0f;
public Texture2D terrainTiles;
int tileResolution = 128;
// Use this for initialization
void Start () {
BuildMesh();
}
Color[][] ChopUpTiles() {
int numTilesPerRow = terrainTiles.width / tileResolution;
int numRows = terrainTiles.height / tileResolution;
Color[][] tiles = new Color[numTilesPerRow*numRows][];
for(int y=0; …Run Code Online (Sandbox Code Playgroud) 我是一名iPhone开发人员,我正在尝试将我在Cinema 4D中创建的3D模型变成一个应用程序.我实际上找到了一种方法来获取模型(通过将其导出为.dae或obj并使用python脚本),这种方法非常有效但是我无法获得纹理.我的脚本实际上也只能处理1个纹理.
基本上我需要在c4d中创建和导出UV贴图(但我不知道如何做到这一点)或者我找到了一种方法来使用脚本或PowerVR将多个纹理读入我的Open G1-ES应用程序.(这可能更好)
对于noob问题很抱歉,但我在3D世界非常新.
干杯
我有从2d形状生成三角形网格的代码.因为在大多数情况下这些形状在表面上具有不均匀的顶点分布,所以我产生UV的问题,因此它不会导致纹理变形.任何人都可以建议一些文章,书籍,代码样本谈论平面网格上的紫外线计算技术?谢谢
来自这个问题,我正在尝试使用Three.js以编程方式为某些模型生成UV映射,我需要这个,因为我的模型也是以编程方式生成的,我需要对它们应用简单的纹理.我已经在这里阅读并成功生成了一些简单的3D文本的UV映射,但是当将相同的映射应用于更复杂的模型时,它就无法工作.
我试图应用的纹理是这样的:
黑色背景在PNG图像中只是透明的.我需要将它应用到我的模型中,它只是一个闪光效果,所以我不关心模型中的确切位置,是否可以通过编程方式为这种情况创建一个简单的UV Map?
我正在使用链接问题中的代码,该代码适用于平面模型,但不适用于非平面模型:
assignUVs = function( geometry ){
geometry.computeBoundingBox();
var max = geometry.boundingBox.max;
var min = geometry.boundingBox.min;
var offset = new THREE.Vector2(0 - min.x, 0 - min.y);
var range = new THREE.Vector2(max.x - min.x, max.y - min.y);
geometry.faceVertexUvs[0] = [];
var faces = geometry.faces;
for (i = 0; i < geometry.faces.length ; i++) {
var v1 = geometry.vertices[faces[i].a];
var v2 = geometry.vertices[faces[i].b];
var v3 = geometry.vertices[faces[i].c];
geometry.faceVertexUvs[0].push([
new THREE.Vector2( ( v1.x + offset.x ) …Run Code Online (Sandbox Code Playgroud) 我从Blender导出了.obj文件(以及.mtl和.png)以导入到libgdx项目中.该文件包含UV和普通数据.
我正在将文件拉入应用程序,如下所示:
ModelLoader loader = new ObjLoader();
model = loader.loadModel(Gdx.files.internal("data/car.obj"));
Run Code Online (Sandbox Code Playgroud)
对象应如下所示:(是的,我不是艺术家)

但最终看起来像这样:

我的UV贴图发生了什么变化?