OSG+Python
测试平台
(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的更多相关文章
- 基于osg的python三维程序开发(二)------向量
上一篇文章展示了如何简单创建一个osg python 程序, 本篇展示了了一些基础数据结构的使用: from pyosg import * vec = osg.Vec3Array() #push ba ...
- 基于osg的python三维程序开发(三)------几何形体及纹理
def createScene(): geode = osg.Geode() pointsGeom = osg.Geometry() vertices = osg.Vec3Array() vertic ...
- 基于osg的python三维程序开发(一)
背景: osg是一款开源的三维引擎,在过去多年的发展中积累了大量的用户,该引擎基于场景树的管理,使用方法简单.但是对长期使用python作为开发工具的朋友来说, 有一定门槛. 下面的小程序,演示了如何 ...
- [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述
1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...
- Python学习笔记2—内置函数
函数的使用 官方文档:https://docs.python.org/2/library/functions.html
- osg项目经验1<MFC+OSG中模型点选效果>
点选主要是重载osg的GUIEventHandler, class CPickHandler : public osgGA::GUIEventHandler{ //自定义回调函数名:CPickHand ...
- 使用VTK与Python实现机械臂三维模型可视化
三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...
- 转:关于 OGRE 与 OSG 的简单比较
1 前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(manual).王锐老师等翻译的<Ope ...
- [OSG]OSG的相关扩展
参考:osg官网 http://www.osgchina.org/index.php?view=article&id=176 http://trac.openscenegraph.org/pr ...
随机推荐
- FZU 2089 数字游戏
Problem 2089 数字游戏 Problem Description 现在,给你2个整形数字A和B.你的任务就是计算出A+B的结果C后,统计C中数字5出现的次数. Input 输入数据第一行 ...
- hdu1116回溯N皇后问题
题目连接 经过思考,不难发现:恰好N个皇后放在不同行不同列,那么是不是可以转换成N个皇后所在行分别确定(一人一行)的情况下对她们的所在列的枚举. 也就是列的全排列生成问题,我们用c[x]表示x行皇后的 ...
- layer ifram 弹出框
父层 <div class="col-xs-4 text-left" style="padding-left: 50px;"><button ...
- CNN-梯度下降
一.梯度检测: 对于函数而言通常有两种计算梯度的方式: 1.数值梯度 (numberical gradient) 2.解析梯度 (analytic gradient ) 数值梯度计算通常为: 更为常见 ...
- java中|与||有什么区别?那么&与&&呢
||当左边为真时,就不运行右边的表达式了|当左边为真,还是会运算右边的表达式&&当左边为假时,就不会运算右边的表达式&当左边为假时,还是会运算右边的表达式
- 用纯css改变select的下拉菜单
select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appe ...
- 用VB把xls转换为xlsx
Sub xls批量转换成xlsx()Application.ScreenUpdating = FalseMsgBox "现在开始转换,请稍候!"mypath = ThisWorkb ...
- SDK平台三态按钮的实现
Windows平台提供了丰富的控件,但是在使用中我们不会使用它提供的默认风格,有时候需要对控件进行改写,让它展现出更友好的一面,这次主要是说明三态按钮的实现. 三态按钮指的是按钮在鼠标移到按钮上时显示 ...
- Java--最大子序列和实现
package com.dongbin.test; /** * 最大子序列和 --分治法 * * @author dongbin * */ public class MaxSubListSum { / ...
- 对jquery新增加的class绑定事件
当页面加载时,就会注册所有的事件,后面通过jquery新增的内容(<div class="item"></div>),再对新增的添加事件$(".i ...