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