查看: 935|回复: 0

使用着色器渲染地形网格

[复制链接]

该用户从未签到

发表于 2016-4-3 15:17:27 | 显示全部楼层 |阅读模式
读取一张地形图,按照行主序将每个顶点的数据存入到顶点数组中,按照逆时针方向存储顶点索引,想通过着色器来渲染地形网格,按照索引绘制画不出来,求大神帮忙看看问题出在哪里,部分代码如下:

        
        osg::ref_ptr<osg::Vec3Array> veca = new osg::Vec3Array;   
        
        osg::ref_ptr<osg::UIntArray> indexA = new osg::UIntArray;

        //顶点
        for (int r = 0; r < numRows; r++)  //r相当于z  c相当于x
        {
                for (int c = 0; c < numColumns; c++)
                {
                        
                        veca->push_back(osg::Vec3f((float)c,(float)r,((*heightMap->data(c,r)))));

                }
        }

        //索引
        for (int r = 0; r < numRows-1; r++)
        {
                for (int c = 0; c < numColumns-1; c++)
                {
                        nLocIndex = r*numColumns + c;

                        indexA->push_back(nLocIndex);
                        indexA->push_back(nLocIndex+numColumns);
                        indexA->push_back(nLocIndex+1);

                        indexA->push_back(nLocIndex+1);
                        indexA->push_back(nLocIndex+numColumns);
                        indexA->push_back(nLocIndex+numColumns+1);
                }
        }
        
        //这样绘制可以显示,但画出来的不是网格
        geom->addPrimitiveSet(new osg:rawArrays(osg:rimitiveSet::TRIANGLES,0,veca->size()));
        
        //用索引画则不能显示
        geom->addPrimitiveSet(new osg:rawElementsUInt(osg:rimitiveSet::TRIANGLES,indexA->size()));

        geom->setVertexAttribArray(0,veca);
        geom->setVertexAttribBinding(0,osg::Geometry::BIND_PER_VERTEX);


//vshader
static char * vertexShader= {  
        "#version 430 \n"  
        "layout (location=0) in vec3 VertexPosition;\n"  
        "uniform mat4 MVP;"  
        "out vec4 Color;\n"  
        "void main()\n"  
        "{\n"  
        "   Color = vec4(1.0,1.0,0.0,1.0);\n"  
        "   gl_Position = MVP * vec4(VertexPosition,1.0);\n"  
        "   }\n"  
};
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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