查看: 4036|回复: 10

不规则纹理的邦定问题

[复制链接]

该用户从未签到

发表于 2008-4-23 10:31:50 | 显示全部楼层 |阅读模式
是这样的,我有一个菱形的面片,还有一个正方形的纹理,我想把这个正方形的纹理邦定到菱形的面片上去,但是有个问题,有一个点没有邦定上,代码如下,也请大家下载图片看看

osg::Geometry* draw = new osg::Geometry;
osg::Vec3Array* bv = new osg::Vec3Array;
//菱形的坐标
bv->push_back(-10,0,-10);
bv->push_back(  0,0,-20);
bv->push_back( 10,0,-10);
bv->push_back( 10,0, 10);
bv->push_back(  0,0, 20);
bv->push_back(-10,0,-10);

osg:rawElementsUnit* face = new osg::DrawElementsUnit(osg::primtiveSet:OLYGON,0);
face->push_back( 0 );
face->push_back( 1 );
face->push_back( 2 );
face->push_back( 3 );
face->push_back( 4 );
face->push_back( 5 );

draw->addPrimitiveSet(face);

osg::Vec2Array text_coord = new osg::Vec2Array;
text_coord->push_back( osg::vec(0.0, 0.0));
text_coord->push_back( osg::vec(0.5, 0.0));
text_coord->push_back( osg::vec(1.0, 0.0));
text_coord->push_back( osg::vec(1.0, 1.0));
text_coord->push_back( osg::vec(0.5, 1.0));
text_coord->push_back( osg::vec(0.0, 1.0));

draw->setTexCoord(0,texture)
//一些设置状态量
osg::StateSet* s = new osg::StateSet;
osg::Texture2D* texture = new osg::Texture2D;
texture->setImage(image);

纹理邦定效果图

纹理邦定效果图
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-23 11:00:24 | 显示全部楼层
    OPENGL纹理绑定是关键点绑定,举个例子来说,如果确定了四个角,纹理就会自动的绑到一个四边形上去,是否重复与发生扭曲那是你的参数决定,如果绑定类似于地形的纹理,需要指定各关键点,然后会依照各关键点自动插值形成平滑的纹理过度,你把正方形的绑定到夌形上,其实不用管这么多,你只要把你认为的ABCDEFGHIJK这些点绑定到ABCDEFGHIJK这些点上就可以了,它会自然的过渡的,,,,,也就是必要的关键点指定的越多,绑定的就越好,比如绑定一个四边形就需四个点,,,~~~~你这个图形貌似需要指定六个点,

    该用户从未签到

     楼主| 发表于 2008-4-23 11:08:55 | 显示全部楼层
    我指定的就是六个点,但是有一个点不知道为什么没有邦定上,请看我的程序

    该用户从未签到

    发表于 2008-4-23 14:51:09 | 显示全部楼层
    bv->push_back(-10,0,-10);
    bv->push_back(  0,0,-20);
    bv->push_back( 10,0,-10);
    bv->push_back( 10,0, 10);
    bv->push_back(  0,0, 20);
    bv->push_back(-10,0,-10);


    不知是否是您的笔误?第六个点和第一个点是重合的吗?
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-23 14:57:35 | 显示全部楼层
    问题出在这里,如果你的圆心在夌形的中心,下面的话最后一个点是不对的:
    bv->push_back(-10,0,-10);
    bv->push_back(  0,0,-20);
    bv->push_back( 10,0,-10);
    bv->push_back( 10,0, 10);
    bv->push_back(  0,0, 20);
    bv->push_back(-10,0,-10);
    应该把最后一句改为
    bv->push_back(-10,0,10);

    你再试一下吧,我看你的这些点,第一个是夌形的左下角,是按逆时针转的,不知道事实是怎样的`~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-4-23 14:59:17 | 显示全部楼层
    4楼发表于 2008-4-23 14:51
    5楼发表于 2008-4-23 14:57

    看来煞时间都丑出来你那地儿错了

    该用户从未签到

     楼主| 发表于 2008-4-23 21:26:52 | 显示全部楼层
    这个是笔误,是不是其它地方要进行设置呢?程序中是对的。

    就是那个StateSet有么有什么要进行特殊设置的啊?

    [ 本帖最后由 小艾久久 于 2008-4-23 21:29 编辑 ]

    该用户从未签到

    发表于 2008-4-24 08:59:13 | 显示全部楼层
    嗯,那么试一试截取纹理坐标吧,可能是浮点数超界了?
    texture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
    texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
    texture->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_EDGE);

    该用户从未签到

     楼主| 发表于 2008-4-24 09:13:32 | 显示全部楼层
    1  能解释一下为什么会发生越界的情况么?越界的情况时有与什么引起的呢?为什么会有一个能顶点(菱形的最高点)能绑定上呢?

    2  三段话应该放在哪里呢?我指的是程序中的位置。

    该用户从未签到

    发表于 2008-4-24 15:10:24 | 显示全部楼层
    原帖由 小艾久久 于 2008-4-24 09:13 发表
    1  能解释一下为什么会发生越界的情况么?越界的情况时有与什么引起的呢?为什么会有一个能顶点(菱形的最高点)能绑定上呢?

    2  三段话应该放在哪里呢?我指的是程序中的位置。


    这个当然放在声明了Texture2D实例之后,我试了一下应该可以。

    该用户从未签到

     楼主| 发表于 2008-4-25 14:09:23 | 显示全部楼层
    纹理是邦定上了,但是没有拉伸的效果,如果一个正方形被绑在了菱形上,那么在两个尖点的地方,应该会有拉伸的,但是下面那个没有拉伸。

    这是为什么呢
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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