查看: 1417|回复: 5

V2.8.3不支持带有齐次坐标的顶点的问题

[复制链接]

该用户从未签到

发表于 2011-4-21 14:25:46 | 显示全部楼层 |阅读模式
大家好:
    我要设置带有齐次坐标的三角带几何体,代码如下:
osg::ref_ptr<osg::Geode> WavesSpectrumPass::createQuad()
{
        osg::ref_ptr<osg::Geode> quadGeode = new osg::Geode;

        // set up the Geometry.
        osg::ref_ptr<osg::Geometry>  quadGeom = new osg::Geometry;

        osg::ref_ptr<osg::Vec4Array> quad_coords = new osg::Vec4Array; // vertex coords
        // counter-clockwise
        quad_coords->push_back(osg::Vec4f(-1.0, -1.0, 0.0, 0.0));
        quad_coords->push_back(osg::Vec4f(+1.0, -1.0, 1.0, 0.0));
        quad_coords->push_back(osg::Vec4f(-1.0, +1.0, 0.0, 1.0));
        quad_coords->push_back(osg::Vec4f(+1.0, +1.0, 1.0, 1.0));

        quadGeom->setVertexArray(quad_coords.get());

        osg::ref_ptr<osg:rawArrays> quad_da = new osg::DrawArrays(osg:rimitiveSet::TRIANGLE_STRIP,0,4);
        quadGeom->addPrimitiveSet(quad_da.get());

        quadGeode->addDrawable(quadGeom);
        return quadGeode;
}

遇到的问题是系统报错:
   Triangle Functor does not support Vec4* vertex arrays

也跟踪到class TriangleFunctor 的确未实现。

请问大家能告诉我用什么方式可以间接实现此功能?

该用户从未签到

发表于 2011-4-22 09:23:33 | 显示全部楼层
您可以仿照TriangleFunctor 自己写一个相关的工具,它的代码并不复杂

该用户从未签到

 楼主| 发表于 2011-4-22 14:04:14 | 显示全部楼层
谢谢Array的提供线索。

该用户从未签到

 楼主| 发表于 2011-4-27 09:19:41 | 显示全部楼层
本帖最后由 binarylee 于 2011-4-27 09:34 编辑

安装Array的建议,我自己已经实现了,代码如下:

static void drawQuad()
{
        glBegin(GL_TRIANGLE_STRIP);
        glVertex4f(-1.0, -1.0, 0.0, 0.0);
        glVertex4f(+1.0, -1.0, 1.0, 0.0);
        glVertex4f(-1.0, +1.0, 0.0, 1.0);
        glVertex4f(+1.0, +1.0, 1.0, 1.0);
        glEnd();
}

class Quad : public osg:rawable
{
public:
        Quad() {}

        /** Copy constructor using CopyOp to manage deep vs shallow copy.*/
        Quad(const Quad& quad,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY):
        osg::Drawable(quad,copyop) {}

        META_Object(ocean,Quad)

                virtual void drawImplementation(osg::RenderInfo&) const
        {
                drawQuad();
        }

protected:

        virtual ~Quad() {}

};


osg::ref_ptr<osg::Geode> createQuad()
{
        osg::ref_ptr<osg::Geode> quadGeode = new osg::Geode;

        quadGeode->addDrawable(new Quad);
        return quadGeode;
}

该用户从未签到

发表于 2011-4-27 14:00:08 | 显示全部楼层
谢谢您的分享啊

该用户从未签到

发表于 2011-5-27 11:06:16 | 显示全部楼层
下次碰到了就有参考了,多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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