osg自定义场景物体和设置状态集

2024-06-07 18:18

本文主要是介绍osg自定义场景物体和设置状态集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                      欢迎关注公众号可以查看更多完整文章

osg自定义场景物体,也就是模型,主要是通过设置顶点数据、顶点颜色数据、顶点索引集、法线数据集合等数据才能看到模型。

自定义模型需要使用Geometry来接收设置的数据,Geometry类提供了接收上述各种数据的接口。

如果想给状态集StateSet设置某些属性,可以通过接口setAttributeAndModes来设置:比如深度测试、模板测试、线宽等继承自StateAttribute的子类,也可以自定义状态属性。

#include <osg/Geode>
#include <osgViewer/Viewer>
#include <osg/Geometry>
#include <osg/LineWidth>
#include <osg/StateAttribute>using namespace osg;
using namespace osgViewer;#pragma comment(lib,"osgViewerd.lib")
#pragma comment(lib,"osgd.lib")ref_ptr<Geode> GetScene()
{//顶点数据ref_ptr<Vec3Array> va = new Vec3Array;va->push_back(Vec3(1.0, 0.0, 1.0));va->push_back(Vec3(-1.0, 0.0, 1.0));va->push_back(Vec3(-1.0, 0.0, -1.0));va->push_back(Vec3(1.0, 0.0, -1.0));//顶点颜色ref_ptr<Vec4Array> ca = new Vec4Array;ca->push_back(Vec4(1.0, 0.0, 0.0, 1.0));ca->push_back(Vec4(0.0, 1.0, 0.0, 1.0));ca->push_back(Vec4(0.0, 0.0, 1.0, 1.0));ca->push_back(Vec4(1.0, 1.0, 1.0, 1.0));ca->setBinding(Array::BIND_PER_VERTEX);//新的添加方式,原来通过Geometry绑定的接口已经废弃//法线ref_ptr<Vec3Array> na = new Vec3Array;na->push_back(Vec3(0.0, -1.0, 0.0));//数据组合ref_ptr<Geometry> geo = new Geometry;geo->setVertexArray(va);//添加顶点数据geo->setColorArray(ca);//添加颜色数据geo->setNormalArray(na);//添加法线数据geo->addPrimitiveSet(new DrawArrays(PrimitiveSet::LINE_LOOP,0,4));ref_ptr<Geode> node = new Geode;node->addDrawable(geo);//设置 线宽ref_ptr<LineWidth> lw = new LineWidth;lw->setWidth(10.f);geo->getOrCreateStateSet()->setAttributeAndModes(lw, StateAttribute::ON);return node;
}int main(int argc, char **argv)
{Viewer viewer;viewer.setSceneData(GetScene().get());viewer.realize();viewer.run();
}

本文地址:osg自定义场景物体和设置状态集_GreenArrowMan-CSDN博客-CSDN博客

这篇关于osg自定义场景物体和设置状态集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039933

相关文章

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、