在我的react应用程序中,我尝试创建一个显示从pix4d导出的3d网格的视图页面。该网格由三种类型的文件组成,(.obj、.mtl、.jpg)pix4d。通用域名格式。
我是新来的,有三根纤维,我想这是解决我问题的最好办法。
下面是用于加载和渲染3D模型的react组件的完整代码。
密码
提前谢谢!
我想了解如何附加纹理
我花了几周的时间寻找这个答案,终于找到了一个可行的方法。
Material loader本身并没有解决远程文件的导入问题(它在web上解决,而不是在移动设备上,也许将来会)。所以,我正在创建材质并手动为其指定图像。
大概是这样的:
import { TextureLoader } from 'expo-three';
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader';
// useThree is used to get scene reference
import { useThree } from 'react-three-fiber';
const textureLoader = new TextureLoader();
const mapImage = textureLoader.load(require('path/to/image1.png'))
const normalMapImage = textureLoader.load(require('path/to/image2.png'))
请注意,来自expo three的TextureLoader
可以处理从require()
const loaderObj = new OBJLoader();
const loaderMtl = new MTLLoader();
export default props => {
const { scene } = useThree();
loaderMtl.load(
'https://url_to/material.mtl',
mtl => {
mtl.preload();
loaderObj.setMaterials(mtl);
loaderObj.load(
'https://url_to/model.obj',
obj => {
// simple logic for an obj with single child
obj.children[0].material.map = mapImage;
obj.children[0].material.normalMap = normalMapImage;
scene.add(obj)
}
)
}
)
return null;
}
这是我第一次成功地尝试用mtl渲染obj,包括一个映射和一个法线映射,所以既然它可以工作,我们就可以不断更新代码以进行改进。
我正在使用React Three Fiber和“Drei”,并想使用广告牌。但我只知道如何改变广告牌的颜色,而不知道如何添加纹理。 我试过这样做,但在广告牌上找不到任何文档,也不知道我能传递什么样的论点。 在这里,您可以看到如何更改颜色,但不能看到如何添加纹理: https://drei.react-spring.io/?path=/story/abstractions-布告牌——布告牌街 希望有
我正在尝试将位图纹理材质放置在由三个贴图创建的网格上。js形状测量学。 几何体是一个简单的八角形(我最终会添加曲线,使其成为一个圆角矩形)。 网格被创建并显示得很好,除了位图纹理显示为四个巨大的正方形,这似乎是加载图像的超复制低分辨率版本。 (加载的图像实际上是法国国旗的512x512照片) 如何获得纹理以使用加载图像的完整分辨率?(顺便说一句,将此纹理作为材质应用于由3.PlaneGeometr
谢谢你花时间看我的问题。 我用的是三根纤维。我试图将小盒子连接到网格的两侧。我从光线投射器获得了长方体网格的位置。 我的问题是,在旋转父组后,t恤网格的矩阵似乎是反向的。据我所知,光线投射器是基于这个矩阵工作的。我确实尝试过updateMatrix()和updateMatrix World(),但结果令人困惑。 在这样旋转组之后,更新子矩阵的标准方法是什么?任何帮助都将不胜感激。 这是我问题的一个
嘿,我不能让我的纹理出现,我不知道怎么了。辅导没有帮助。这是我的代码: spriteX=0,spriteY=0,spriteW=400,spriteL=400,x=0,y=0 这是我得到的输出:输出窗口 正如你所见,黑色三角形显示得很好,但没有纹理
提前感谢!
我以前做了几个实验,以找到绘制大规模六边形网格的最佳方法。 我尝试使用、绘制hexes。它在小网格中工作得很好,但如果我在一个网格中有超过1000+的单元格,fps就开始很难下降。 所以我想出了这个想法,将纹理(包含六边形网格模式)应用到一个简单的平面上。我只需要设置纹理的函数来指定垂直和水平执行多少次重复。