一、环境变量配置:(下载NPS_Turtorials 链接:https://pan.baidu.com/s/1oM4-mwvxQBC3caak0-BiRg 提取码:0zvb)
1.
加入到环境变量path中
2.
打开解决方案
3.修改 下面这些的地方
4.修改x64debug
5.Tutorial_02设为启动项
6.代码修改:注释掉报错行的代码即可
7.重新生成,并运行
如果出现这种情况: 记得将链接器里的输入修改
出现这种情况:回到步骤五重新来一遍
8.运行结果
9.背景介绍:
对一下几个类的简单解释:
Geode类:
geode类继承自node类。在一个Scene Graph中,node(当然包含geode)可以作为叶子节点。Geode实例可以有多个相关的drawable。
Drawable类层次
基类drawable是一个有六个具体子类的抽象类。
geometry类可以直接有vertex和vertex数据,或者任意个primitiveSet实例。
vertex和vertex属性数据(颜色、法线、纹理坐标)存放在数组中。既然多个顶点可以共享相同的颜色、法线或纹理坐标,那么数组索引就可以用来将顶点数组映射到颜色、法线、或纹理坐标数组。
PrimitiveSet类:
这个类松散的包装了OpenGL的基本图形-POINTS,LINES,LINE_STRIP,LINE_LOOP,...,POLYGON.
10.代码分析:
创建绘制金字塔的类OSG下的pyramidGeode
绘制并加入到root节点下
首先,OSG的坐标系是这样的:X向右,Y向屏幕里,Z向上,因此它符合右手坐标系;与OpenGL相比,它的坐标系相当于绕X轴正向逆时针旋转了90度。
声明一个顶点数组。每个顶点由一个三元组表示——vec3类的实例。这些三元组用osg::Vec3Array类的实例存贮。既然osg::Vec3Array继承自STL的vector类,那么我们就可以使用push_back方法来添加数组成员。push_back将元素加到向量的尾端,因此第一个元素的索引是0,第二个是1,依此类推。使用‘z’轴向上的右手坐标系系统,下面的0...4数组元素代表着产生一个简单锥体所需的5个点。
将这个顶点集合和与我们加到场景中的geode相关的geometry关联起来。
下一步,产生一个基本集合并将其加入到pyramid geometry中。使用pyramid的前四个点通过DrawElementsUint类的实例来定义基座。这个类也继承自STL的vector,所以push_back方法会顺序添加元素。为了保证合适的背面剔除,顶点的顺序应当是逆时针方向的。构造器的参数是基本的枚举类型(和opengl的基本枚举类型一致),和起始的顶点数组索引。
声明并加载一个vec4为元素的数组来存储颜色
声明的这个变量可以将顶点数组元素和颜色数组元素匹配起来。这个容器的元素数应当和顶点数一致。这个容器是顶点数组和颜色数组的连接。这个索引数组中的条目就对应着顶点数组中的元素。他们的值就是颜色数组中的索引。顶点数组元素与normal和纹理坐标数组的匹配也是遵循这种模式。
注意,这种情况下,我们将5个顶点指定4种颜色。顶点数组的0和4元素都被指定为颜色数组的0元素。
下一步,将颜色数组和geometry关联起来,将上面产生的颜色索引指定给geometry,设定绑定模式为_PER_VERTEX。
既然我们生成了一个geometry节点并将它加到了场景中,我们就可以重用这个geometry。例如,如果我们想让另一个pyramid在第一个的右侧15个单位处,我们就可以在我们的scene graph中将这个geode加到transform节点的子节点上。
最后一步,建立并进入一个仿真循环。