
osg
ZENGQQQQQ
unity3d计算机图形学OpenGLosg
展开
-
学习osg渲染内核笔记
先抛出问题opengl的机制是状态机,osg是对opengl的面相对象的封装,所以场景树的渲染最终还是要用状态机来实现。osg的场景管理是用场景树来实现的,怎么转换到状态机呢?对于透明物体、hud或者天空渲染等,需要对场景对象进行排序,这个如何实现?默认的状态存在冗余,如何对opengl的状态进行优化?osg渲染内核是如何解决这些问题的?用状态树对状态进行管理用渲染树对几何体进行管理参考的原创 2016-02-16 11:27:07 · 1009 阅读 · 0 评论 -
osg的材质共享问题
在给drawable赋予材质的时候,会影响到相同材质的其他网格。可能是osg对相同材质的网格做了优化,将相同材质的网格放在一起渲染。非drawable的对象就不会有这个问题.原创 2016-02-16 09:49:47 · 601 阅读 · 0 评论 -
为什么坐标变换的顺序必须是: 缩放->旋转->平移
【Math】世界坐标变换要先缩放、后旋转、再平移的原因一个三维场景中的各个模型一般需要各自建模,再通过坐标变换放到一个统一的世界空间的指定位置上。 这个过程在 3D 图形学中称作“世界变换” 。 世界变换有三种,平移、旋转和缩放 (实际还有不常用的扭曲和镜像,它们不是affine变换)。 这三种变换按各种顺序执行,结果是不同的。 可是实际的应用中一般按照 缩放 -> 旋转 -> 平移的顺序进行。转载 2016-01-22 14:36:03 · 21211 阅读 · 0 评论 -
osg 实现动态跟新纹理数据
主要是用这个函数来更新image的数据 osg::Image* img0 = osgDB::readImageFile("C:/zq/workplace/osg/testAll/TestOsg/TestOsg/tmp/glassResource/cube.bmp"); osg::Image* img1 = osgDB::readImageFile("C:/zq/workplace/os原创 2015-12-04 16:22:14 · 3325 阅读 · 0 评论 -
osg 屏幕坐标和世界坐标转换
//屏幕-〉世界:osgUtil::SceneView::projectWindowIntoObject//或者自己运算Matrix VPW = camera-〉getViewMatrix() * camera-〉getProjectionMatrix() * camera-〉getViewport()-〉原创 2016-01-22 16:19:17 · 8303 阅读 · 1 评论 -
行向量与列向量
* 行向量左乘矩阵* 列向量右乘矩阵原创 2016-01-22 14:20:38 · 5612 阅读 · 0 评论 -
openSceneGraphic 删除多个子节点
openSceneGraphic 删除多个子节点时,应当先储存要删除子节点的序号,然后做降序排列,然后删除。#include <vector>#include <algorithm>//自定义排序函数 bool SortBy(const int v1, const int v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致 { return v1> v2;//降原创 2016-01-18 21:30:25 · 445 阅读 · 0 评论 -
OpenSceneGraphic 着色器中数组的应用
osg::ref_ptr<osg::FloatArray> fa = new osg::FloatArray(); fa->push_back(1.0f); fa->push_back(0.0f); fa->push_back(0.0f); fa->push_back(1.0f); //unf->setArray(fa); ss->addUniform原创 2016-01-17 21:10:40 · 721 阅读 · 0 评论 -
osgOcean与osgEarth融合技术细节
osgOcean与osgEarth融合的主要技术问题有2点:1.osgOcean是平面的海洋,所以不支持osgEarth球面。2.osgEarth渲染最终依靠shader完成,并且自带一套着色器合成框架ShaderCompliction;这与osgOcean的着色器系统不兼容。待续...原创 2013-04-15 10:41:07 · 6560 阅读 · 3 评论 -
osg 深拷贝、浅拷贝
osg读取obj文件,drawable的材质是共享的原创 2016-02-20 11:44:54 · 1846 阅读 · 0 评论