测试平台
(1)Fedora19 x86
  
[cc@localhost ~]$ lspci | grep VGA
:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev )
:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 645M] (rev a1)
(2)Python 2.7
(3)Osg 3.2.0
(4)cmake 2.8
(5)gcc 4.8.2
#include <Python.h>
#include <iostream>
#include <string>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>

PyObject * pModule;
double CallPythonTest()
{
PyObject * pFunc=PyObject_GetAttrString(pModule, "test");
PyObject * value = PyObject_CallFunction(pFunc,"ff", -15.0f, -20.0f); //通过函数对象执行函数
double a = PyFloat_AsDouble(value);
std::cout << a << std::endl;
return a;
} class MyEventHandler : public osgGA::GUIEventHandler
{
public:
MyEventHandler()
{
} virtual bool handle(const osgGA::GUIEventAdapter & ea, osgGA::GUIActionAdapter & aa)
{
osgViewer::Viewer * viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
osg::Camera * camera = viewer->getCamera();
switch (ea.getEventType())
{
case osgGA::GUIEventAdapter::FRAME:
{
double a = CallPythonTest();
camera->setViewMatrixAsLookAt(osg::Vec3(0.0, a, ), osg::Vec3(0.0, 0.0, 0.0), osg::Vec3(0.0, 0.0, 1.0));
break;
}
default:
break;
} return false;
}
}; int main() {
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("import random");
PyRun_SimpleString("sys.path.append('../PythonTest/')");
pModule = PyImport_ImportModule("Test");
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->getCamera()->setViewMatrixAsLookAt(osg::Vec3(0.0, -20.0, 0.0), osg::Vec3(0.0, 0.0, 0.0), osg::Vec3(0.0,0.0, 1.0));
viewer->setSceneData(osgDB::readNodeFile("cow.osg"));
viewer->addEventHandler(new MyEventHandler);
viewer->setUpViewInWindow(, , , );
while (!viewer->done())
{
viewer->frame();
}
Py_Finalize();
return ;
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
def test(a,b):
return random.uniform(a, b)


project(PythonTest)
cmake_minimum_required(VERSION 2.8)
set(PythonSRC Person.py)
set(CMAKE_BUILD_TYPE Debug)
aux_source_directory(. SRC_LIST)
find_package(PythonLibs REQUIRED)
find_package(OpenSceneGraph 3.2. REQUIRED osg osgDB osgViewer osgGA)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${SRC_LIST} ${PythonSRC})
target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES})

 

测试结果:

  只是验证下效果,把改变位置的调用放在了每帧中,帧速太快。导致如图所示。

OSG+Python的更多相关文章

  1. 基于osg的python三维程序开发(二)------向量

    上一篇文章展示了如何简单创建一个osg python 程序, 本篇展示了了一些基础数据结构的使用: from pyosg import * vec = osg.Vec3Array() #push ba ...

  2. 基于osg的python三维程序开发(三)------几何形体及纹理

    def createScene(): geode = osg.Geode() pointsGeom = osg.Geometry() vertices = osg.Vec3Array() vertic ...

  3. 基于osg的python三维程序开发(一)

    背景: osg是一款开源的三维引擎,在过去多年的发展中积累了大量的用户,该引擎基于场景树的管理,使用方法简单.但是对长期使用python作为开发工具的朋友来说, 有一定门槛. 下面的小程序,演示了如何 ...

  4. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...

  5. Python学习笔记2—内置函数

    函数的使用 官方文档:https://docs.python.org/2/library/functions.html

  6. osg项目经验1<MFC+OSG中模型点选效果>

    点选主要是重载osg的GUIEventHandler, class CPickHandler : public osgGA::GUIEventHandler{ //自定义回调函数名:CPickHand ...

  7. 使用VTK与Python实现机械臂三维模型可视化

    三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...

  8. 转:关于 OGRE 与 OSG 的简单比较

    1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(manual).王锐老师等翻译的<Ope ...

  9. [OSG]OSG的相关扩展

    参考:osg官网 http://www.osgchina.org/index.php?view=article&id=176 http://trac.openscenegraph.org/pr ...

随机推荐

  1. C#带参数打开网页及url获取

    1.带参数打开网页 Response.Redirect("form2.aspx?id=url1&name=ok"); 其中?后面为参数. 2.获取url 命令 结果 Req ...

  2. linux kernel 编译

    lin

  3. AxonVR:体验有触觉有温度的VR世界

    提到VR,通常指的是 Oculus Rift 及 HTC Vive的头盔:它们以视觉及听觉使你感到身处虚拟世界.头盔成功的在视觉及听觉感官上蒙骗了你,但我们体验现实的感官不仅于此.绝大多数的VR产品忽 ...

  4. Centos7下建立rubymine快捷方式到侧栏或桌面

    gnome桌面的所有菜单项都存储如下位置: /usr/share/applications/ 新建一个菜单项,直接在该目录下新建一个后缀名为.desktop的文件即可. $ vi /usr/share ...

  5. 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本

    当你想下载Linux.JDK.Tomcat.eclipse时,你是下载32位版本还是64位版本?64位版本有两种,应该选哪一个? 当你看到这些内容:x86.x64.x86-32.x86-64.ia64 ...

  6. AFURLRequestSerialization

    NSString * AFPercentEscapedStringFromString(NSString *string)   //去除非法字符并且对特殊字符进行编码.  //对字符串进行百分比编码 ...

  7. 提示找不到xml配置文件

    ClassPathXmlApplicationContext("applicationContext.xml")默认文件夹是resouerces,所以要把xml文件放在这个下面.

  8. CSU 1803 2016

    湖南省第十二届大学生计算机程序设计竞赛$A$题 枚举. 处理一下$\% 2016$之后的数分别有几个,然后$2016*2016$枚举一下统计方案数就可以了. #pragma comment(linke ...

  9. python流程控制:while循环

    python编程中whihe语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务. while循环语句格式: while <判断条件>: 执行语句 count ...

  10. Haskell Json数据处理

    json的基本类型为——string, numbers, Booleans以及null,定义json类型如下 -- file: Json.hs module Json where data JValu ...