osg的geometry类

osg库的scenedata是个以osg::node为基类组织的节点树,叶子节点是osg::geometry 类。

geometry类有一系列的方法:
setVertexArray,
setColorArray
setNormalArray

setPrimitiveSet
用于设置顶点坐标,顶点颜色,顶点纹理坐标和法向量,索引等等,图元类型为GPU能绘制的基本类型,点、线段、三角形集合(点,线段,三角形,这和opengl里面的定义一致)。

调setUseVertexBufferObject(true)设置使用vbo,setUseDisplaylist(false)不使用displaylist。

在frame()中遍历到叶子节点, 将在drawImplement方法中创建vbo(glGenBuffer,glBindBuffer,glBufferSubData)和ebo,调用glDrawArray或者glDrawElements绘制。

修改geometry是通过geometry的getVertexArrary,getColorArray这类方法得到坐标或者颜色法向量数组然后修改数据后调dirty()通知数据改变了,将在下次frame调glBufferSubData修改GPU中对应的数据。

上面是opengl4.x之前兼容模式,如果用opengl4.x以后,写glsl着色器则在顶点着色器中写:
layout (location = 0) in vec3 vtPos;
layout (location = 1) in vec4 vtColor;

int main()
{…}

然后代码中
geo->setUseVertexArrayObject(true);//使用vao
osg::Vec3Array* pos = new osg::Vec3Array();
//填写坐标数据
geo->setVertexAttribArray(0,pos); //pos指定为片元着色器的vtPos
geo->setVertexAttribBinding(0,bindperveretx);
osg::Vec4Array* color = new osg::Vec4Array();
填写颜色数据
geo->setVertexAttribArray(1,color);//color指定为片元着色器的vtColor
geo->setVertexAttribBinding(1,bindperveretx);
这样很多接口都不用了。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值