基于osg的python三维程序开发(六)------纹理

以简单数字地球为例, 演示posg 中纹理的用法。

首先需要读取图像文件作为纹理

img = osgDB.readImageFile(filename)

然后,声明一个2D的纹理对象

texture = osg.Texture2D()
  texture.setImage(img)

创建一个叶子节点

 geode = osg.Geode()
 sphere = osg.Sphere((0,0,0), osg.WGS_84_RADIUS_POLAR)
 drawb = osg.ShapeDrawable(sphere)
 geode.addDrawable(drawb)

将纹理设置到叶子节点的属性

geode.getOrCreateStateSet().setTextureAttributeAndModes( 0, texture)

完整代码如下:


import math
from pyosg import *
import numpy as n

def
createEarth(filename): texture = osg.Texture2D() img = osgDB.readImageFile(filename) texture.setImage(img) geode = osg.Geode() sphere = osg.Sphere((0,0,0), osg.WGS_84_RADIUS_POLAR) drawb = osg.ShapeDrawable(sphere) geode.addDrawable(drawb) geode.getOrCreateStateSet().setTextureAttributeAndModes( 0, texture) return geode def main(): viewer = osgViewer.Viewer() viewer.setUpViewInWindow(600, 100, 800, 600) root = osg.Group() root.addChild(createEarth("./land_shallow_topo_2048.jpg") ) viewer.setSceneData(root) return viewer.run() if __name__ == '__main__': main()

 效果

posted @ 2020-04-18 20:46  小阳明  阅读(771)  评论(0)    收藏  举报