美国海军(NPS)的OSG教程——示例代码一

//OSG 3.2版本
	osg::Group *root = new osg::Group();
	osg::Geode *pyramidGeode = new osg::Geode();
	deprecated_osg::Geometry *pyramidGeometry = new deprecated_osg::Geometry();			//注意,用deprecated_osg,某些功能以后可能去掉

	pyramidGeode->addDrawable( pyramidGeometry );
	root->addChild( pyramidGeode );

	//定义点
	osg::Vec3Array *pyramidVertices = new osg::Vec3Array();
	pyramidVertices->push_back( osg::Vec3(0,0,0) );			//左前
	pyramidVertices->push_back( osg::Vec3(10,0,0) );		//右前
	pyramidVertices->push_back( osg::Vec3(10,10,0) );		//右后
	pyramidVertices->push_back( osg::Vec3(0,10,0) );		//左后
	pyramidVertices->push_back( osg::Vec3(5,5,10) );		//塔尖

	pyramidGeometry->setVertexArray( pyramidVertices );

	//定义面
	osg::DrawElementsUInt *pyramidBase = new osg::DrawElementsUInt( osg::PrimitiveSet::QUADS, 0 );
	pyramidBase->push_back(3);
	pyramidBase->push_back(2);
	pyramidBase->push_back(1);
	pyramidBase->push_back(0);
	pyramidGeometry->addPrimitiveSet( pyramidBase );

	osg::DrawElementsUInt *pyramidFaceOne = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceOne->push_back(0);
	pyramidFaceOne->push_back(1);
	pyramidFaceOne->push_back(4);
	pyramidGeometry->addPrimitiveSet( pyramidFaceOne );

	osg::DrawElementsUInt *pyramidFaceTwo = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceTwo->push_back(1);
	pyramidFaceTwo->push_back(2);
	pyramidFaceTwo->push_back(4);
	pyramidGeometry->addPrimitiveSet( pyramidFaceTwo );

	osg::DrawElementsUInt *pyramidFaceThree = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceThree->push_back(2);
	pyramidFaceThree->push_back(3);
	pyramidFaceThree->push_back(4);
	pyramidGeometry->addPrimitiveSet( pyramidFaceThree );

	osg::DrawElementsUInt *pyramidFaceFour = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceFour->push_back(3);
	pyramidFaceFour->push_back(0);
	pyramidFaceFour->push_back(4);
	pyramidGeometry->addPrimitiveSet( pyramidFaceFour );

	//定义颜色
	osg::Vec4Array *colors = new osg::Vec4Array;
	colors->push_back( osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) );		//红色
	colors->push_back( osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) );		//绿色
	colors->push_back( osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) );		//蓝色
	colors->push_back( osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) );		//白色

	osg::TemplateIndexArray< unsigned int, osg::Array::UIntArrayType, 4, 4 > *colorIndexArray;
	colorIndexArray = new osg::TemplateIndexArray< unsigned int, osg::Array::UIntArrayType, 4, 4 >;
	colorIndexArray->push_back(0);
	colorIndexArray->push_back(1);
	colorIndexArray->push_back(2);
	colorIndexArray->push_back(3);
	colorIndexArray->push_back(0);

	pyramidGeometry->setColorArray( colors );
	pyramidGeometry->setColorIndices( colorIndexArray );
	pyramidGeometry->setColorBinding( deprecated_osg::Geometry::BIND_PER_VERTEX );

	osg::Vec2Array *texcoords = new osg::Vec2Array(5);
	(*texcoords)[0].set(0.00f,0.0f);
	(*texcoords)[1].set(0.25f,0.0f);
	(*texcoords)[2].set(0.50f,0.0f);
	(*texcoords)[3].set(0.75f,0.0f);
	(*texcoords)[4].set(0.50f,1.0f);
	pyramidGeometry->setTexCoordArray(0, texcoords);

	//必须加
	osgUtil::Optimizer optimizer ;
	optimizer.optimize(root) ;	

	osgViewer::Viewer viewer;
	viewer.setSceneData(root);
	//初始化并创建窗口
	//viewer.realize();
	viewer.run();

时间: 2024-08-05 11:55:41

美国海军(NPS)的OSG教程——示例代码一的相关文章

iOS App集成Apple Pay教程(附示例代码)

苹果在本周一发布了iOS 8.1版本,并正式开放了Apple Pay支付系统.Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持.即便这项科技并不是彻底的突破性进展,但它足以推动许多公司和零售商来支持这种支付方式,并成为苹果又一项成功的投资. Apple Pay还给开发者带来了处理支付的新渠道,用户将期望在应用中使用它,因为它将验证和交易极端简化,仅需手指轻轻一触即可完成,如果应用里面有涉及到交易,开发者很有必要集成Apple Pay.那么如何将Apple Pa

好程序员教程之配置H5的滚动条样式示例代码

配置H5的滚动条样式示例代码有不少的小伙伴在网上寻找,本篇文章好程序员小编和大家分享一下配置H5的滚动条样式示例代码,希望对HTML5开发感兴趣的小伙伴有所帮助,下面我们一块来看一下吧:/?滚动条的滑轨背景颜色?/::-webkit-scrollbar-track {background-color: #b46868;}/?滑块颜色?/::-webkit-scrollbar-thumb {background-color: rgba(0, 0, 0, 0.2);}/?滑轨两头的监听按钮颜色?/:

关于31天App教程示例中一些因SDK版本而出现的问题(转)

由于国外那个知名的31天案例教程比较老,所用官方API是2008年时的2.X,所以在现在的Xcode3-4之后或多或少都有编译警告和错误信息.必须做些适应iOS版本的代码更改才能顺利编译通过. Day1:Minutes to Midnight NSDate* now = [NSDate date];int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];int min = 59 - [[now dateW

微信Android SDK示例代码及运行方法

最近在研究微信SDK,无奈网上好使的教程太少,对于程序员来说最好的东西,一个是微信的开发文档,一个是微信SDK的范例代码.无奈文档小白很难看懂,范例代码又没有详细的解释,导致我折腾了好多天,现在有点眉目了,先记下来. 1.申请应用AppKey 微信的SDK要求应用的包名.签名的MD5.AppID严格对应,所以没有申请的应用是肯定无法使用的.申请了的应用如果这三个对不上,是无法使用的. ·包名,是应用建立时候的名称,你可以在AndroidManifest.xml文件的package项中找到 ·签名

微信公众平台开发(二) 微信公众平台示例代码分析

原文地址:http://www.cnblogs.com/mchina/archive/2013/06/07/3120592.html 一.摘要 微信公众平台提供了一个简单的php示例代码,在做进一步开发之前,我们有必要将其详细了解一下. 二.获取代码 微信官网:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip 三.分析代码 完整代码如下: <?php /** * wechat php test */ //define your

Django学习笔记 官网教程纠正 代码

原文: Django学习笔记 官网教程纠正 代码 Django学习笔记 4.模板初学中,照书例django book 出现以下异常 raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) ImportError: Settings cannot be imported, because environmen

JDBC简单示例代码

本文章教程中将演示如何创建一个简单的JDBC应用程序的示例. 这将显示如何打开数据库连接,执行SQL查询并显示结果. 这个示例代码中涉及所有步骤,一些步骤将在本教程的后续章节中进行说明. 创建JDBC应用程序 构建JDBC应用程序涉及以下六个步骤 - 导入包:需要包含包含数据库编程所需的JDBC类的包. 大多数情况下,使用import java.sql.*就足够了. 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道. 打开一个连接:需要使用DriverManager.ge

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

java学习教程之代码块

学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这个例子: public class Test{ public static void main(String args[]){ { //此处就是普通代码块,普通代码块中的代码按顺序执行 System.out.println("hello"); } } } 2.构造代码块 public cl