OSG+Python

测试平台
(1)Fedora19 x86
  
[cc@localhost ~]$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
01: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, 0), 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(0, 0, 800, 600);
    while (!viewer->done())
    {
        viewer->frame();
    }
    Py_Finalize();
    return 0;
}


#!/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.0 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})
 
  

 

 

 测试结果:

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

转载于:https://www.cnblogs.com/nmgxbc/p/3418760.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值