查看: 5899|回复: 17

一个贴图方面的问题,可能比较弱智

[复制链接]

该用户从未签到

发表于 2008-2-22 21:37:15 | 显示全部楼层 |阅读模式
这个是我用项目中用osg渲染出来的模型,注意里面的绿化带贴图用的是拉伸的参数

这个是模型本身制作方那边用ogl渲染出来的图

上面那行字就是boss给我的留言,请问怎么处理才能达到下图的效果啊

该用户从未签到

发表于 2008-2-22 21:53:22 | 显示全部楼层
可能是贴图参数设置的问题,你可能要把贴图能成弄成REPEAT才行。

该用户从未签到

发表于 2008-2-22 23:02:02 | 显示全部楼层
你的场景如果非常大的话,那一定要设置纹理压缩,不然速度一定很慢,就有可能出现这样的情况~~~~~~~

该用户从未签到

发表于 2008-2-22 23:13:41 | 显示全部楼层
绿化带贴图坐标是怎么设置的?感觉似乎没有用好重复纹理的样子~~这里setWrap应该设置为REPEAT的

该用户从未签到

 楼主| 发表于 2008-2-24 21:56:41 | 显示全部楼层
我不负责建模,我装了3dsmax后渲染发现,这个绿化带是好的,但是用osg渲染是拉伸的,应该就是重复纹理的问题,这个是要从模型上改还是code上改呢?
这个3ds和纹理贴图之间的内联是由模型建立时内联的,setwrap要怎么设置呢?

该用户从未签到

发表于 2008-2-24 23:01:20 | 显示全部楼层
原帖由 soulpower 于 2008-2-24 21:56 发表
我不负责建模,我装了3dsmax后渲染发现,这个绿化带是好的,但是用osg渲染是拉伸的,应该就是重复纹理的问题,这个是要从模型上改还是code上改呢?
这个3ds和纹理贴图之间的内联是由模型建立时内联的,setwrap要怎么 ...


唔,如果纹理贴图已经在3dsmax中设置好了,似乎不该有问题才对。不知模型文件是什么格式,如果文件格式随着软件的升级也有改变的话,估计低版本的OSG不一定完全识别。可以尝试将模型保存为.osg,然后用文本工具检查一下绿化带Geometry的纹理坐标是不是正确。
如果要在程序中改Wrap方式的话,可以用
stateset->getTextureAttribute(0, osg::StateAttribute::TEXTURE);
获取Texture2D的指针,然后执行
setWrap(WRAP_S, osg::Texture::REPEAT);
setWrap(WRAP_T, osg::Texture::REPEAT);

该用户从未签到

 楼主| 发表于 2008-2-25 10:58:15 | 显示全部楼层
我将那个绿化带单独抽出来,用osgexp导出osg文件,把里面
wrap_s REPEAT
  wrap_t REPEAT
  wrap_r CLAMP
的参数给改成上面那样了,可是还是没有效果,why
我把模型传上来,你们看看,谢谢

附件里rar包里,有max文件,配合一个jpg的贴图,而那个osg文件配合image里的tga图,help

help.rar

1020.55 KB, 下载次数: 443, 下载积分: 威望 1

该用户从未签到

发表于 2008-2-25 14:17:15 | 显示全部楼层
原帖由 soulpower 于 2008-2-25 10:58 发表
我将那个绿化带单独抽出来,用osgexp导出osg文件,把里面
wrap_s REPEAT
  wrap_t REPEAT
  wrap_r CLAMP
的参数给改成上面那样了,可是还是没有效果,why
我把模型传上来,你们看看,谢谢


从.osg文件中感觉纹理坐标明显不对,这样设置Wrap也没什么用……是不是osgExp的转换有错误?还有你的OSG程序中是怎么读入模型的,max文件应该不能直接支持,试一试读入3ds格式,这样还可以顺便在3dsmax里看一看模型是不是正确

该用户从未签到

 楼主| 发表于 2008-2-25 16:16:34 | 显示全部楼层
那个osg文件可能由于我改动过所以添加了一些其他的代码,就几行其他的参数,你怎么看出明显不对的呢?
提供max文件是源文件了,导出的3ds或者osg文件在osg程序里都没有办法正常贴图出来,这个与程序无关了,我用cmd环境下的osgviewer直接看也是纹理拉伸的
谁有max9版本,帮忙export一个出来看看怎么修改可以成功,这个问题困扰几天了,谢谢

该用户从未签到

 楼主| 发表于 2008-2-25 16:23:02 | 显示全部楼层
帮忙下载的朋友,可以观察3ds max里面渲染和 在osg里面渲染的区别,一个是repeat,一个是拉伸的,如果要在3dsmax里设置要怎么设啊

该用户从未签到

发表于 2008-2-25 18:29:07 | 显示全部楼层
原帖由 soulpower 于 2008-2-25 16:16 发表
那个osg文件可能由于我改动过所以添加了一些其他的代码,就几行其他的参数,你怎么看出明显不对的呢?
提供max文件是源文件了,导出的3ds或者osg文件在osg程序里都没有办法正常贴图出来,这个与程序无关了,我用cmd ...


呵呵,因为有些顶点之间的距离很大,而对应的纹理坐标仍然在[0,1]区间,所以肯定会拉伸了~~调整Wrap估计就没什么用了

该用户从未签到

 楼主| 发表于 2008-2-25 19:34:04 | 显示全部楼层
这个到底要怎么整呢,3dsmax里渲染是好的说,拿到osg就变样了,唉

该用户从未签到

发表于 2008-2-25 23:10:37 | 显示全部楼层
原帖由 soulpower 于 2008-2-25 19:34 发表
这个到底要怎么整呢,3dsmax里渲染是好的说,拿到osg就变样了,唉


我只有max7……打不开,呵呵。
不妨做个试验,在你的max9里画一个四边形,加上重复纹理。然后看看OSG的结果是不是正确。我不确定是不是max9的文件格式不一样所致,不过按理说.3ds文件应该是没问题的。

该用户从未签到

 楼主| 发表于 2008-2-26 13:47:40 | 显示全部楼层

快崩溃了

1.jpg
上图是在3dsmax里渲染出来的
2.jpg
下图是在osg里渲染出来的

我怀疑是3dsmax9的问题,就又导出3ds文件反导回3dsmax8去试,还是不行
谁能搞定这个问题啊,再发一个包,内含max9和max8的源文件,和3ds文件(array大哥可用7import),快崩溃了,模型制作那边肯定说是我这边问题,所以还是要我来处理的

sos.rar

394.21 KB, 下载次数: 1259, 下载积分: 威望 1

该用户从未签到

发表于 2008-2-26 22:03:38 | 显示全部楼层
嗯,暂时不知道是什么原因,不过解决方法倒是有不少。
3dsmax输出的3ds和obj文件都没有修改纹理坐标,而是在其它的地方设置了重复次数。你可以把文件导出成obj格式,然后看看mtl文件的内容,有一行:
map_Kd -s 1.0 140.0 1.0 BO_CO.JPG
这表示纹理的重复次数S方向为1,T方向140,W方向1。但是OSG的导入插件好像并不理会,而是直接载入纹理坐标的值,以致图片被拉伸。我不知道这算不算一个BUG,改天问问osg-users好了~~(也可能人家早就有解决方法,只是我们很“土”,呵呵)

我的做法是自己写了个程序,把纹理T坐标读出来,然后统统乘上140~~感觉这样做很不合时宜,不过如果你的模型不会经常换的话,应该能帮着应付一下……
重复次数可以在3dsmax中打开纹理对话框看到。
结果来看似乎能达到你的要求了?过程笨得很,不要介意~~希望能有更好的做法
texrepeat.JPG

main.rar

826 Bytes, 下载次数: 127, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2008-2-27 21:00:00 | 显示全部楼层
非常感谢array,解决了这个问题,我试了直接转成obj发现贴图根本贴不上去,不知何故,明明mtl文件里有指向贴图文件,不过通过array提供的思路和代码解决了,很作弊,唉,不知道是不是bug,模型处理问题?不会吧,都2.3的版本了

该用户从未签到

发表于 2008-2-27 21:20:00 | 显示全部楼层
原帖由 soulpower 于 2008-2-27 21:00 发表
非常感谢array,解决了这个问题,我试了直接转成obj发现贴图根本贴不上去,不知何故,明明mtl文件里有指向贴图文件,不过通过array提供的思路和代码解决了,很作弊,唉,不知道是不是bug,模型处理问题?不会吧,都2 ...


obj贴图贴不上去的话,检查一下贴图文件的文件名,3ds和obj格式必须使用8.3旧格式的文件名,否则贴不上去的。
至于是不是BUG,问问osg-users好了,说不定很简单的……不过官方曾经说过3ds是很过时的文件格式,所以不再提供支持和更新倒也有可能

该用户从未签到

 楼主| 发表于 2008-2-28 12:55:19 | 显示全部楼层
没违反8.3啊,就是死活贴不上obj贴图,开始怀疑是那个obj export的参数设置有问题,就自己花了个cube贴了图能导出obj并成功渲染贴图,可是用这个绿化带就没有贴图了,唉,无语了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表