OSG开发笔记(十三):OSG三维纹理映射(体渲染)

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/96285960

目录

前言

代码

总结步骤

步骤一:绘制几何类型

步骤二:加载图片添加纹理

步骤三:渲染设置,结点完成

入坑

入坑一:2D纹理贴图未成功

工程模板:对应版本号1.10.0


OSG三维开发专栏

OSG三维开发专栏

OSG开发笔记(一):OSG介绍、编译

OSG开发笔记(二):OSG帮助文档编译

OSG开发笔记(三):OSG使用osgQt嵌入Qt应用程序

OSG开发笔记(四):OSG不使用osgQt重写类嵌入Qt应用程序》:

OSG开发笔记(五):OSG场景理解与基础类概述

OSG开发笔记(六):OSG内存管理

OSG开发笔记(七):OSG复现OpenGL入门示例和OSG坐标系

OSG开发笔记(八):OSG模型文件存储与读取

OSG开发笔记(九):OSG模型的基本操作之添加/删除、显示/隐藏、开关节点开/》:

OSG开发笔记(十):OSG模型的变换之平移、旋转和缩放

OSG开发笔记(十一):OSG渲染状态与2D纹理映射

OSG开发笔记(十二):OSG基本几何图形、内置几何类型

OSG开发笔记(十三):OSG三维纹理映射(体渲染)

OSG开发笔记(十四):OSG交互

OSG开发笔记(十五):OSG光照

OSG开发笔记(十六):OSG视口、相机和视点

OSG开发笔记(十七):OSG中的相机移动

OSG开发笔记(十八):OSG鼠标拾取pick、拽托球体以及多光源

OSG开发笔记(十九):OSG文字显示

OSG开发笔记(二十):OSG使用HUD显示文字

OSG开发笔记(二十一):OSG使用HUD绘制图形以及纹理混合模式

OSG开发笔记(二十二):OSG场景背景

OSG开发笔记(二十三):Qt使用QOpenGLWidget渲染OSG地球仪

OSG开发笔记(二十四):OSG漫游之平移、转向和低抬头

OSG开发笔记(二十五):OSG漫游之CS移动、碰撞检测与跳跃

OSG开发笔记(二十六):OSG漫游之上下楼梯

《OSG开发笔记(二十七):OSG路径漫游之录制播放固定路径动画

《OSG开发笔记(二十八):OSG模型固定路径动画

  持续补充中…

 

    OSG开发笔记(十三):OSG三维纹理映射(体渲染)

 

前言

       原本目标是绘制一个地球体,现在有球体的2D立体图,需要贴上立方体。

 

代码

osg::ref_ptr OsgWidget::getEarthSphiere()
{
    osg::ref_ptr pGroop = new osg::Group;
#if 1
    {
        // 绘制球体
        // 步骤一:绘制几何类型(几何体)
        osg::ref_ptr pGeode = new osg::Geode;
        qreal radius = 1.0;
        pGeode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0, 0, 0), radius)));
#if 1
        // 步骤二:加载图片添加纹理
        osg::ref_ptr pImage;
        pImage = osgDB::readImageFile("D:/qtProject/osgDemo/osgDemo/modules/osgWidget/image/earth.bmp");
        if(!pImage->valid())
        {
            LOG_WARN(QString("Failed to load image: %1").arg(QString::fromStdString(pImage->getFileName())));
        }
//        qDebug() << __FILE__ << __LINE__ << osgDB::writeImageFile(*pImage.get(), "1.bmp");
        osg::ref_ptr pTexture2D = new osg::Texture2D;
//        pTexture2D->setDataVariance(osg::Object::DYNAMIC);
        pTexture2D->setImage(pImage.get());
        // 步骤三:渲染设置
        osg::ref_ptr pStateSet = pGeode->getOrCreateStateSet();
        pStateSet->setTextureAttribute(0, pTexture2D.get());
        pStateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::ON);
        pGeode->setStateSet(pStateSet);
#endif
        pGroop->addChild(pGeode);
    }
#endif
    return pGroop.get();
}

 

总结步骤

步骤一:绘制几何类型

        

 

步骤二:加载图片添加纹理

         

步骤三:渲染设置,结点完成

        OSG开发笔记(十三):OSG三维纹理映射(体渲染)_第1张图片

 

入坑

入坑一:2D纹理贴图未成功

原因:

        编译的时候没有带jpg插件,是编译osg库时可以带第三方库,笔者没有编译,同时笔者使用osg::Image::setFileName()直接设置bmp图片路径,发现保存图片为黑色。

解决方法:

        建议使用osgDB::readImageFile()获取osg::Image对象。

 

工程模板:对应版本号1.10.0

        对应版本号1.10.0


原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/96285960

你可能感兴趣的:(Qt开发专栏,OSG,OSG三维开发专栏)