我写了一个小波前的.obj文件解析器(3d模型格式),我能够正确显示几何体但是问题正确纹理化。
我能够获得正确纹理的唯一方法是在我的3d编辑器中划分模型,以这种方式导出和解析它...即:我不再共享顶点数据,每个三角形都是自己的,所以我的indexBuffer's数组看起来像这个[0,1,2,3,4,5,6 ...],我想避免。
正确的纹理/低效几何(不重复使用顶点:36个顶点):
Correct http://imageshack.us/a/img29/2242/textureright.jpg
错误的纹理/右拓扑(共享数据:仅8个顶点=高效):
Wrong http://imageshack.us/a/img443/6160/texturewrong.jpg
我想尝试将指向顶点的indexs缓冲区中的UVs缓冲区分开,但是没有找到办法。如果确实可行的话。
我也搞砸了agal代码但没有取得任何结果。
期望的一端能够在绘制atm的三角形的上下文中将不同的UV坐标传递给相同的顶点。
该怎么办?
谢谢。 (我是3D编程的新手)
答案 0 :(得分:1)
看起来您的模型每个“顶点位置”只需要一个顶点,但是根据我对.obj解析器的理解,您需要在FACES周围定义顶点。这意味着您可能有多个顶点用于某些位置 - 取决于与该位置相邻的面数 - 但是,您可以在同一位置为这些顶点设置不同的UV坐标。
我建议改变你的解析器,根据它们定义的面而不仅仅是它们的位置来创建顶点。我知道这会增加顶点的数量但是,从我所读到的,如果你需要不同的UV用于相同的顶点位置,这是不可避免的。
所以,不幸的是,我很确定你的第一个选择是要走的路。
答案 1 :(得分:0)
看起来你的焊接操作是错误的。对于焊接顶点,您必须确保位置,UV坐标,法线和切线(如果需要)相等