??xml version="1.0" encoding="utf-8" standalone="yes"?>97久久久精品综合88久久,久久久青草青青亚洲国产免观,人妻精品久久久久中文字幕一冢本http://www.shnenglu.com/acmiyou/zh-cnSat, 10 May 2025 18:25:19 GMTSat, 10 May 2025 18:25:19 GMT60C++ 函数重蝲(overroad) 覆盖(override) 隐藏(hide) 的区?/title><link>http://www.shnenglu.com/acmiyou/archive/2009/09/24/97155.html</link><dc:creator>cx</dc:creator><author>cx</author><pubDate>Thu, 24 Sep 2009 11:52:00 GMT</pubDate><guid>http://www.shnenglu.com/acmiyou/archive/2009/09/24/97155.html</guid><wfw:comment>http://www.shnenglu.com/acmiyou/comments/97155.html</wfw:comment><comments>http://www.shnenglu.com/acmiyou/archive/2009/09/24/97155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/acmiyou/comments/commentRss/97155.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/acmiyou/services/trackbacks/97155.html</trackback:ping><description><![CDATA[ <p>原文转自 <a mce_>http://blog.chinaunix.net/u/15921/showart_227111.html</a></p> <ul> <li> <strong>成员函数被重载的特征</strong> </li> </ul> <blockquote> <p>Q?Q相同的范围Q在同一个类中)Q?<br />Q?Q函数名字相同; <br />Q?Q参C同; <br />Q?Qvirtual 关键字可有可无?</p> </blockquote> <ul> <li> <strong>覆盖是指zcd数覆盖基cd敎ͼ特征?/strong> </li> </ul> <blockquote> <p>Q?Q不同的范围Q分别位于派生类与基c)Q?<br />Q?Q函数名字相同; <br />Q?Q参数相同; <br />Q?Q基cd数必Lvirtual 关键字?/p> </blockquote> <ul> <li> <strong>“隐藏”是指派生类的函数屏蔽了与其同名的基cd敎ͼ规则如下</strong> </li> </ul> <blockquote> <p>Q?Q如果派生类的函C基类的函数同名,但是参数不同。此Ӟ不论有无virtual关键字,基类的函数将被隐藏(注意别与重蝲hQ?<br />Q?Q如果派生类的函C基类的函数同名,q且参数也相同,但是基类函数没有virtual 关键字。此Ӟ基类的函数被隐藏Q注意别与覆盖؜淆)</p> </blockquote> <img src ="http://www.shnenglu.com/acmiyou/aggbug/97155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/acmiyou/" target="_blank">cx</a> 2009-09-24 19:52 <a href="http://www.shnenglu.com/acmiyou/archive/2009/09/24/97155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Effective C++ MW记 条款一至三http://www.shnenglu.com/acmiyou/archive/2009/09/23/97039.htmlcxcxWed, 23 Sep 2009 11:20:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/09/23/97039.htmlhttp://www.shnenglu.com/acmiyou/comments/97039.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/09/23/97039.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/97039.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/97039.html
  • 条款一 视C++Z个语a联邦
  • C,C++中的四种ơ语a..

    1.C. c基础..

    2.Object-Oriented C++ ,c++的主?class ,cd?l承,多态等.

    3.Template C++ ..c++里头的泛型编E?.模板~程.

    4.STL.  标准模板?.如vector,queue,map{?

    q个条款所叙述?.应当在次语言变换时?高效~程守则也需要做出相应的改变{略..

    例子:

        对内|对象类型而言..使用 g?要比 引用传递?来的高效

        对于自定义类而言, 常引用传递往往更好..(const class& )

        STL 中而言.其是在C指针之上塑?因此.g?也再ơ适用..

    谨记: 对于C++高效~程原则应当视情况而定..取决使用C++中的那一部分

    • 条款2 量使用const enum inline 替换 #define ?/strong>

    误?
    1.对于单纯帔R,最好以const对象或enums 替换?#define..
    ?  const double PI = 3.141592653
    class Test{
    static const double PI;    //声明?br /> };const double Test::PI = 3.141592653;  //定义?在实现文?

    2. 对于形似函数的宏..最好改?inline 函数的Ş?替换.
    >

    • 条款3 可能的使用 const

             谨记:

    1.某些东西声明ؓconst 可帮助编译器侦测错误用法. const 可被施加于Q何作用域的对?函数参数.函数q回cd.成员函数本体.

    ? 在C++里常用的 const 引用传?如?const 指针一?不以前函C改其?q就很好的保护了.参数的g能被修改.

    ? 定义成const 成员函数,在该成员函数?是不允许修改成员变量?因此q样一个接口往往可以启动保护数据的作?

    const 引用传值时?只能调用.const 成员函数...

    const q回?往往会作为接口时?使得q回g允许被外部修?因此也是非常有用.

    STL 当中的iterator..  const vector<int>::Iterator 表示 int * const   指针帔R.

    vector<int>::const_Iterator ?const int *  帔R指针..

    2. ~译器强制实?bitwise constness. 但用时?应注意是概念上的帔R.

    mutable 释放掉q种U束..?q么定义.   mutable int size;

    其定义的变量允许在const 成员函数中予以修?.

    3.当const ?non-const 成员函数 h{h实现时?,令non-const 函数 调用const 函数 可避免重?

    Z么不const 调用 non-const ..原因在于.const 需要保证不允许修改成员变量. 而调用non-const 成员函数.则存在可能已l修改了成员变量.因此q是一U不正确..

    例子可入下所C?

    [const_cast<T&>]( static_cast<const T&>(*this) .function());   const_cast 视情况而定..如需要返回值去掉const属性则需要了. static_cast<> 则进行一ơ强制{换成const 引用..



    cx 2009-09-23 19:20 发表评论
    ]]>
    OSG 学习<4> MatrixTransform ?PosiotionAttitudeTransformhttp://www.shnenglu.com/acmiyou/archive/2009/08/24/94292.htmlcxcxMon, 24 Aug 2009 09:29:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/24/94292.htmlhttp://www.shnenglu.com/acmiyou/comments/94292.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/24/94292.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/94292.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/94292.html        一颗场景树,q不止只有叶子节点Geode 因此.在osg中有着一些各U各Ll节?osg::Group.q有许多从osg::Group l承的其他各U各Ll节?cd多了.附类l承囑֜址

           我目前只是尝试用了MatrixTransform PositionAttitudeTransform Group Projection Switch {各U功能的l节?  在介lMatrixTransform ?PositionAttitudeTransform 节点?我想先介l下osg当中矩阵的一些相关知? 

           其实,无需兛_osg矩阵是如何实现的.但是要记住的是osg中采用的左乘操作,我们qx里讨论的操作如旋转^Uȝ.
          OpenGL?    newpos = R* T * oldpos    //先执行^U?后执?旋{ (全局坐标p?
          osg当中:  newpos  =oldpos * T *R    //先执行^U?后执行旋?nbsp;   (全局坐标p?
    因ؓ在osg当中矩阵执行的操作则是行矩阵操作.因此Z跟OpenGL的列矩阵做同?而不在定义的时候就相当于做了一个{|操??br> 

    因此在osg/State ?在用applyModelViewMatrix()   osg/State 是OpenGL状态机的封?是与OpenGL交互的类
    Matrix

    它是直接使用glLoadMatrix(matrix)q行载入矩阵?因此它的转置刚好适应了OpenGL列优先的模式.

    你只需牢记 在OSG当中变换的步骤则是左乘操?全局坐标p?..卛_边的是先执行变换?

    谈完如上的那些之?我们现在来看MatrixTransform 和PositionAttitudeTransform.

    参考坐标系有三U?br>            RELATIVE_RF,    //全局 相对 ()
                ABSOLUTE_RF,  //局?nbsp; l对 ()
                ABSOLUTE_RF_INHERIT_VIEWPOINT   //Z视点一个局部坐标系.很少用到.

    MatrixTransform 故名 矩阵变换节点.在位于它的节点之下的节点都将按照q它的矩阵变换来q行模型变换操作.因此 MatrixTransform的主要功能之一是提供模型变换操作..你只要根据你所需要的讄其模型矩阵就?
    x?setMatrix() 因此.查看计算当前World矩阵的方法就可以很清晰的明白其最后结果就?

    如果是相对的.那么 先执行自w的变换,在执行父节点的变换操?q类似OpenGL中后写的变换是先执行的一?全局坐标p考虑)
    否则是绝对的,那么当前矩阵是自n矩阵
    MatrixTransform

    PositionAttibuteTransform 是位置姿态节?.x们只可以调整该节点的所有孩子的位置以及姿?,我们也先来看一下它的矩阵变?
    Positon

    PositionAttibuteTransform 的矩阵变换顺序的固定?可以说是MatrixTransform的一个特?,操作序我就不在详谈?因ؓ它的功能是Z实现姿态和位置.q有~放{?
    因此 setPivotPoint 得之后的变换会Z此^UL作执?  

    那么实现一个例子来观察他们的效? 下面的例子则?br><1> 使用PositionAttitudeTransform 讄左边的牛. 位置位于(-10,0,0) 姿态ؓlz轴旋?0?
    <2> 使用MatrixTransform 讄双的牛,  先执行^UL?10,0,0) 在绕z轴旋?0?因此使得q只牛偏屏幕内部一?(你画个坐标u 按全局思\演示 则就知道牛在上面位置?!)

    例子

    例子下蝲地址  :  源代码下?/a>


    cx 2009-08-24 17:29 发表评论
    ]]>
    OpenGL 渲染线理论http://www.shnenglu.com/acmiyou/archive/2009/08/23/94191.htmlcxcxSun, 23 Aug 2009 12:23:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/23/94191.htmlhttp://www.shnenglu.com/acmiyou/comments/94191.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/23/94191.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/94191.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/94191.html         q几天稍微看了一些关于GLSL的顶点着色以及片元着色的一些相关知?目前来讲q有一个着色器则是Geometry_shader..我的昑֍用不了这个功?.当然有点遗憾>_<..
             在看了一些之?大概了解了一些关于OpenGL渲染线的知?看了q个之后对于OpenGL的学习我惛_当是很有帮助.关于q么一的原文则是GLSL-LIGHTSOURCE 教程一个开部?原文地址:
    是英文的..我在osgchina教程论坛上也见到qFreeSouth大牛的中文翻?.

             关于渲染线什么呢?无非是在OpenGL的管道当中各个部分的功能以及如何在管道当中Ş成了我们惌的最l的一q图.(像素).而管U当中的操作可分Z下几个部?

     阶段1. 指定几何对象.
          ??nbsp;U?三角?{一些几何图?.OpenGLl制几何囑օ的方法有以下三种:
          <1> 一ơ一个顶?即用glBegin()  glVertex() glEnd() 指定几何对象.
          <2> 使用点数组..如glDrawArrays.glDrawElements.{?一ơ性的l制大量囑օ.
         上面q两U模式则是立x?x定完囑օ之后会被立即渲染.卛_所有数据发往渲染线后立卌渲染.
          <3>昄列表模式.它存储于OpenGL服务?(接收OpenGL命o的一?) glNewList glEndList glCallList .
        
    阶段2   点处理操作:

             不管以上的几何对象是如何指定?所有的几何数据都将会经q这个阶D?q个阶段负责的则是逐个点的操?
             在这个阶D能做的工作则是:
             1. 点变换...Ҏ模型视图和投q阵变?br>         2. 光照计算 法线变换(法线矩阵 是模型矩늚左上?*3的逆矩?和法U规格化
             3. U理坐标变换.(U理矩阵)
             4.材质状?U理坐标生成?
             而最重要的则是变换以及光? 每个点在这个阶D分别是单独处理?
             q个阶段所接收到的数据则是每个点的属性特?.输出则是变换后的点数据.

    阶段3  囑օl装
             在顶点处理之?点的全部属性都已经被确?在这个阶D顶点将会根据应用程序送往的图元规?
    GL_POINTS GL_TRIANGLES {?会被组装成囑օ

    阶段4 囑օ处理(裁剪 消隐)
             <1>q个步骤W一个所做的应当是裁剪操?.会将囑օ与用户定义的裁剪q面 即glClipPlane 和模型投q阉|建立的视景比? q将会裁剪且丢弃位于视景和裁剪^面外部的囑օ.不在予以处理.
            <2> 其次.若是采用透视投媄 那么.会Ҏ个顶点的x,y z坐标分别除以w.
            <3>紧接着 则是p口变换将点坐标变换至窗口坐?
            <4> 执行消隐操作

    阶段5  栅格化操?/span>
            <1>由图元处理传递过来的囑օ数据.在此会被分解成更小的单元ƈ对应帧缓冲区的各个像?q些单元被称之ؓ 片元. 一个片元可能包含窗口左?深度 颜色 U理坐标{属?
             <2> 片元的属性则是图元上点数据{?span style="COLOR: red">l过插?/span>而确定的..q里生成的片元将会包含主颜色和次颜色.
               glShadeMode() 函数的作用将会这里体?即用插?qx着? 或者用最后一个顶炚w?q面着?
             <3> 点宽 U宽.多边形模?正面背面{一些特征也是q阶D发生作?
              <4> 反走样也是这个阶Dv作用.

     阶段6 片元处理
             <1>上纹?通过U理坐标取得U理内存中相对应的颜?br>         <2> 雑֌ 通过片元距离当前视点位置修改颜色.
             <3> 颜色汇?.(q个与؜合完全不同概??U理,d义的颜色,雑֌的颜?ơ颜色光照阶D计的颜色)汇M?
           
    阶段7  逐个片元的操?br>         <1> 所有的一些测?像素所有权 剪切(glScissor) Alpha试(glAlphaFunc) 模版试(glStencilFunc)
              深度试 (glDephtFunc) 混合(glBlendFunc) 
             q些操作会最后媄响其在~冲区的颜色?

    阶段8  帧缓冲操?/span>
            <1>q个阶段执行帧缓冲的写入{操作等..最后生了昄出来的像?
             glColorMask glStrncilMask glDepthMask glClearDepht glClearStencil glClearColor {?在q个阶段影响写入的?


    以上只是讨论OpenGL 囑օl制的基本过E?那么Z像素囑փl制.几乎形同之上..只是在光栅化处理前的操作不一?即经q像素解?像素传输.栅格?最后Ş成片?..片元之后的处理完全一?.

    因此 在着色器~程领域..你将可实?br>    Vertex Shader 替换 点处理阶段
        Fragment Shader 替换 片元处理阶段
        Geometry Shader 替换 囑օl装阶段..


    因ؓq三个阶D|军_都是最重要效果的阶D?.对于q些的可~程带来非常大的好处以及可控制的渲?!


    cx 2009-08-23 20:23 发表评论
    ]]>
    OSG学习<3> Drawable ?几何体创?/title><link>http://www.shnenglu.com/acmiyou/archive/2009/08/23/94182.html</link><dc:creator>cx</dc:creator><author>cx</author><pubDate>Sun, 23 Aug 2009 10:34:00 GMT</pubDate><guid>http://www.shnenglu.com/acmiyou/archive/2009/08/23/94182.html</guid><wfw:comment>http://www.shnenglu.com/acmiyou/comments/94182.html</wfw:comment><comments>http://www.shnenglu.com/acmiyou/archive/2009/08/23/94182.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/acmiyou/comments/commentRss/94182.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/acmiyou/services/trackbacks/94182.html</trackback:ping><description><![CDATA[<br>       在知道如何用Viewer视景器来q行仿真循环之后.M会一直尝试着昄一头有着球面映射的牛q行观赏着.M想着如何搭徏自己的模?如何实现自己所要绘制的一?如你一?我也拥有着q种冲动.如同我一开始学OpenGL的时?我绘制出W一个三角Ş便觉得十分的兴奋.但当我尝试用它们建立各种奇怪的囑Ş的时?像是搭U木一?觉得怪异?...<br>      Drawable 故名 可绘制的.. 那么什么才是可l制?我们可以惌.怋用的?U?三角?四边?{?q些是可绘制的.OpenGL大可只能实现l制最l也只是q些..<br><br>     l常使用的场景图是一般都是一颗树. 那么在OSG也不例外.它是一颗节Ҏ.其最末梢的节ҎGeode.卛_子节? 一个Geode可以包含多个Drawable.因此在OSG中我们想要绘制诸如三角Ş{?最l需要用的肯定也是Geode叶子节点.然后Drawable加入Geode?..<br><br>     osg/Drawable 只是一个抽象类.那么实现它的cL多少? q是比较多的.<br><img height=495 alt="" src="http://www.shnenglu.com/images/cppblog_com/acmiyou/osg/drawable.jpg" width=517 border=0><br><br>而这中间最常用的莫属Geometry.几何体绘?.而说到几何体.需要的无非是点..颜色.以及如何l成囑օ<Primitive>..<br>      因此一个Geometry需要拥有的数据大可有点.法线坐标 U理坐标.索引?..以及PrimitiveSet.<br>      ?法线,颜色{?需要用到矢??osg::Vec2 osg::Vec3 osg::Vec4<br>      PrimitiveSet.则包含了l成如何l成一个图元的规则..如GL_POINT GL_TRIANGLES.{?<br>      用实例说明吧.如用下面这D代码将会创Z个多彩的三角?和一个白色的立方?<br>     <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_182415 onclick="this.style.display='none'; Code_Closed_Text_182415.style.display='none'; Code_Open_Image_182415.style.display='inline'; Code_Open_Text_182415.style.display='inline';" height=16 src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_182415 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_182415.style.display='none'; Code_Closed_Image_182415.style.display='inline'; Code_Closed_Text_182415.style.display='inline';" height=16 src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_182415 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Geode</span><span id=Code_Open_Text_182415 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">osg::Node</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> create()<br><img id=Codehighlighter1_20_1396_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_1396_Open_Text.style.display='none'; Codehighlighter1_20_1396_Closed_Image.style.display='inline'; Codehighlighter1_20_1396_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_20_1396_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_1396_Closed_Text.style.display='none'; Codehighlighter1_20_1396_Open_Image.style.display='inline'; Codehighlighter1_20_1396_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_20_1396_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_20_1396_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_23_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_23_86_Open_Text.style.display='none'; Codehighlighter1_23_86_Closed_Image.style.display='inline'; Codehighlighter1_23_86_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_23_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_86_Closed_Text.style.display='none'; Codehighlighter1_23_86_Open_Image.style.display='inline'; Codehighlighter1_23_86_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_23_86_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_23_86_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* <br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        geode is a leaf node,It must contain some drawables..<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Geode</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> geode </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Geode;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_127_170_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_170_Open_Text.style.display='none'; Codehighlighter1_127_170_Closed_Image.style.display='inline'; Codehighlighter1_127_170_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_127_170_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_127_170_Closed_Text.style.display='none'; Codehighlighter1_127_170_Open_Image.style.display='inline'; Codehighlighter1_127_170_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_127_170_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_127_170_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* define a Geometry for draw a triangle.</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Geometry</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> triangle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Geometry;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    geode</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">addDrawable(triangle);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_251_273_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_273_Open_Text.style.display='none'; Codehighlighter1_251_273_Closed_Image.style.display='inline'; Codehighlighter1_251_273_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_251_273_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_273_Closed_Text.style.display='none'; Codehighlighter1_251_273_Open_Image.style.display='inline'; Codehighlighter1_251_273_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_251_273_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_251_273_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* triangle Vertexs </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> Tvertex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Vec3Array;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">setVertexArray(Tvertex);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tvertex</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tvertex</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3( </span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tvertex</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br><img id=Codehighlighter1_502_521_Open_Image onclick="this.style.display='none'; Codehighlighter1_502_521_Open_Text.style.display='none'; Codehighlighter1_502_521_Closed_Image.style.display='inline'; Codehighlighter1_502_521_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_502_521_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_502_521_Closed_Text.style.display='none'; Codehighlighter1_502_521_Open_Image.style.display='inline'; Codehighlighter1_502_521_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_502_521_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_502_521_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* set the color </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> Tcolor  </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Vec3Array;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">setColorArray(Tcolor);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">setColorBinding(osg::Geometry::BIND_PER_VERTEX);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tcolor</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tcolor</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tcolor</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_798_817_Open_Image onclick="this.style.display='none'; Codehighlighter1_798_817_Open_Text.style.display='none'; Codehighlighter1_798_817_Closed_Image.style.display='inline'; Codehighlighter1_798_817_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_798_817_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_798_817_Closed_Text.style.display='none'; Codehighlighter1_798_817_Open_Image.style.display='inline'; Codehighlighter1_798_817_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_798_817_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_798_817_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* set the normal</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Vec3Array</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> Tnormal </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Vec3Array;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    Tnormal</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">push_back(osg::Vec3(</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">));<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">setNormalArray(Tnormal);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">setNormalBinding(osg::Geometry::BIND_OVERALL);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_1008_1047_Open_Image onclick="this.style.display='none'; Codehighlighter1_1008_1047_Open_Text.style.display='none'; Codehighlighter1_1008_1047_Closed_Image.style.display='inline'; Codehighlighter1_1008_1047_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1008_1047_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1008_1047_Closed_Text.style.display='none'; Codehighlighter1_1008_1047_Open_Image.style.display='inline'; Codehighlighter1_1008_1047_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_1008_1047_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1008_1047_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* set the Primitive use GL_TRIANGLES</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::PrimitiveSet</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> Tprimitive </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::DrawArrays(GL_TRIANGLES,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    triangle</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">addPrimitiveSet(Tprimitive);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_1164_1200_Open_Image onclick="this.style.display='none'; Codehighlighter1_1164_1200_Open_Text.style.display='none'; Codehighlighter1_1164_1200_Closed_Image.style.display='inline'; Codehighlighter1_1164_1200_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1164_1200_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1164_1200_Closed_Text.style.display='none'; Codehighlighter1_1164_1200_Open_Image.style.display='inline'; Codehighlighter1_1164_1200_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_1164_1200_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1164_1200_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* now  define a box(center,width)</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::Box</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> boxtest </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::Box(osg::Vec3(</span><span style="COLOR: #000000">1.5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">),</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_1266_1292_Open_Image onclick="this.style.display='none'; Codehighlighter1_1266_1292_Open_Text.style.display='none'; Codehighlighter1_1266_1292_Closed_Image.style.display='inline'; Codehighlighter1_1266_1292_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1266_1292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1266_1292_Closed_Text.style.display='none'; Codehighlighter1_1266_1292_Open_Image.style.display='inline'; Codehighlighter1_1266_1292_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_1266_1292_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1266_1292_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* use the ShapeDrawable</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    osg::ShapeDrawable</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> box </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> osg::ShapeDrawable(boxtest);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    geode</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">addDrawable(box);<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> geode;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div> <br>       q里我将解释一些东?<br>       1.Geometry默认是用显C列表来l制囑օ?你大可观看源码或文档M?你可以设|?br>       setUseDisplayList(false) 用?或者若在绑定数据的时候用了BING_PER_PRIMITIVE也将会禁用显C列?br>       2.ShapeDrawable 则是内置一些Ş状的囑օ.诸如 圆柱.球体.圆锥{?自己实现试一?<br>       3.BING_PER_VERTEX 则指的每个顶点对应于一U属?如例子中的颜?.<br>       4.BING_OVERALL 则是全部点使用一L属?如例子中的法U?<br><br>实例源代码下?  ..<a >下蝲地址<br></a><br><font color=#002c99>忘了说明一?在OSG当中的坐标系?z朝上.y朝里.x朝右..与OpenGL中刚好绕x轴旋转了90?.<br>q有一点则?我们通常情况下默认用视景器其中的一个关于摄像机漫游器其实默认是使用TrackballManipulator 因此.它会视点中心指向整个场景的包围球中?..<br></font><br>最l结果图:如下:<br><img height=401 alt="" src="http://www.shnenglu.com/images/cppblog_com/acmiyou/osg/geometry.jpg" width=564 border=0><br><br> <img src ="http://www.shnenglu.com/acmiyou/aggbug/94182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/acmiyou/" target="_blank">cx</a> 2009-08-23 18:34 <a href="http://www.shnenglu.com/acmiyou/archive/2009/08/23/94182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG学习<2> GraphicsContext与窗口徏?/title><link>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94108.html</link><dc:creator>cx</dc:creator><author>cx</author><pubDate>Sat, 22 Aug 2009 13:21:00 GMT</pubDate><guid>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94108.html</guid><wfw:comment>http://www.shnenglu.com/acmiyou/comments/94108.html</wfw:comment><comments>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/acmiyou/comments/commentRss/94108.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/acmiyou/services/trackbacks/94108.html</trackback:ping><description><![CDATA[     摘要:        所谓的GraphicsContext  我这么翻译它?囑Ş讑֤上下?..像在用OpenGL在win32的窗口里l制的时?曾用的hrc = wglCreateContext(hdc)一?创徏一个图形设备上下文 ,然后使用wglMakeCurrent(hdc,hrc)讄当前使用的图形设备一?...  <a href='http://www.shnenglu.com/acmiyou/archive/2009/08/22/94108.html'>阅读全文</a><img src ="http://www.shnenglu.com/acmiyou/aggbug/94108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/acmiyou/" target="_blank">cx</a> 2009-08-22 21:21 <a href="http://www.shnenglu.com/acmiyou/archive/2009/08/22/94108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSG学习<1> osg概述以及学习Ҏ{?/title><link>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94107.html</link><dc:creator>cx</dc:creator><author>cx</author><pubDate>Sat, 22 Aug 2009 11:01:00 GMT</pubDate><guid>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94107.html</guid><wfw:comment>http://www.shnenglu.com/acmiyou/comments/94107.html</wfw:comment><comments>http://www.shnenglu.com/acmiyou/archive/2009/08/22/94107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/acmiyou/comments/commentRss/94107.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/acmiyou/services/trackbacks/94107.html</trackback:ping><description><![CDATA[<br>一.概述.<br>     Osg 即OpenSceneGraph的简U?是一Ƒּ源的场景囑Ş?同时它也是跨q_?.Osg它基于场景图的概?利用了Y件开发当中的设计模式的理?设计q提供了一个基于OpenGL底层的面向对象的囑Ş开发框?.<br>     Osg是完全由标准C++和OpenGL而写?充分利用STL和设计模式的Ҏ?可以说是h高性能,可扩?可移植的Ҏ?q前来讲似乎是来流行v来的一N常棒的场景图形库.仍需要更详细的解释方可去官方|站{查?gt;_<..<br><br>?关于OSG的学?<br>     1.׃OSG是开源的,现在已经发展C2.9版本?代码量也日趋递增的趋?而缺完善的文档.所以说通读代码已经是g非常痛苦的学习过E?但是q依然是个最主要的方式之一.M的解释你都可能在代码中得到解{?<br>     2.其次 英文版的官方|站 和中文的官方论坛也是一个学习的地方.在osgchina论坛怼得到array和flysky两位版主的详l解{和..<a title=osg英文官方|站 >osg英文官方|站</a>    <a title=osg中国官方|站 >osg中国官方|站</a><br>     3.邮g列表..列表当中都是一些很l典的问?你可以通过邮箱订阅来获?说真?我也没怎么l看....英文水^不高>_<.所以呢q在恶补着p... <a title=邮g列表地址 >邮g列表地址</a><br>     4.有个非常著名的教E?.国军关于OSG的教E?.NPS...<a title=教程地址 >教程地址</a> .<br>没想到居然换了个地址x找了半天>_<..ofcourse English. 中文版的译文你可以在osgchina的论坛里扄?但好像不全面.<br>     5. osg源代码中的所有例?examples...<br>     6. 其次?掌握一定的OpenGL基础也是非常好的学习前提.我就是这两个同时一起学?gt;_<,<br>?关于OSG的一些内?<br>    1.W一个重点则是场景管理的能力.可以理解成是一颗场景树.<br>    2.osg的场景图形单U程/多线E?渲染 (渲染q程分ؓ:状态树和渲染树)<br>    3.osg中实现很多非常实用的工具呀,模型d{?q不需要我们自己写很多代码d现这斚w的内?<br>    4.osg集成所有的OpenGL的状态和Shader的一些内?.q有矩阵q算{?<br>   q有许多内容我ƈ没有说的?gt;_< 因ؓ我只是看了一个月的代码和资料..也没有完整的写过很多E序.所以我依然q在学习当中.>_<<br>Z以上我们可以认ؓ.OSG是一个非常实用的高层囑Ş应用.<br><br>关于1.2两部分内容你可参?Array版主的某大?<最长的一?gt; 详述了OSG当中一帧当中发生的所有事?.<br><br>关于W三.部分 主要的集?osgDB和osgUtil q两个库当中.<br>关于W四部分   OpenGL状态集合主要是 osg/StateSet ?osg/StateAttribute  osg/Shader  osg/Matrix{许多类当中集成?<br><br>q是我目前所能说明的一?gt;_< 毕竟我也只是初学?.<br>我会这些天以来的学习以及代码的阅读q程中一些ȝ甚至体会写下?..<br> <img src ="http://www.shnenglu.com/acmiyou/aggbug/94107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/acmiyou/" target="_blank">cx</a> 2009-08-22 19:01 <a href="http://www.shnenglu.com/acmiyou/archive/2009/08/22/94107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opengl nehe lesson 1-24?glut版本代码http://www.shnenglu.com/acmiyou/archive/2009/08/21/94019.htmlcxcxFri, 21 Aug 2009 06:09:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/21/94019.htmlhttp://www.shnenglu.com/acmiyou/comments/94019.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/21/94019.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/94019.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/94019.html我发现我自己都没IZ一的写着发着ȝ?最q可能有点忙..我是一边学opengl,一边学着一个开源的囑Ş渲染引擎osg.  老师另外q叫我看看GLSL ..我发现都快忙不过来了>_< q有安排旉学习p,以及设计模式之外的一些知识等..事情真多.学无止境?.

    附上最q学NEHE 写的1-24的代?gt;_<    内部注有详细注释,如有些函数功能可详看opengl文档?nbsp; :下蝲地址 




    cx 2009-08-21 14:09 发表评论
    ]]>
    opengl学习 nehe opengl lesson_9http://www.shnenglu.com/acmiyou/archive/2009/08/08/92629.htmlcxcxSat, 08 Aug 2009 09:48:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/08/92629.htmlhttp://www.shnenglu.com/acmiyou/comments/92629.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/08/92629.html#Feedback1http://www.shnenglu.com/acmiyou/comments/commentRss/92629.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/92629.html阅读全文

    cx 2009-08-08 17:48 发表评论
    ]]>
    opengl学习 nehe lesson 8http://www.shnenglu.com/acmiyou/archive/2009/08/08/92627.htmlcxcxSat, 08 Aug 2009 09:14:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/08/92627.htmlhttp://www.shnenglu.com/acmiyou/comments/92627.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/08/92627.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/92627.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/92627.html阅读全文

    cx 2009-08-08 17:14 发表评论
    ]]>
    OSG 撞之多面体求交器代码解读(PloytopeIntersector)http://www.shnenglu.com/acmiyou/archive/2009/08/02/91942.htmlcxcxSun, 02 Aug 2009 07:03:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/08/02/91942.htmlhttp://www.shnenglu.com/acmiyou/comments/91942.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/08/02/91942.html#Feedback1http://www.shnenglu.com/acmiyou/comments/commentRss/91942.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/91942.html阅读全文

    cx 2009-08-02 15:03 发表评论
    ]]>
    opengl 使用bmp位图U理(8-bit 24bit)http://www.shnenglu.com/acmiyou/archive/2009/07/31/91811.htmlcxcxFri, 31 Jul 2009 07:30:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/31/91811.htmlhttp://www.shnenglu.com/acmiyou/comments/91811.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/31/91811.html#Feedback2http://www.shnenglu.com/acmiyou/comments/commentRss/91811.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/91811.html阅读全文

    cx 2009-07-31 15:30 发表评论
    ]]>
    opengl学习 nehe opengl lesson_7http://www.shnenglu.com/acmiyou/archive/2009/07/26/91242.htmlcxcxSun, 26 Jul 2009 06:21:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/26/91242.htmlhttp://www.shnenglu.com/acmiyou/comments/91242.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/26/91242.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/91242.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/91242.html阅读全文

    cx 2009-07-26 14:21 发表评论
    ]]>
    opengl学习 nehe opengl lesson_6http://www.shnenglu.com/acmiyou/archive/2009/07/17/90386.htmlcxcxFri, 17 Jul 2009 12:46:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90386.htmlhttp://www.shnenglu.com/acmiyou/comments/90386.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90386.html#Feedback3http://www.shnenglu.com/acmiyou/comments/commentRss/90386.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90386.html阅读全文

    cx 2009-07-17 20:46 发表评论
    ]]>
    opengl学习 nehe opengl lesson_5http://www.shnenglu.com/acmiyou/archive/2009/07/17/90376.htmlcxcxFri, 17 Jul 2009 10:24:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90376.htmlhttp://www.shnenglu.com/acmiyou/comments/90376.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90376.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/90376.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90376.html阅读全文

    cx 2009-07-17 18:24 发表评论
    ]]>
    opengl 学习 nehe opengl lesson_4http://www.shnenglu.com/acmiyou/archive/2009/07/17/90353.htmlcxcxFri, 17 Jul 2009 08:33:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90353.htmlhttp://www.shnenglu.com/acmiyou/comments/90353.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/17/90353.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/90353.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90353.html所有的lesson 都将Zlesson_1中的头文件而写.

    lesson_4的内容在lesson_3的基上添加了部分内容而写成的.q课当中,会使用到模型变换的旋{变换.
    前几?曾用了glTranslatef(d)来移动模?q次用glRotatef 来旋转模?而ؓ了看C个动ȝ效果,注册一个空闲回调函?使得角度不断自增.

    #include "openglglut.h"

    /*
    ** opengl 教程W四译ֆ?br>** 在窗口的左边部分l制一个多彩的三角?它将使用qx着?br>** 在窗口的双部分l制一个蓝色的正方?它将使用单调着?br>** 使得左边的三角ŞlY轴不停旋?br>** 使得双的正方Şlx轴不停旋?br>
    */

    double yRot=0.0;    //三角形绕y轴旋转的角度
    double xRot=0.0;    //三角形绕x轴旋转的角度
    int main(int argc, char** argv)
    {
        
    /** 初始化窗?nbsp;q创建窗?/span>*/
        createWindow(
    "opengl lesson_4",&argc,argv);

        
    /** 注册glut的一些函?nbsp;*/
        glutReshapeFunc(glutResize);     
    //H口调整函数 使得调整后图形显CZ发生改变
        glutIdleFunc(glutIdle);          //I闲回调函数 使得在空闲时间内q行一些操?/span>
        glutDisplayFunc(glutDisplay);    //重绘函数     使得可以在窗口中l制囑Ş
        glutSpecialFunc(glutSpecial);    //Ҏ按键函数 使得实现全屏/H口切换
        /** 初始化opengl的一些操?/span>*/
        InitOpenGL();

        
    /** q入仿真循环*/
        glutMainLoop();
    }

    /** 实现头文件当中定义的l制函数 l制三角形和正方?nbsp;**/
    void glutDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT 
    | GL_DEPTH_BUFFER_BIT);

        glLoadIdentity();                   
    //先初始化单位矩?/span>
        glPushMatrix();                     //当前矩阵复制一个压入栈?q保持当前矩阵不?/span>
        
        glTranslatef(
    -1.5,0.0,-6.0);
        glRotatef(yRot,
    0.0,1.0,0.0);        //使得三角形绕y轴旋转yRot角度

        
    //军_三角形三个顶点的颜色?三角形内部各个点的颜色将会是U性插值的
        glBegin(GL_TRIANGLES);             // l制三角?/span>
            glColor3f(1.0f,0.0f,0.0f);     //使用U色l制上顶?/span>
            glVertex3f( 0.0f1.0f0.0f); //上顶?/span>
            glColor3f(0.0f,1.0f,0.0f);     //使用l色l制左下点
            glVertex3f(-1.0f,-1.0f0.0f); //左下
            glColor3f(0.0f,0.0f,1.0f);     //使用蓝色l制右下点
            glVertex3f( 1.0f,-1.0f0.0f); //右下
        glEnd();
        glPopMatrix();                     
    //恢复当前矩阵Z一ơpush时的矩阵

        glTranslatef(
    1.5f,0.0f,-6.0f);
        glRotatef(xRot,
    1.0,0.0,0.0);       //使得正方形绕x轴旋转xRot角度
        glColor3f(0.0f,0.0f,1.0f);         //当前颜色D|ؓ蓝色 l制整个正方?/span>
        glBegin(GL_QUADS);                 // l制正方?/span>
            glVertex3f(-1.0f1.0f0.0f); // 左上
            glVertex3f( 1.0f1.0f0.0f); // 右上
            glVertex3f( 1.0f,-1.0f0.0f); // 左下
            glVertex3f(-1.0f,-1.0f0.0f); // 右下
        glEnd();

        glutSwapBuffers();                 
    //强制l图命o执行l制在缓冲区交换出来
    }

    /** 实现头文件当中声明的I闲回调函数*/
    void glutIdle(void)
    {
        yRot
    +=0.2f;              //增加三角形旋转角?/span>
        xRot-=0.15f;              //减少正方形减角?/span>
        glutPostRedisplay();    //使得执行完该函数后调用重l函?/span>
    }

    最l的l果?


    末尾ȝ:
    glRotatef(angle,x,y,z) ؓ使得模型lQ意u旋{angle角度.它将会生一个旋转矩阵右乘当前矩?所以改变了当前矩阵.而ؓ了得绘制的时候左边的三角形不影响到右Ҏ方Ş的变换矩阉|在绘制三角Ş之前使用glPushMatrix()保存当前矩阵,l制完成之后使用glPopMatrix() 恢复之前的矩?当然也可以用glLoadIdentity()讄当前矩阵为单位矩늚Ҏ来实现它..

    其次,q次多了以个glIdleFunc() 注册I闲回调函数.卛_pȝ没有其他事g处理的时候将处理q个函数,使得旋{的角度不断改?

    glPostRedisplay() 使得当前H口会q行重绘..Ҏ角度的改?从而得我们看到的是一个旋转当中的动画效果

    最后将说明一点的?我曾在红宝书看到一D内?有时候ؓ了实现连l的旋{,我们可能会想到重复应用一个值很的旋{矩阵,q个会存在一个问?是误差,使得变换累积l果.我们应该摒弃q种做法.即用一个新的角度来变换.将使用如下的方?
    glLoadIdentity();
    glRotatef(new_angle,x,y,z);

    只要new_angle=old_angle+offset


    cx 2009-07-17 16:33 发表评论
    ]]>
    opengl学习 nehe opengl lesson_3http://www.shnenglu.com/acmiyou/archive/2009/07/15/90138.htmlcxcxWed, 15 Jul 2009 06:48:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90138.htmlhttp://www.shnenglu.com/acmiyou/comments/90138.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90138.html#Feedback1http://www.shnenglu.com/acmiyou/comments/commentRss/90138.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90138.html所有lesson都将Zlesson_1中头文g而写

    lesson_2?知道了如何简单的l制基本囑Ş的后,q次要学习如何使用glColor3d(f)来设|opengl状态机中的颜色.使得l制时候将采用自定义的颜色?

    #include "openglglut.h"

    /*
    ** opengl 教程W三译ֆ?br>** 在窗口的左边部分l制一个多彩的三角?它将使用qx着?br>** 在窗口的双部分l制一个蓝色的正方?它将使用单调着?br>
    */

    int main(int argc, char** argv)
    {
        
    /** 初始化窗?nbsp;q创建窗?/span>*/
        createWindow(
    "opengl lesson_3",&argc,argv);

        
    /** 注册glut的一些函?nbsp;*/
        glutReshapeFunc(glutResize);     
    //H口调整函数 使得调整后图形显CZ发生改变
        glutDisplayFunc(glutDisplay);    //重绘函数     使得可以在窗口中l制囑Ş
        glutSpecialFunc(glutSpecial);    //Ҏ按键函数 使得实现全屏/H口切换
        
        
    /** 初始化opengl的一些操?/span>*/
        InitOpenGL();

        
    /** q入仿真循环*/
        glutMainLoop();
    }


    void glutDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT 
    | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();                   
    //先初始化单位矩?/span>
        glPushMatrix();                     //当前矩阵复制一个压入栈?q保持当前矩阵不?/span>
        glTranslatef(-1.5,0.0,-6.0);

        
    //军_三角形三个顶点的颜色?三角形内部各个点的颜色将会是U性差值的
        glBegin(GL_TRIANGLES);             // l制三角?/span>
            glColor3f(1.0f,0.0f,0.0f);     //使用U色l制上顶?/span>
            glVertex3f( 0.0f1.0f0.0f); //上顶?/span>
            glColor3f(0.0f,1.0f,0.0f);     //使用l色l制左下点
            glVertex3f(-1.0f,-1.0f0.0f); // 左下
            glColor3f(0.0f,0.0f,1.0f);     //使用蓝色l制右下点
            glVertex3f( 1.0f,-1.0f0.0f); // 右下
        glEnd();
        glPopMatrix();                     
    //恢复当前矩阵Z一ơpush时的矩阵

        glTranslatef(
    1.5f,0.0f,-6.0f);
        glColor3f(
    0.0f,0.0f,1.0f);         //当前颜色D|ؓ蓝色 l制整个正方?/span>
        glBegin(GL_QUADS);                 // l制正方?/span>
            glVertex3f(-1.0f1.0f0.0f); // 左上
            glVertex3f( 1.0f1.0f0.0f); // 右上
            glVertex3f( 1.0f,-1.0f0.0f); // 左下
            glVertex3f(-1.0f,-1.0f0.0f); // 右下
        glEnd();

        glutSwapBuffers();                 
    //强制l图命o执行l制在缓冲区交换出来
    }

    最后的效果?

    末尾ȝ:

    glColor3f(d)指定openggl状态中颜色?使得l制的时候都用这个颜色?直到再次修改q个?在绘制正方Ş的可以得到这个解?
    其次, l制三角形的时?只是指定三个点的用三种不同颜色l制,Z么结果会使得三角形变成彩色的?
    其原理在于它使用L两点l制一条线D늚时?
    U段内的其他M炚w会是这两点颜色值的一个线性插?


    cx 2009-07-15 14:48 发表评论
    ]]>
    opengl学习<?gt; nehe opengl lesson_2http://www.shnenglu.com/acmiyou/archive/2009/07/15/90118.htmlcxcxWed, 15 Jul 2009 03:09:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90118.htmlhttp://www.shnenglu.com/acmiyou/comments/90118.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90118.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/90118.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90118.htmllesson_2的代码将Zlesson_1中所创徏的头文g而实?.
    其次我想说下 我ؓ什么没有将glut注册函数那块也定义成q?因ؓ有些函数我尚未实现或者尚未考虑到该如何实现,d变化?故而我它分离出来?可以很肯定的事我需要什么就注册什么函?q样也是应该来说比较清晰?

    nehe lesson_2中的是实C在窗口左边绘制一个三角Ş,在窗口右边绘制了一个正方Ş.

    #include "openglglut.h"

    /*
    ** opengl 教程W二译ֆ?br>** 在窗口的左边部分l制一个白色的三角?br>** 在窗口的双部分l制一个白色的正方?br>
    */

    int main(int argc, char** argv)
    {
        
    /** 初始化窗?nbsp;q创建窗?/span>*/
        createWindow(
    "opengl lesson_2",&argc,argv);

        
    /** 注册glut的一些函?nbsp;*/        
        glutReshapeFunc(glutResize);     
    //H口调整函数 使得调整后图形显CZ发生改变
        glutDisplayFunc(glutDisplay);    //重绘函数     使得可以在窗口中l制囑Ş
        glutSpecialFunc(glutSpecial);    //Ҏ按键函数 使得实现全屏/H口切换

        
    /** 初始化opengl的一些操?/span>*/
        InitOpenGL();

        
    /** q入仿真循环*/
        glutMainLoop();
    }


    /** 实现头文件当中定义的l制函数 l制三角形和正方?nbsp;**/
    void glutDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT 
    | GL_DEPTH_BUFFER_BIT);
        
        glLoadIdentity();                   
    //先初始化单位矩?/span>
        glPushMatrix();                    //当前矩阵复制一个压入栈?q保持当前矩阵不?/span>
        glTranslatef(-1.5,0.0,-6.0);       //左移?.5q向屏幕内部Ud6.0 在那区域M角Ş
        glBegin(GL_TRIANGLES);             // l制三角?/span>
            glVertex3f( 0.0f1.0f0.0f); // 上顶?/span>
            glVertex3f(-1.0f,-1.0f0.0f); // 左下
            glVertex3f( 1.0f,-1.0f0.0f); // 右下
        glEnd();
        glPopMatrix();                     
    //恢复当前矩阵Z一ơpush时的矩阵

        glTranslatef(
    1.5f,0.0f,-6.0f);     //右移?.5q向屏幕内部Ud6.0 在那区域M角Ş

        glBegin(GL_QUADS);                 
    // l制正方?/span>
            glVertex3f(-1.0f1.0f0.0f); // 左上
            glVertex3f( 1.0f1.0f0.0f); // 右上
            glVertex3f( 1.0f,-1.0f0.0f); // 左下
            glVertex3f(-1.0f,-1.0f0.0f); // 右下
        glEnd();

        glutSwapBuffers();                 
    //强制l图命o执行l制在缓冲区交换出来
    }

    最l显C结果ؓ:


    末尾ȝ:
                 从中我学到如何绘制opengl的基本图?三角?四边?甚至多边?
                其次q理解了glpushMatrix() glpopMatrix()的含义即使用规则{?
                glpushMatrix() 保存了当前矩?使得其后可以恢复原来的位|进行绘?br>            glpopMatrix() 恢复当前矩阵为栈矩?.

    cx 2009-07-15 11:09 发表评论
    ]]>
    opengl 学习<?gt; nehe opengl lesson_1http://www.shnenglu.com/acmiyou/archive/2009/07/15/90106.htmlcxcxWed, 15 Jul 2009 01:28:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90106.htmlhttp://www.shnenglu.com/acmiyou/comments/90106.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/15/90106.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/90106.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90106.html阅读全文

    cx 2009-07-15 09:28 发表评论
    ]]>
    opengl 学习<?gt;http://www.shnenglu.com/acmiyou/archive/2009/07/14/90075.htmlcxcxTue, 14 Jul 2009 13:38:00 GMThttp://www.shnenglu.com/acmiyou/archive/2009/07/14/90075.htmlhttp://www.shnenglu.com/acmiyou/comments/90075.htmlhttp://www.shnenglu.com/acmiyou/archive/2009/07/14/90075.html#Feedback0http://www.shnenglu.com/acmiyou/comments/commentRss/90075.htmlhttp://www.shnenglu.com/acmiyou/services/trackbacks/90075.html     在学习上Q我M是杂乱无章的学。ؓ什么呢。我一般是在需要某个理论的时候才会去q理论内部的各U详l机Ӟ当然前提必须是你对这斚w知识必须有一点的了解Q不需要了解的_深入。其实我惌也是M的一U方法吧。对于看书我向来先很_糙的浏览整书一遍,大概只看一些概念,了解q书的主要内?方向{。第二遍则是详细的理解内容,某些时候有些内定w是很有之后才有心ȝ的?/p>

         其实今天在ȝq个的时候,q不是在用opengl而是在用osg设计一个项目h物汽车R{O游类《可能应用在手机Q汽车导航上》的时候,惌vȝq的。我其实是想M图来写这份ȝ可能会更Ҏ理解?然而实在懒...

     

         在图形学的显C流E:

          三维囑Ş->模型视图变换->投媄变换->三维裁剪->视口->屏幕囑Ş昄

     

         三维->二维的变换,ȝ来理解只是三l的物体在一pd的变换之后决定了屏幕上某些像素位|的颜色倹{最后这些颜色组成了一q图甅R就是我们所看到得最l屏q二l图形了?/p>

     

         在大概了解这U流E之后,模型视图变换 无疑成为决定我们所看到的囑փ的轮廓?/p>

         模型视图变换 应该来讲是包含两个变换的:模型变换,视图变换。ؓ什么将他们合在一起呢Q?在照相机成像pȝ?若固定相Z动移动模型会 {h?/span> 固定模型不动Ud相机?/p>

         考究如下内容Q?/p>

        

         glMatrixMode(GL_MODELVIEW);

         glLoadIdentity();                   //当前矩阵讄为单位矩?/p>

         glRotatef(45.0f,0.0,0.0,1.0); //按[0.0,0.0,1.0]u旋{45?/p>

         glTranslatef(2.0,2.0,2.0);     // q移?[2.0,2.0,2.0]

         glBegin(...);                       // L些东?br>        ...
            ...
            ...
         glEnd();

     

         有两U方式理解:一U是局部坐标系的理解,一U是全局坐标pȝ理解?/p>

         如果按照上面那些内容从上C的理解的方式是局部坐标系的理?/span>。opengl变换上的实现其实是个矩阵的乘法。按照局部坐标系的理?上面代码的变换是按照q样的顺序执行的:

    先将局部坐标系lz轴旋?5度,在将局部坐标系的原点^U至[2.0,2.0,2.0]Q然后在局部坐标系内画物体?/p>

          假设 旋{步骤的矩阵ؓRQ^U部分的矩阵为T 当前矩阵为C?/p>

          new_C=old_C*R*T q是一个矩阵右乘操?/p>

          理论上来?q就是一个坐标系的变换过E,R*T q个矩阵其实是原先的坐标pd换到现在的坐标系Q这个时候原先坐标系的点p变换成p1,p1=(R*T)*p?/p>

          而按照全局坐标pȝ理解Q它的变换过E则是相反的Q这也是相当的好理解?在当前世界坐标系中画好该物体之后Q我必须它Ud到正的位置。那必须得先q移物体到[2.0,2.0,2.0],然后物体绕z轴旋?5度。这是一个相反的变换q程Q然而这个与前面的是{h?Z么?

          考虑世界坐标pM点pQ经q^UL作后 p11=T*p; 在经q旋转操作后 p1=R*P11=R*(T*p)  q是矩阵的一个左乘操?先变换的在后? 所以说new_C=(old_c*(R*(T))) 左乘 所以说q是一个等Lq程.

     

          一般来,我们考虑的时候L世界坐标p考虑旋{q移{操作的.所以在写变换的时候最好的方式是?变换步骤一直左乘,而代码中则按左乘后结果矩늚序写代码?/p>

     

          其次在理解以上的变换q程中模型变换的原理Q我们可以很好的理解gluLookAt(eye,center,up)的视囑֏换的q程Q现在只考虑模型不动Q照相机Ud的过E,且是在全局坐标pM的移动过E?

         opengl默认照相机框?是视点在原点 y轴ؓ向上方向 z轴负方向U方?/span>

     

         gluLookAt的目的在于得视点移动到eye位置 q看向center?/span>

         则gluLookAt的过E先q移至eye,而center->eye(center指向eye)则ؓz方向设ؓz(Zx,Zy,Zz),Up方向为y轴方向,y,z的叉U则为x轴方?则只需它们都旋{Cp?/span>

     

        所以这个时候模型变换矩阵就为《相对于模型来讲 相机Ud到eye{h于模型移动到-eye.

        |Xx Xy Xz  0|        |1   0   0   -eyex|

        |Yx Yy Yz  0|    *  |0   1  0    -eyey|

        |Zx  Zy Zz  0|         |0   0  1    -eyez|

        |0   0   0     1|         |0   0  0       1   |



    cx 2009-07-14 21:38 发表评论
    ]]>
    ƷһþþƷ | ij뾫Ʒþþò| ˾þۺij| ޾Ʒþþþϼ | Ʒþþþþ| ޾ҹþþþþ| 97Ʒ˾þþô߽97| þþƷ99Ӱ| þøԴƷ999| ¾þþþa| ۺϾþþƷɫ| ھƷ˾þþþӰԺ԰ | þùVһë| þþƷAV| ޹Ʒþþž| ޾Ʒһþ| 97þ㽶߿ۿ| þþþòҰ¸߳| һۺϾþù| þþƷŷƬ| þۺĻ| þþƷһ| 97Ʒ˾þþô߽97| þ91Ʒ91| 99þѹƷػ| ޾ƷþëƬ| þˬ˸߳AV | ɫþþþþۺ| Ʒþþþþþapp| þþþһëþþ| þۺ¶þü| þþþƷþþþþ | ݺۺϾþۺ88| ձþþþþĻ| þ㽶ۺɫһۺɫ88| .Ʒþþ鶹Ʒ| Ʒ99þþƷ| ˾Ʒһþ| þþþùһ| þù׾Ʒҹ| ھƷþþþþþɬ|