如何在.OBJ文件中包含顶点颜色信息?


Answers:


9

Blender可以导出基于文本的PLY文件(.ply),非常易于解析,并且包括顶点颜色。困难的方法是更改​​OBJ导出器代码,使其包含顶点颜色(从而破坏obj兼容性)。


8
错误的办法是改变OBJ出口国。使用正确的工具完成工作;如果您想要顶点颜色,那么Wavefront OBJ显然不是您要使用(或滥用)的工具。
Martin Sojka

6
为什么这是错误的方式?如果他只是让OBJ出口商自己生产,我真的看不到这是多么“错误”。错误的方法是不做任何工作,因为它总是对某人的错误方法。
Ravachol

.obj格式使用.mtl文件存储材料信息,但据我所知,每个面仅支持一种材料。此外,.obj是维基百科条目实际上有用的
少数

3
这是错误的,因为OBJ是固定的规范。一旦你开始改变出口做额外的东西,它不再是一个OBJ出口国,它的东西。从那里,它几乎可以变成任何多头野兽。不过,很好的答案,我从未听说过PLY。
工程师

@NickWiggill PLY不一定是一个好选择-也许您没有充分理由就没有听说过它。它比OBJ复杂得多,并且比静态模型合理地需要更大的灵活性。如果您需要更多的灵活性,也许您应该使用更流行的文件格式以及成熟的解析器,例如COLLADA
bobobobo

18

确实有一种Wavefront的* .obj可以简化顶点着色。.我知道有两个可以导出它们的应用程序,即“ MeshLab”(免费)和“ MeshMixer”(也可以从Autodesk免费获得)。在每个顶点定义之后,如下所示。

(* .obj的部分)

####
#
# OBJ File Generated by Meshlab
#
####
# Object VERTEXPAINT_004_OBJ.obj
#
# Vertices: 284
# Faces: 281
#
####
mtllib ./VERTEXPAINT_004_OBJ.obj.mtl

vn 0.029683 0.730087 -0.682709
v 1220.094482 -572.500000 177.713943 0.984314 0.764706 1.000000  

# "3 vals for Vert and 3 vals for Col"

vn 0.000000 0.858139 -0.513418
v 1291.571533 -609.439636 -28.628490 0.921569 0.219608 1.000000
vn 0.303129 0.896367 -0.323480

尝试使用meshlab生成“基于顶点的环境光遮挡”,然后使用“ MeshMixer”将其打开。

这应该可以澄清您的问题。.我认为顶点着色随着着色器的出现而又回来了。.当发现图像贴图时,似乎忽略了顶点着色。让我知道这是否有用!


哦,我懂了。他们在每个顶点的颜色上添加了顶点位置指定的3个浮点数v。(希望)不破坏与现有OBJ解析器的兼容性的巧妙方法。
bobobobo

+1我在最近获取的obj文件中恰好遇到了这些有色顶点。根据OBJ顶点着色分析问题·问题#2083·mrdoob / three.js,颜色通常是红色,绿色,蓝色,从0到1。您是否从任何乡亲们支持吗?实现它的任何开源代码如何?实际上是否有被广泛接受的obj书面标准?
nealmcb 2014年

啊哈-回答我的问题之一,MeshLab不仅免费,而且还开源(GPL)和跨平台:)
nealmcb 2014年

7

Wavefront OBJ支持材料,其颜色的网格颜色相同。

重大声明如下所示:

newmtl redMtl
Kd 1.00 0.00 0.00
Ks 0.50 0.50 0.50
Ns 18.00

因此,Kd是漫反射分量,Ks是镜面反射。

这些将在.obj文件随附的.mtl文件中指定。在.obj文件中的语句如下

usemtl redMtl
f 1/5/1 30/39/2 20/29/3
f 20/29/4 30/39/5 31/41/6
f 35/48/7 26/35/8 2/6/9

这意味着在那里指定的面必须使用redMtl材质。解析obj文件时,这会转换为每个顶点的颜色。

如果有很多不同的颜色,您将有很多不同的材料,但是您可以做到。

这是有关如何为一组特定的面孔分配不同材质的视频。如果需要,可以为网格中的每个面分配不同的材质。


5
不幸的是,这仅允许按面着色,而不允许按顶点着色。
蓬松的2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.