查看: 2288|回复: 4

关于osg的模型共享和纹理共享

[复制链接]

该用户从未签到

发表于 2014-2-7 15:53:46 | 显示全部楼层 |阅读模式
请教各位大神一个问题,场景里有很多棵样式相同,但是大小和方向都不同的十字树,我想采用模型共享的方式,以减小场景的数据量。
把每棵树作为一个PositionAttitudeTransform结点的子结点,创建一棵树,定义一个UniqueID Group_2,其他的PositionAttitudeTransform结点定义为:
PositionAttitudeTransform {
    nodeMask 0xffffffff
    cullingActive TRUE
    referenceFrame RELATIVE
    position -6004.52 4495.5 0
    attitude 0 0 0 1
    scale 1.59018 1.59018 1.59018
    pivotPoint 0 0 0
    num_children 1
    Use Group_2
  }
所有PositionAttitudeTransform作为一个MatrixTransform结点的子结点,存成一个ive文件。
然后读取进场景,发现场景渲染效率没有明显提高。
检测发现Unique数量减小了,但是instance数量没有变化,请问这样做是否能正确起到模型共享的作用?
各位有神马其他可以实现纹理共享,以减小数据量的方法呢?

该用户从未签到

发表于 2014-2-11 10:33:25 | 显示全部楼层
共享子节点的方式没有问题,不过您为什么不在程序中直接这样做呢

该用户从未签到

 楼主| 发表于 2014-2-12 11:20:33 | 显示全部楼层
array 发表于 2014-2-11 10:33
共享子节点的方式没有问题,不过您为什么不在程序中直接这样做呢

哦,因为场景数据都是实景模型,范围很大,做了分片动态加载。在模型制作时先设置好比较方便。。。
这样会对效率有影响吗?大片的树对渲染效率影响蛮大,还没找到合适的方法。。
请王老师,不吝赐教~

该用户从未签到

 楼主| 发表于 2014-2-12 16:59:09 | 显示全部楼层
我的一棵树的结果是这样的:
PositionAttitudeTransform {
    nodeMask 0xffffffff
    cullingActive TRUE
    referenceFrame RELATIVE
    position -5998.09 4496.45 0
    attitude 0 0 0 1
    scale 1.59018 1.59018 1.59018
    pivotPoint 0 0 0
    num_children 1
Group {
      UniqueID Group_2
      DataVariance STATIC
      nodeMask 0xffffffff
      cullingActive TRUE
      num_children 2
      Geode {
        DataVariance STATIC
        nodeMask 0xffffffff
        cullingActive TRUE
        num_drawables 1
        Geometry {
          DataVariance DYNAMIC
          StateSet {
            DataVariance STATIC
            rendering_hint DEFAULT_BIN
            renderBinMode INHERIT
            GL_CULL_FACE ON
            GL_LIGHTING ON
            GL_NORMALIZE ON
            GL_BLEND ON
            Material {
              DataVariance STATIC
              ColorMode OFF
              ambientColor 0.588235 0.588235 0.588235 1
              diffuseColor 1 1 1 1
              specularColor 0 0 0 1
              emissionColor 0 0 0 1
              shininess 0
            }
            Use BlendFunc_0
            textureUnit 0 {
              GL_TEXTURE_2D ON
              Texture2D {
                UniqueID Texture2D_3
                DataVariance STATIC
                file "WU05-6-GA-YY1.dds"
                wrap_s REPEAT
                wrap_t REPEAT
                wrap_r CLAMP_TO_EDGE
                min_filter LINEAR_MIPMAP_LINEAR
                mag_filter LINEAR
                maxAnisotropy 1
                borderColor 0 0 0 0
                borderWidth 0
                useHardwareMipMapGeneration TRUE
                unRefImageDataAfterApply TRUE
                internalFormatMode USE_IMAGE_DATA_FORMAT
                resizeNonPowerOfTwo TRUE
                shadowComparison FALSE
                shadowCompareFunc GL_LEQUAL
                shadowTextureMode GL_LUMINANCE
              }
              Use TexEnv_1
            }
            textureUnit 1 {
              GL_TEXTURE_2D ON
              Use Texture2D_3
              TexEnvCombine {
                UniqueID TexEnvCombine_4
                DataVariance STATIC
                combine_RGB REPLACE
                combine_Alpha INTERPOLATE
                source0_RGB PREVIOUS
                source1_RGB PREVIOUS
                source2_RGB CONSTANT
                source0_Alpha TEXTURE
                source1_Alpha PREVIOUS
                source2_Alpha CONSTANT
                operand0_RGB SRC_COLOR
                operand1_RGB SRC_COLOR
                operand2_RGB SRC_ALPHA
                operand0_Alpha SRC_ALPHA
                operand1_Alpha SRC_ALPHA
                operand2_Alpha SRC_ALPHA
                scale_RGB 1
                scale_Alpha 1
                constantColor 1 1 1 1
              }
            }
          }
          useDisplayList FALSE
          useVertexBufferObjects TRUE
          PrimitiveSets 1
          {
            DrawElementsUShort TRIANGLE_STRIP 4
            {
              1 2 0 3
            }
          }
          VertexArray Vec3Array 4
          {
            -3.7394 -3.7394 0.0500002
            3.7394 -3.7394 0.0500002
            3.7394 3.7394 0.0500002
            -3.7394 3.7394 0.0500002
          }
          NormalBinding PER_VERTEX
          NormalArray Vec3Array 4
          {
            0 0 1
            0 0 1
            0 0 1
            0 0 1
          }
          TexCoordArray 0 Vec2Array 4
          {
            0 0
            1 0
            1 1
            0 1
          }
          TexCoordArray 1 Vec2Array 4
          {
            0 0
            1 0
            1 1
            0 1
          }
        }
      }
      Billboard {
        DataVariance STATIC
        name "OSG_Billboard01"
        nodeMask 0xffffffff
        cullingActive TRUE
        num_drawables 1
        Geometry {
          DataVariance DYNAMIC
          StateSet {
            DataVariance STATIC
            rendering_hint DEFAULT_BIN
            renderBinMode INHERIT
            GL_CULL_FACE ON
            GL_LIGHTING ON
            GL_NORMALIZE ON
            GL_BLEND ON
            Material {
              DataVariance STATIC
              ColorMode OFF
              ambientColor 0.588 0.588 0.588 1
              diffuseColor 1 1 1 1
              specularColor 0 0 0 1
              emissionColor 0 0 0 1
              shininess 0
            }
            Use BlendFunc_0
            textureUnit 0 {
              GL_TEXTURE_2D ON
              Texture2D {
                UniqueID Texture2D_5
                DataVariance STATIC
                file "JH05-6-GA-WT-007.dds"
                wrap_s REPEAT
                wrap_t REPEAT
                wrap_r CLAMP_TO_EDGE
                min_filter LINEAR_MIPMAP_LINEAR
                mag_filter LINEAR
                maxAnisotropy 1
                borderColor 0 0 0 0
                borderWidth 0
                useHardwareMipMapGeneration TRUE
                unRefImageDataAfterApply TRUE
                internalFormatMode USE_IMAGE_DATA_FORMAT
                resizeNonPowerOfTwo TRUE
                shadowComparison FALSE
                shadowCompareFunc GL_LEQUAL
                shadowTextureMode GL_LUMINANCE
              }
              Use TexEnv_1
            }
            textureUnit 1 {
              GL_TEXTURE_2D ON
              Use Texture2D_5
              Use TexEnvCombine_4
            }
          }
          useDisplayList FALSE
          useVertexBufferObjects TRUE
          PrimitiveSets 1
          {
            DrawElementsUShort TRIANGLE_STRIP 4
            {
              1 2 0 3
            }
          }
          VertexArray Vec3Array 4
          {
            -4.16005 0.0100293 0
            4.15992 -0.0100046 0
            4.15992 -0.0100046 9.984
            -4.16005 0.0100293 9.984
          }
          NormalBinding PER_VERTEX
          NormalArray Vec3Array 4
          {
            -0.00240791 -0.999997 0
            -0.00240791 -0.999997 0
            -0.00240791 -0.999997 0
            -0.00240791 -0.999997 0
          }
          TexCoordArray 0 Vec2Array 4
          {
            0 0
            1 0
            1 1
            0 1
          }
          TexCoordArray 1 Vec2Array 4
          {
            0 0
            1 0
            1 1
            0 1
          }
        }
        Mode AXIAL_ROT
        Axis 0 0 1
        Normal 0 -1 0
        Positions {
          0 0 0
        }
      }
    }
  }
==========
是不是可以在每棵树的结构上再作优化?

该用户从未签到

发表于 2014-2-18 14:49:21 | 显示全部楼层
我看不出有什么可以对单棵树优化的地方
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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