osg 需要安装osg和opengll吗

将OpenGL中的功能与OSG对应功能进行列举:
OpenGL function
OpenSceneGraph&implementation
glClear( GLbitfield mask )
osg::Camera::setClearMask(GLbitfield mask)
osg::GraphicsContext::setClearMask(GLbitfield mask)
osg::ClearNode::setClearMask(GLbitfield mask)
osg::RenderStage::setClearMask(GLbitfield mask)
glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
osg::Camera::setClearColor(const osg::Vec4& color)
osgUtil::SceneView::setClearColor(const osg::Vec4& color)
glClearDepth
osg::Camera::setClearDepth(double depth)
glClearStencil
osg::Camera::setClearStencil(int stencil)
State Attributes
glAlphaFunc( GLenum func, GLclampf ref )
osg::AlphaFunc(ComparisonFunction&func, float ref)
glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
osg::BlendColor(const osg::Vec4& constantColor)
glBlendFunc( GLenum sfactor, GLenum dfactor)
osg::BlendFunc(GLenum source, GLenum destination, GLenum source_alpha, GLenum destination_alpha)
glBlendEquation(GLenum mode)
osg::BlendEquation(Equation equation)
glClampColor(GLenum target, GLenum mode)
osg::ClampColor(GLenum vertexMode, GLenum fragmentMode, GLenum readMode);
glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha )
osg::ColorMask(bool red, bool green, bool blue, bool alpha);
glMatrixMode( GL_COLOR )
osg::ColorMatrix()
glCullFace(GLenum mode)
osg::CullFace(Mode mode)
glDepthFunc( GLenum func)
glDepthRange( GLclampd zNear, GLclampd zFar )
glDepthMask( GLboolean flag )
osg::Depth(Function func, double zNear, double zFar, bool writeMask)
glFog*( GLenum pname, GLfloat param )
glFog*v(GLenum pname, const GLfloat *params )
osg::Fog();
glFogf( GL_FOG_MODE, GLfloat param )
osg::Fog::setMode( Mode mode )
glFogf( GL_FOG_DENSITY, GLfloat param )
osg::Fog::setDensity( float density )
glFogf( GL_FOG_START, GLfloat param )
osg::Fog::setStart( float start )
glFogf( GL_FOG_END, GLfloat param )
osg::Fog::setEnd( float end )
glFogf( GL_FOG_INDEX, GLfloat param )
Color indexing not supported
glFogfv(GL_FOG_COLOR, const GLfloat *params )
osg::Fog::setColor( const Vec4 &color )
glFogi(GL_FOG_COORDINATE_SOURCE, GLenum mode)
osg::Fog::setFogCoordinateSource(GLint source)
glFrontFace( GLenum mode )
osg::FrontFace(Mode face)
glHint( GLenum target, GLenum mode )
osg::Hint(GLenum target, GLenum mode)
glLight*(GLenum light, GLenum pname, GLfloat param )
glLight*v( GLenum light, GLenum pname, const GLfloat *params)
osg::Light(unsigned int lightnum)
glLightfv( GLenum light, GL_AMBIENT, const GLfloat *params)
osg::Light::setAmbient( const Vec4& ambient )
glLightfv( GLenum light, GL_DIFFUSE, const GLfloat *params)
osg::Light::setDiffuse( const Vec4& diffuse )
glLightfv( GLenum light, GL_SPECULAR, const GLfloat *params)
osg::Light::setSpecular( const Vec4& specular )
glLightfv( GLenum light, GL_POSITION, const GLfloat *params)
osg::Light::setPosition( const Vec4& position )
glLightfv( GLenum light, GL_SPOT_DIRECTION, const GLfloat *params)
osg::Light::setDirection( const Vec3& direction )
glLightf(GLenum light, GL_CONSTANT_ATTENUATION, GLfloat param )
osg::Light::setConstantAttenuation( float constant_attenuation )
glLightf(GLenum light, GL_LINEAR_ATTENUATION, GLfloat param )
osg::Light::setLinearAttenuation ( float linear_attenuation )
glLightf(GLenum light, GL_QUADRATIC_ATTENUATION, GLfloat param )
osg::Light::setQuadraticAttenuation ( float quadratic_attenuation )
glLightf(GLenum light, GL_SPOT_EXPONENT, GLfloat param )
osg::Light::setSpotExponent( float spot_exponent )
glLightf(GLenum light, GL_SPOT_CUTOFF, GLfloat param )
osg::Light::setSpotCutoff( float spot_cutoff )
glLightModel*( GLenum pname, GLfloat param )
glLightModel*v( GLenum pname, const GLfloat *params )
osg::LightModel()
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, const GLfloat *params )
osg::LightModel::setAmbientIntensity(const osg::Vec4& ambient)
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GLint param)
osg::LightModel::setColorControl(ColorControl&cc)
glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GLint param )
osg::LightModel::setLocalViewer(bool localViewer)
glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GLint param )
osg::LightModel::setTwoSided(bool twoSided)
glLineStipple( GLint factor, GLushort pattern )
osg::LineStipple(GLint factor, GLushort pattern)
glLineWidth( GLfloat width )
osg::LineWidth(float width=1.0f)
glLogicOp( GLenum opcode )
osg::LogicOp(Opcode opcode)
glMaterialf(GLenum face, GLenum pname, GLfloat param )
osg::Material()
osg::Multisample()
osg::PolygonMode(Face face,Mode mode)
osg::PolygonOffset(float factor, float units)
osg::PolygonStipple(const GLubyte* mask)
osg::Scissor(int x,int y,int width,int height)
osg::ShadeModel(Mode mode)
glStencilFunc( GLenum func, GLint ref, GLuint mask )
osg::Stencil::setFunction(Function func,int ref,unsigned int mask)
glStencilMask( GLuint mask )
osg::Stencil::setOperation(Operation sfail, Operation zfail, Operation zpass)
glStencilOp( GLenum fail, GLenum zfail, GLenum zpass )
osg::StencilTwoSided()
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ...)
glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, ...)
osg::TexEnv(Mode mode)
glTexEnvi( GL_TEXTURE_ENV, ...)
Texture combiners extension
osg::TexEnvCombine()
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, ...)
osg::TexEnvFilter(float lodBias)
glTexGen_( GLenum coord, GLenum pname, GLdouble param )
osg::TexGen()
osg::TexGenNode()
glMatrixMode( GL_TEXTURE )
osg::TexMat(const Matrix& matrix)
glTexImage1D( GL_TEXTURE_1D, ...)
osg::Texture1D()
glTexImage2D( GL_TEXTURE_2D, ...)
osg::Texture2D(Image* image)
glTexImage3D( GL_TEXTURE_2D_ARRAY_EXT, ...)
osg::Texture2DArray()
glTexImage3D( GL_TEXTURE_3D, ...)
osg::Texture3D()
glTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_X, ...)
glTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_X, ...)
glTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_Y, ...)
glTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, ...)
glTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_Z, ...)
glTexImage2D( GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, ...)
osg::TextureCubeMap()
glTexImage2D( GL_TEXTURE_RECTANGLE, ...)
osg::TextureRectangle(Image* image)
glViewport( GLint x, GLint y, GLsizei width, GLsizei height )
osg::Viewport(value_type x,value_type y,value_type width,value_type height)
本文已收录于以下专栏:
相关文章推荐
这是一个期末大作业,很low的大作业。按老师的要求要实现纹理,光照,交互等,还好可以用OSG,用OpenGL的话不知道要写多少代码。
这个代码主要就是实现了球体的贴图,添加了一个光照,还有通过键盘来...
将OpenGL中的功能与OSG对应功能进行列举:
OpenGL function
OpenSceneGraph implementation
在一个场景中添加光源主要bao
使用VS2013,编译OSG
当我们遇到一个新的东西,不要害怕,要学会去慢慢接受新事物,新知识。其实在现实当中要学习,我们没接触过的事物还有很多,随着社会的发展,我们不得不加快步伐,在没接触前还不如提前主动去接触,主动去学习新鲜事...
在场景左下角显示一个表示当前场景坐标轴向,它只是对相机旋转有反应,对场景缩放和移动不起效果,采取方法:将一个坐标轴模型节点放在一个Projection下或放在Matrixtransform下设置为绝对...
他的最新文章
讲师:董晓杰
讲师:姚远
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)  日,在知道这本书上市了一个月之后,终于有一个机会在京东上买下了这边书《OpenGL编程指南(原书第八版)》,接下来的时间,会用OSG的思路,一个个的实现书中的例子程序,并且逐步学习OSG中和OpenGL千丝万缕的联系。
  老实说,对于一个没有任何图形学基础的人,是看不懂这本书的第一章的,或者没法完全看懂第一章的。如果您是一个没有任何图形学基础的人,您也不应该放弃对于OpenGL的学习热诚,开始或许困难,但是迟早它会变成一个HelloWorld,只要我们不断的努力。在接下来的时间里,会和大家共同学习这本书,博主并不是OpenGL的专家,也是和大家一样,一名虔诚的学习者。
  1.1 什么是OpenGL
  这个读者可以看书,或者上网查询相关资料,博主不再赘述。
  1.2初识OpenGL程序
  博主用OSG的方式,重写了这段程序:
1 #include&osgViewer/Viewer&
3 //OpenGL编程指南(原书第八版) 例1.1
4 osg::ref_ptr&osg::Geometry& getGeometry_1_1()
//声明一个Geometry
osg::ref_ptr&osg::Geometry& geometry = new osg::Geometry();
//声明并初始化顶点数组
osg::ref_ptr&osg::Vec3Array& vertices = new osg::Vec3Array();
vertices-&push_back(osg::Vec3(-0.90,-0.90,0.0));//第一个三角形
vertices-&push_back(osg::Vec3( 0.85,-0.90,0.0));
vertices-&push_back(osg::Vec3(-0.90, 0.85,0.0));
vertices-&push_back(osg::Vec3( 0.90,-0.85,0.0));//第二个三角形
vertices-&push_back(osg::Vec3( 0.90, 0.90,0.0));
vertices-&push_back(osg::Vec3(-0.85, 0.90,0.0));
//设置Geometry顶点数组
geometry-&setVertexArray(vertices);
//添加图元绘制
geometry-&addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::Mode::TRIANGLES, 0, vertices-&size()));
//OpenSceneGraph的Geometry对象使用GLSL方法
osg::ref_ptr&osg::Program& program = new osg::Program();
program-&addShader(osg::Shader::readShaderFile(osg::Shader::Type::VERTEX, "D:\\vert.glsl"));
program-&addShader(osg::Shader::readShaderFile(osg::Shader::Type::FRAGMENT, "D:\\frag.glsl"));
geometry-&getOrCreateStateSet()-&setAttributeAndModes(program, osg::StateAttribute::Values::ON | osg::StateAttribute::Values::PROTECTED);
36 void main()
osg::ref_ptr&osgViewer::Viewer& viewer = new osgViewer::Viewer();
osg::ref_ptr&osg::Group& root = new osg::Group();
root-&addChild(getGeometry_1_1());
viewer-&setSceneData(root);
viewer-&run();
1 #version 430 core
2 layout (location=0) in vec4 vP
4 void main()
gl_Position=vP
1 #version 430 core
2 out vec4 fC
4 void main()
fColor=vec4(0.0,0.0,1.0,1.0);
  上文中&顶点着色器&、&片元着色器&代码块分别对应文件:D:\\vert.glsl、D:\\frag.glsl文件中的内容。
  如果您看到如下图所示的渲染效果,那么恭喜您,您已经进入了OpenGL和OSG的世界:
  1.3OpenGL语法
  书中已经讲到,不再赘述。
  1.4OpenGL渲染管线
  顶点数据--&顶点着色器--&细分控制着色器--&细分计算着色器--&几何着色器--&图元设置--&剪切--&光栅化--&片元着色器--&(上图最终效果看到的图形)
  1.5第一个程序:深入分析
  书中通过大量的篇幅介绍了OpenGL、GLUT、GLEW相互协同,绘出最终两个三角形的例子程序。相比而已,博主的这个OSG的程序,就显得简单多了。博主在代码中加了比较详细的注释,稍微有点OSG基础的读者,应该可以看明白。原本打算详细分析一下OSG中是怎么使用Shader、Program这些对象的,但是想到这是第一篇,不想增加读者的入门难度,详细的分析将在日后的博客中推出。
阅读(...) 评论() &opengl-OSG数字地球嵌入到QT5中,OSG的环境如何搭建?
作者:用户
浏览:725 次
OSG数字地球嵌入到QT5中,OSG的环境如何搭建?20C关于具体实现的代码可以参考kestiny的,他写了很多,很详细。但是这里还没到那一步,我们得从下载osg和osgearth开始搭建环境。我下了
OSG数字地球嵌入到QT5中,OSG的环境如何搭建?
关于具体实现的代码可以参考kestiny的,他写了很多,很详细。
但是这里还没到那一步,我们得从下载osg和osgearth开始搭建环境。
我下了一个OSG包,里面有很多东西
里面有个帮助的txt,我点开看是教设置环境变量的,照着做好了。
在src文件夹下找到了帮助提到的两个编译包,解压
看名字应该一个是osg一个是osgearth
好了,现在有三个包了,一个是最大的OSG,另外两个是里面的osg和osgearth,我该用哪个进行OSG数字地球嵌入QT5的呢,他们都有include,lib,dll。
这个是osgearth的包
这个是osg的包
最大的OSG不用CMAKE,其他两个都需要CMAKE,但是CMAKE的会出错,configure这一步就过不了,所以用的是OSG,但是用OSG添加头文件和lib之后,编译链接都可以过,但是运行不了,大家知道是怎么回事吗?看起来像OSG的include和lib和dll都没有加入路径似的,但是我确实加了,不知道osg和osgearth为什么CMAKE不过。
或者提供一套其他的搭建方法也可以。在此感谢大家。
解决方案二:
怎么样,问题解决了吗?我暂时没有时间写一篇关于osg和osgearth的环境搭建的博客了,你可以用我最新编的基于osg3.4和osgearth2.7的库: 密码: 2bku。
【云栖快讯】2017互联网超级工程阿里双11完美落幕,交易额突破1682亿,但阿里工程师如何玩转“超级工程”,背后黑科技又是如何?12月13-14日,12位大咖直播分享揭秘1682亿背后技术实践,马上预约&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供转载地址:
在我们使用OpenGL和OSG的过程中,总会涉及到顶点坐标以及坐标的变换(通过向量和矩阵相乘),这其中经常会看到有人说在OpenGL中使用的是列向量,在OSG中使用的是行向量 ,由于行向量和列向量的不同导致在矩阵作乘法的时候有左乘和右乘之分,本文就这一问题作一个相对完整的解释。
行向量和列向量
1. &行向量和列向量的定义如下:
在线性代数中,行向量是一个 1×n的矩阵, 即矩阵由一个含有n个元素的行所组成。&
在线性代数中,列向量是一个 n×1 的矩阵,即矩阵由一个含有n个元素的列所组成。&
2. 左乘和右乘
说简单点,左乘(又称前乘)就是乘在左边(即乘号前),右乘(又称后乘)就是乘在右边(即乘号后)。比如说,A左乘E即AE,A右乘E即EA。
3.行向量和列向量的变换
由于向量实际上是某一维度为1的矩阵,那么根据矩阵乘法的规则,会出现下面的情况:
(1)行向量左乘矩阵
在图形学中一般矩阵都是4x4的,行向量一般设置为1x4的矩阵(齐次坐标)。当行向量左乘矩阵的时候 (1x4)* (4x4)得到的是一个1x4的行向量
(2)行向量右乘矩阵
这种情况,也就是(4x4)*(1x4),根据矩阵相乘的规则,这是不允许的
(3)列向量左乘矩阵
这种情况,也就是(4x1)*(4x4),根据矩阵相乘规则,这也是不允许的
(4)列向量右乘矩阵
这种情况,也就是(4x4)*(4x1),得到的是一个4x1的行向量
我们作三维的变化为的就是将一个坐标变换到另一个坐标,于是上面讨论的(1)(4)两种方式正好符合这一要求。根据上面的讨论有以下的结论:
行向量左乘还是右乘根本就是矩阵乘法规则的限制,行向量只能左乘而列向量只能右乘矩阵,这和三维图形学没有一点儿的关系。因此有人说OpenGL都是右乘、OSG都是左乘从结论上来说是对的,但是这和OpenGL以及OSG本身并没有半点关系,这只是矩阵乘法的定义。
行向量列向量以及在编程语言中的内存布局
假设有一个4x4的矩阵M,我们现在有一个顶点的坐标是v,通过M矩阵的变换可以把它变为v’,现在分别假设 v是行向量或者v是列向量,于是有以下两种情形:
(1)v是行向量 , 那么 &v' = v*M &
(2)v是列向量, &那么 &v' = M*v &
用那种方式来理解变换都是可以的。下面一段是OpenGL规范最早的设计者的一段话,可以从中知道他当时只是想使用列向量这种方式让图形学和数学上的表达一致,而& 欺骗” 读者说OpenGL使用的是列向量。
那么现在又有一个疑问:既然行向量和列向量并没有什么不同,那么为什么大家都在说在OpenGL中使用的是列向量而OSG中使用的是行向量呢? 答案就在于:当使用C/C++语言进行描述矩阵和向量相乘的时候,使用行向量的理解方式和使用列向量的理解方式在内存中存储矩阵元素的时候有所不同,这就是真正的关键点所在。还是按之前的做法,假设现在坐标点是 &(1,2,3, 0),通过矩阵M,变换为坐标值是(38,44,50,56)的点,对于这个变换来说,可以使用行向量和列向量来理解,这两种理解方式正好就是OSG和OpenGL的处理方式。
(1)使用行向量的方式来理解, 那么我们的矩阵是&
通过矩阵乘法知道 v = (1, 2, 3, 0) , 那么 v' = vM = (38, 44, 50, 56), 假设正好我们使用C/C++语言进行编码,由于C/C++语言中并没有矩阵这种类型,它使用二维数组来存储矩阵元素,并且在C/C++中使用的是 行主序的方式进行存储的,因此矩阵M在内存中如下图所示:
(2)使用列向量的方式来理解,那么我们的矩阵就不是上面的矩阵了,而是:
通过矩阵乘法,v' = Mv
在C/C++内存模型中,这个矩阵M如下所示:
可以看到使用行向量和列向量的区别,仅仅是内存布局的不同导致我们在理解行向量和列向量的时候有差异。
从上面的分析可以得出以下的几点结论:
(1)使用行向量或者列向量来理解OpenGL和OSG都可以,实际上行向量和列向量并没有任何的差别
(2)当使用列向量来理解变换的时候,所有的变换方式都是后乘(右乘),当使用行向量来理解变换的时候,所有变换的方式都是前乘(左乘)
(3)OpenGL为了表现它是使用的列向量,所有的矩阵设计为列主序的方式,因此当我们在进行变换的时候,需要注意要将矩阵按C/C++语言内存布局的方式存储,也就是说假设有一个平移矩阵,平移量Tx,Ty,Tz应该处在的位置是数组的第 4,8,12位置处
这种处理方式在C/C++中会显得十分别扭,因为这几个平移变量的位置不连续,这也是为什么很多三维库都使用 行主序(行向量)方式的原因,因为如果使用行向量的方式,那么这三个行向量的位置正好是相邻的,和C/C++语言的存储方式一致。 &不过OpenGL也提供了用来接收行主序方式的矩阵的函数:
(4)OSG为了让人感觉它使用的是行向量,所有矩阵的设计都是基于行主序的方式。这样的设计正好与c++语言中二维数组的存储方式一致,使用起来比较自然。所有在OSG中的变换都是左乘矩阵, 通过查看OSG中Matrix的实现也很容易看到这一点:
本文已收录于以下专栏:
相关文章推荐
【尽量看原址,该转载版,排版看着严重不舒服】
原址:/post//
继承自己 Component 类
通过物理模拟控制一个物体的位置.
刚体组件控制对象的位置--它使物体落在重力的影响下,可以计算碰撞对象将...
OpenGL与OSG中行向量与列向量
在之前的文章中,我们已经解释了向量可以写成[1 x 3]的矩阵(一行三列)。但是现在也可以写成[3 x 1](三行一列)的形式。从技术上来说,这两种表示点和向量的方式都是合理的,选用一种模式只是涉及到...
声明: 仅个人小记
前言: 主要是引入一个新的看待矩阵乘法的角度觉得这个挺重要的,故做记录列向量角度,矩阵左乘AB = C
结合上图,我们可以知道,结果矩阵C中的第 j 列完全可以表示为矩阵A中列...
Shp文件的几何向量在Osg中转换及轮廓提取
我们常常会碰到存储有几何向量Shp文件,或是GIS地形文件相对应的的shp文件,那么怎么利用这些Shp 中的几何特征对象呢?
一、Shp文件的转...
1.法线向量
glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
//指定参数设置当前的法线向量
2.顶点数组
.1启用数组
OpenGL学习笔记之法线向量
需要注意的地方:
1.使用glTranslate*函数或者glRotate*函数可以改变物体的外观,但法线向量并不会随之改变。然而,使用glScale*函数,对每一坐...
由于毕业论文的需要,近期开始学习OpenGL,由于新手刚开始接触所以总会遇到很多问题。这两天,总算把OpenGL中顶点法向量这个问题弄明白了。
几点迷惑:
在网上百度,发现很多求平面...
他的最新文章
讲师:董晓杰
讲师:姚远
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 opengl安装教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信