OSG程序设计之Hello World 2.0

  现在为Hello World添加一些键盘响应事件。  //需要多添加两个库:osgGAd.lib、osgd.lib

代码如下:

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
void main()
{
    osgViewer::Viewer viewer;
    viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
    //添加状态事件
    viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
    //窗口大小变化事件
    viewer.addEventHandler(new osgViewer::WindowSizeHandler);
    //添加一些常用状态设置
    viewer.addEventHandler(new osgViewer::StatsHandler);

    viewer.realize();
    viewer.run();
}

  此时点击S键会显示帧速,点击W键会显示网格,点击F键可以在最大化和最小化之间切换,点击L键会显示灯光。  (其中字母对应小写按键)

效果图:

PS:

  如果发现程序不能响应键盘输入,不要担心,程序没有问题,可能是输入法的问题。

时间: 2024-08-28 19:50:38

OSG程序设计之Hello World 2.0的相关文章

OSG程序设计之Hello World 4.0

代码如下: //需要添加两个库:osgUtild.lib.osgTextd.lib #include <osgDB/ReadFile> #include <osgUtil/Optimizer> #include <osg/CoordinateSystemNode> #include <osg/Switch> #include <osgText/Text> #include <osgViewer/Viewer> #include <

OSG程序设计之osg::NodeVisitor

本文所有内容来自<OpenSceneGraph三维渲染引擎设计与实践>一书. 本文主要讨论的是OSG中节点的访问. 对于节点的访问是从节点接收一个访问器开始的,用户执行某个节点的accept()函数,将一个具体的访问器对象传递给节点. 第二步,节点反过来执行访问器的apply()函数,并将自身传入访问器. 这两步的实现过程可以用一行十分简单的函数代码来表达: void Node::accept(NodeVisitor& nv) { nv.apply(*this); } 下面是一个具体的

OSG程序设计之Hello World

对于从未接触过OSG的我来说,首先需要一个入门教程.在OSG论坛逛了半天,再加上google,最终决定使用<OSG程序设计>这本书. 下面就贴出书中的第一个例子:Hello World. 使用vs2010新建一个win32控制台应用程序,然后配置一下osg环境,接下来就可以上代码了. //库文件:osgDBd.lib.osgViewerd.lib #include <osgDB/ReadFile> #include <osgViewer/Viewer> void mai

OSG程序设计之更新回调

更新回调(Update Callback)涉及到一个类:osg::NodeCallback.这个类重载了函数调用操作符.当回调动作发生时,将会执行这一操作符的内容. 如果节点绑定了更新回调函数,那么在每一帧系统遍历到此节点时,回调函数都会被调用. 下面给出一个例子: #include <osg/io_utils> #include <osg/PositionAttitudeTransform> #include <osgDB/ReadFile> #include <

OSG程序设计之osg::Group

以下是一个简单的模型读取程序: #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Node> void main() { osgViewer::Viewer viewer; osg::Group *root = new osg::Group(); root->addChild(osgDB::readNodeFile("glider.osg")); root-&

面向对象程序设计编程题完善1.0

题目如下: 编程题(请使用C语言或者C++完成以下题目):(基础5分) 中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天.我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言? 汉字真的不能编程吗?最近文言文编程火了一把,吾有一數.曰三.名之曰「甲」.这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩. 今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他. 编程要求 编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果. 变量定义:整数

OSG漫游:实现按键控制的操作器

OSG提供了几种manipulator(操作器),已经能胜任很多场合了.但玩过射击类游戏的都比较熟悉使用按键的方式控制人物角色的移动,自己也想来实现一个,于是参考了OSG程序设计 一书,进行实现. 功能: W或者↑箭头:前进 S或者↓箭头:后退 A或者←箭头:向左 D或者→箭头:向右 Q:左旋转 E:右旋转 鼠标左键拖动:左右视角 鼠标右键拖动:上下视角 鼠标中键:放大或者缩小 +:加速移动 -:减速移动 关键点 1.视口矩阵的运算方式: osg::Matrixd CustomManipulat

OSG世界坐标转屏幕坐标(转载)

OSG世界坐标转屏幕坐标 #define M(row,col) m[col * 4 + row] void Transform_Point(double out[4], const double m[16], const double in[4]){    out[0] = M(0, 0) * in[0] + M(0, 1) * in[1] + M(0, 2) * in[2] + M(0, 3) * in[3];    out[1] = M(1, 0) * in[0] + M(1, 1) * i

OSG 自定义场景漫游示例

一下代码可以简单实现osg中视角的简单自由漫游.并且可以进行简单的碰撞检测 mian.cpp 1 #include <osgViewer/Viewer> 2 3 #include <osg/Node> 4 #include <osg/Geode> 5 #include <osg/Group> 6 7 #include <osgDB/ReadFile> 8 #include <osgDB/WriteFile> 9 10 #include