锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久影院,国产日韩久久久精品影院首页,久久久WWW成人免费毛片http://www.shnenglu.com/brilyf/ zh-cnWed, 07 May 2025 18:14:29 GMTWed, 07 May 2025 18:14:29 GMT60linux浣跨敤Ogre+SDL榪涜娓告垙寮鍙?/title><link>http://www.shnenglu.com/brilyf/archive/2008/10/19/64422.html</link><dc:creator>brilyf</dc:creator><author>brilyf</author><pubDate>Sun, 19 Oct 2008 09:11:00 GMT</pubDate><guid>http://www.shnenglu.com/brilyf/archive/2008/10/19/64422.html</guid><wfw:comment>http://www.shnenglu.com/brilyf/comments/64422.html</wfw:comment><comments>http://www.shnenglu.com/brilyf/archive/2008/10/19/64422.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/brilyf/comments/commentRss/64422.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/brilyf/services/trackbacks/64422.html</trackback:ping><description><![CDATA[鎴戦夋嫨鐨勬槸ubuntu8.04 + codeblocks8.02鐨勫紑鍙戠幆澧冦?br>Ogre鐢ㄧ殑鏄?.4.5鐨勭増鏈?br>涓嬮潰鏄敤SDL榪涜鐨勪竴涓畝鍗曠殑浠g爜.<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include </span><span style="color: #000000;"><</span><span style="color: #000000;">Ogre.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">iostream</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">SDL</span><span style="color: #000000;">/</span><span style="color: #000000;">SDL.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">SDL</span><span style="color: #000000;">/</span><span style="color: #000000;">SDL_syswm.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">SDL</span><span style="color: #000000;">/</span><span style="color: #000000;">SDL_events.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> std;<br></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Ogre;<br></span><span style="color: #0000ff;">class</span><span style="color: #000000;"> AppListener : </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> FrameListener<br>{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>    AppListener( RenderWindow </span><span style="color: #000000;">*</span><span style="color: #000000;">_win ) : win( _win )<br>    {<br>    }<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>    </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> frameStarted(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> FrameEvent</span><span style="color: #000000;">&</span><span style="color: #000000;"> evt)<br>    {<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( </span><span style="color: #000000;">!</span><span style="color: #000000;">FrameListener::frameStarted( evt ) )<br>            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br><br>            SDL_PollEvent( </span><span style="color: #000000;">&</span><span style="color: #0000ff;">event</span><span style="color: #000000;"> );<br>        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br>    }<br>    </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> frameEnded(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> FrameEvent</span><span style="color: #000000;">&</span><span style="color: #000000;"> evt)<br>    {<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( </span><span style="color: #000000;">!</span><span style="color: #000000;">FrameListener::frameEnded( evt ) )<br>            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br><br>        SDL_PollEvent( </span><span style="color: #000000;">&</span><span style="color: #0000ff;">event</span><span style="color: #000000;"> );<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( </span><span style="color: #0000ff;">event</span><span style="color: #000000;">.type </span><span style="color: #000000;">==</span><span style="color: #000000;"> SDL_KEYDOWN )<br>        {<br>            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( </span><span style="color: #0000ff;">event</span><span style="color: #000000;">.key.keysym.sym </span><span style="color: #000000;">==</span><span style="color: #000000;"> SDLK_ESCAPE )<br>                </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>        }<br>        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br>    }<br></span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br>    RenderWindow </span><span style="color: #000000;">*</span><span style="color: #000000;">win;<br>    SDL_Event </span><span style="color: #0000ff;">event</span><span style="color: #000000;">;<br>};<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;"> parseWindowGeometry( Ogre::ConfigOptionMap</span><span style="color: #000000;">&</span><span style="color: #000000;"> config, unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&</span><span style="color: #000000;"> width, unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&</span><span style="color: #000000;"> height, </span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&</span><span style="color: #000000;"> fullscreen );<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    Root </span><span style="color: #000000;">*</span><span style="color: #000000;">root </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Root( </span><span style="color: #000000;">"</span><span style="color: #000000;">plugins.cfg</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br>    RenderWindow </span><span style="color: #000000;">*</span><span style="color: #000000;">win;<br><br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( </span><span style="color: #000000;">!</span><span style="color: #000000;">root</span><span style="color: #000000;">-></span><span style="color: #000000;">showConfigDialog() )<br>        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( SDL_WasInit( SDL_INIT_VIDEO ) </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;"> )<br>    {<br>        unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> height </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">300</span><span style="color: #000000;">, width </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">400</span><span style="color: #000000;">;<br>        </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> fullscreen;<br>        parseWindowGeometry( root</span><span style="color: #000000;">-></span><span style="color: #000000;">getRenderSystem()</span><span style="color: #000000;">-></span><span style="color: #000000;">getConfigOptions(), width, height, fullscreen );<br><br>        root</span><span style="color: #000000;">-></span><span style="color: #000000;">initialise( </span><span style="color: #0000ff;">false</span><span style="color: #000000;"> );<br><br>        SDL_Init( SDL_INIT_VIDEO );<br>        SDL_SetVideoMode( width, height </span><span style="color: #000000;">/</span><span style="color: #000000;"> </span><span style="color: #000000;">2</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;"> );<br>        SDL_WM_SetCaption( </span><span style="color: #000000;">"</span><span style="color: #000000;">OgreTest</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">ogretest</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br><br>        SDL_SysWMinfo info;<br>        SDL_VERSION(</span><span style="color: #000000;">&</span><span style="color: #000000;">info.version);<br><br>        SDL_GetWMInfo(</span><span style="color: #000000;">&</span><span style="color: #000000;">info);<br><br>        std::</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> dsp(</span><span style="color: #000000;">&</span><span style="color: #000000;">(DisplayString(info.info.x11.display)[</span><span style="color: #000000;">1</span><span style="color: #000000;">]));<br>        std::vector</span><span style="color: #000000;"><</span><span style="color: #000000;">Ogre::String</span><span style="color: #000000;">></span><span style="color: #000000;"> tokens </span><span style="color: #000000;">=</span><span style="color: #000000;"> Ogre::StringUtil::split(dsp, </span><span style="color: #000000;">"</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>        Ogre::NameValuePairList misc;<br>        std::</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> s </span><span style="color: #000000;">=</span><span style="color: #000000;"> Ogre::StringConverter::toString((</span><span style="color: #0000ff;">long</span><span style="color: #000000;">)info.info.x11.display);<br>        s </span><span style="color: #000000;">+=</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> tokens[</span><span style="color: #000000;">1</span><span style="color: #000000;">] </span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>        s </span><span style="color: #000000;">+=</span><span style="color: #000000;"> Ogre::StringConverter::toString((</span><span style="color: #0000ff;">long</span><span style="color: #000000;">)info.info.x11.window);<br>        misc[</span><span style="color: #000000;">"</span><span style="color: #000000;">parentWindowHandle</span><span style="color: #000000;">"</span><span style="color: #000000;">] </span><span style="color: #000000;">=</span><span style="color: #000000;"> s;<br>        win </span><span style="color: #000000;">=</span><span style="color: #000000;"> root</span><span style="color: #000000;">-></span><span style="color: #000000;">createRenderWindow(</span><span style="color: #000000;">"</span><span style="color: #000000;">ogre</span><span style="color: #000000;">"</span><span style="color: #000000;">, width, height, fullscreen, </span><span style="color: #000000;">&</span><span style="color: #000000;">misc);<br><br>        </span><span style="color: #808080;">///</span><span style="color: #008000;">we need to set the window to be active by ourselves, since GLX by default sets it to false, but then activates it upon recieving some X event (which it will never recieve since we'll use SDL).<br>        </span><span style="color: #808080;">///</span><span style="color: #008000;">see OgreGLXWindow.cpp</span><span style="color: #808080;"><br></span><span style="color: #000000;">        win</span><span style="color: #000000;">-></span><span style="color: #000000;">setActive(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br>        win</span><span style="color: #000000;">-></span><span style="color: #000000;">setAutoUpdated(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br>    }<br>    </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>    {<br>        win </span><span style="color: #000000;">=</span><span style="color: #000000;"> root</span><span style="color: #000000;">-></span><span style="color: #000000;">initialise( </span><span style="color: #0000ff;">true</span><span style="color: #000000;"> );<br>    }<br><br>    root</span><span style="color: #000000;">-></span><span style="color: #000000;">addFrameListener( </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> AppListener( win ) );<br>    root</span><span style="color: #000000;">-></span><span style="color: #000000;">startRendering();<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">void</span><span style="color: #000000;"> parseWindowGeometry( Ogre::ConfigOptionMap</span><span style="color: #000000;">&</span><span style="color: #000000;"> config, unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&</span><span style="color: #000000;"> width, unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&</span><span style="color: #000000;"> height, </span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&</span><span style="color: #000000;"> fullscreen )<br>{<br>    Ogre::ConfigOptionMap::iterator opt </span><span style="color: #000000;">=</span><span style="color: #000000;"> config.find( </span><span style="color: #000000;">"</span><span style="color: #000000;">Video Mode</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( opt </span><span style="color: #000000;">!=</span><span style="color: #000000;"> config.end() )<br>    {<br>        Ogre::String val </span><span style="color: #000000;">=</span><span style="color: #000000;"> opt</span><span style="color: #000000;">-></span><span style="color: #000000;">second.currentValue;<br>        Ogre::String::size_type pos </span><span style="color: #000000;">=</span><span style="color: #000000;"> val.find( </span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;"> );<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( pos </span><span style="color: #000000;">!=</span><span style="color: #000000;"> Ogre::String::npos )<br>        {<br>            width </span><span style="color: #000000;">=</span><span style="color: #000000;"> Ogre::StringConverter::parseUnsignedInt( val.substr( </span><span style="color: #000000;">0</span><span style="color: #000000;">, pos ) );<br>            height </span><span style="color: #000000;">=</span><span style="color: #000000;"> Ogre::StringConverter::parseUnsignedInt( val.substr( pos </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;"> ) );<br>        }<br><br>        opt </span><span style="color: #000000;">=</span><span style="color: #000000;"> config.find( </span><span style="color: #000000;">"</span><span style="color: #000000;">Full Screen</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( opt </span><span style="color: #000000;">!=</span><span style="color: #000000;"> config.end() )<br>        {<br>            fullscreen </span><span style="color: #000000;">=</span><span style="color: #000000;"> ( opt</span><span style="color: #000000;">-></span><span style="color: #000000;">second.currentValue </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">Yes</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br>        }<br>    }<br>}<br></span></div> 鍘熺悊寰堢畝鍗曘?br>鍥撅細(xì)<br><img alt="" src="http://www.shnenglu.com/images/cppblog_com/brilyf/Screenshot.png"><br><br><img src ="http://www.shnenglu.com/brilyf/aggbug/64422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/brilyf/" target="_blank">brilyf</a> 2008-10-19 17:11 <a href="http://www.shnenglu.com/brilyf/archive/2008/10/19/64422.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenGL涓敤FreeImagehttp://www.shnenglu.com/brilyf/archive/2008/09/29/63033.htmlbrilyfbrilyfMon, 29 Sep 2008 05:14:00 GMThttp://www.shnenglu.com/brilyf/archive/2008/09/29/63033.htmlhttp://www.shnenglu.com/brilyf/comments/63033.htmlhttp://www.shnenglu.com/brilyf/archive/2008/09/29/63033.html#Feedback5http://www.shnenglu.com/brilyf/comments/commentRss/63033.htmlhttp://www.shnenglu.com/brilyf/services/trackbacks/63033.html闃呰鍏ㄦ枃

brilyf 2008-09-29 13:14 鍙戣〃璇勮
]]>
鎰熻阿鎮(zhèn)?鍑虹杞﹀徃鏈篬鐨朅82038]http://www.shnenglu.com/brilyf/archive/2008/09/28/62951.htmlbrilyfbrilyfSun, 28 Sep 2008 00:52:00 GMThttp://www.shnenglu.com/brilyf/archive/2008/09/28/62951.htmlhttp://www.shnenglu.com/brilyf/comments/62951.htmlhttp://www.shnenglu.com/brilyf/archive/2008/09/28/62951.html#Feedback8http://www.shnenglu.com/brilyf/comments/commentRss/62951.htmlhttp://www.shnenglu.com/brilyf/services/trackbacks/62951.html    鍗堝鏃跺垎錛屽垎澶栧瘋闈?rùn)锛屽枾鍤d簤瀹㈡簮鐨勫満闈㈠湪杩欐椂宸插彨鍋滃Q岀湡鐨勫緢闅炬墦鍒拌濺錛屾洿浣曞喌鎴戣繖涓甫琛鐨勪激鍛橈紵
    鎴戜嬌鍔插湴鎸ユ墜緇欎粬浠紝浠栦滑璧拌繎鐪嬪埌鎴戞祦琛鐨勬墜錛岃繛鎷涘懠閮戒笉鎷涘懠錛屽埄椹蛋浜猴紝鑰屼綘涓嶄竴鏍鳳紝浣犱笉鐩鎬俊榪蜂俊銆?br>    浣犳病鏈夊憡璇夋垜浣犵殑鍚嶅瓧錛岀敋鑷寵繛濮撻兘娌℃湁錛屽洜涓鴻姝f祦錛屼綘欏句笉鍙?qiáng)澶氳涓鍙ヨ瘽銆?br>    灝嗘垜甯﹀埌浜?jiǎn)鏈榪戠殑鍖婚櫌鎸備簡(jiǎn)鎬ヨ瘖錛屽綋鎴戣浠橀挶鐨勬椂鍊欙紝浣犲嵈鎺ㄨ緸浜?jiǎn)銆傜劧鍚庤繛鎷涘懠娌℃墦灝辮蛋浜?jiǎn)锛寴q欎竴鍒囧ソ鍍忛兘鏄湡鐨勩傛垜鐪熺殑寰堥毦鐩鎬俊榪欎釜閲戦挶鐨勭ぞ浼?xì)杩樹細(xì)鏈墭q欐牱鐨勪竴浣嶅ソ浜恒傛垜鐪熺殑涓嶇煡閬撴庝箞鎰熻阿錛屾瘯绔熸垜絀峰鐢熶竴涓備綘鎸芥晳鐨勪笉鍙槸鎴戠殑涓鍙墜錛屾洿澶氱殑鏄垜鐨勬ⅵ鎯籌紝浣滀負(fù)涓涓▼搴忓憳瑕佺敤鎴戠殑鎵嬫潵鍒涢犳湭鏉ャ傛垜鐜板湪涓嶈兘緇欎綘鐗╄川鏂歸潰鐨勬劅璋紝涔熶笉鑳戒負(fù)浣犲仛浜涗粈涔堛備絾鏄垜鐪熺殑鍙戣嚜鍐呭績(jī)甯屾湜浣犲ソ浜轟竴鐢熷鉤瀹夛紝鍏ㄥ騫哥銆傛垜涓鐩存兂鍔炴硶鍘繪劅璋㈡?zhèn)ㄥQ屼粖澶╂垜灝遍氳繃blog鍚с備負(fù)浣犵紱忥紒錛侊紒



brilyf 2008-09-28 08:52 鍙戣〃璇勮
]]>
OpenGL鑳屾櫙鍥為【綃囦互鍙?qiáng)瀹炵庮C竴涓建榪圭悆[arcball]http://www.shnenglu.com/brilyf/archive/2008/09/27/62889.htmlbrilyfbrilyfSat, 27 Sep 2008 05:57:00 GMThttp://www.shnenglu.com/brilyf/archive/2008/09/27/62889.htmlhttp://www.shnenglu.com/brilyf/comments/62889.htmlhttp://www.shnenglu.com/brilyf/archive/2008/09/27/62889.html#Feedback7http://www.shnenglu.com/brilyf/comments/commentRss/62889.htmlhttp://www.shnenglu.com/brilyf/services/trackbacks/62889.htmlOpenGL鍙戝睍鐨勫巻鍙詫細(xì)
    OpenGL鐨勫墠韜槸SGI鍏徃鎵寮鍙戠殑IRIS GL鍥懼艦鍑芥暟搴擄紝OpenGL涓嶆槸涓縐嶇紪紼嬭璦錛岃屾槸涓涓洿鍍廋榪愯鏃跺嚱鏁板簱銆侽penGL鏄竴涓紑鏀劇殑宸ヤ笟鏍囧噯錛岃櫧鐒跺畠鏄敱SGI棣栧垱錛屼絾瀹冪殑鏍囧噯涓嶆槸鎺у埗鍦⊿GI鎵嬩腑錛岃屾槸鐢監(jiān)penGL浣撶郴緇撴瀯瀹℃牳濮斿憳浼?ARB)鎺岀銆侫RB鏄敱SGC銆丏EC銆両BM銆両ntel鍜孧icrosoft絳夎憲鍚嶅叕鍙鎬簬1992騫村垱绔嬶紝鍚庢潵闄嗙畫鍔犱簡(jiǎn)nVidia銆丄TI絳夊浘褰㈣姱鐗囬鍩熺殑宸ㄦ搸銆侫RB姣?騫村紑涓嬈′細(xì)錛屽OpenGL瑙勮寖榪涜緇存姢鍜屾敼鍠勶紝騫跺嚭鍙拌鍒掑OpenGL鏍囧噯榪涜鍗囩駭錛屼嬌OpenGL涓鐩翠笌鏃朵唬淇濇寔鍚屾銆?br>    2006騫達(dá)紝SGI鍏徃鎶奜penGL鏍囧噯鐨勬帶鍒朵粠ARB縐諱氦緇橩hronos灝忕粍錛?a >www.khronos.org錛夈侹hronos鏄竴涓敱鎴愬憳鎻愪緵璧勯噾鐨勮涓氬崗浼?xì)锛屼笓娉ㄤ簬寮鏀懼獟浣撴爣鍑嗙殑鍒涘緩鍜岀淮鎶ゃ傜洰鍓岾hronos璐熻矗OpenGL鐨勫彂灞曞拰鍗囩駭銆?br>濡傚浘錛?br>
涓嶰penGL鐩稿叧鐨勫嚱鏁板簱錛?br>    OpenGL宸ュ叿鍑芥暟搴?GLU)鍖呭惈浜?jiǎn)涓浜涘嚱鏁幫紝瀹冧滑鍒╃敤浣庡眰鐨凮penGL鍑芥暟鏉ユ墽琛屼竴浜涚壒瀹氱殑浠誨姟銆傝瀹氱壒瀹氱殑鐭╅樀錛坓luLookAt絳?錛孫penGL涓殑GLU蹇呴』浠lu寮澶淬?br>瀵逛簬紿楀彛緋葷粺鐨勫姛鑳戒篃榪涜浜?jiǎn)鎵╁睍锛屽鏋滃湪linux涓嬩嬌鐢▁紿楀彛鐨勮瘽錛屼嬌鐢℅LX鍑芥暟搴擄紝鑰屽繀欏諱互glX寮澶淬傚浜庡井杞潵璇達(dá)紝浠gl寮澶淬侷BM鐨刼s/2鑰岃█錛孭GL鏄樉紺虹鐞嗗櫒涓嶰penGL涔嬮棿鐨勬帴鍙o紝浠gl寮澶淬傚浜嶢pple,AGL鏄敮鎸丱penGL鐨勭郴緇熸帴鍙o紝鎵鏈夌殑AGL鍑芥暟閮戒互agl寮澶淬?br>    OpenGL瀹炵敤宸ュ叿搴? GLUT,OpenGL Utility Toolkit )鏄疢ark Kilgrad鎵緙栧啓鐨勪竴涓嫭绔嬩簬紿楀彛緋葷粺鐨勫伐鍏峰寘錛屽畠鐨勭洰鐨勬槸闅愯棌涓嶅悓紿楀彛緋葷粺鎵甯︽潵鐨勫鏉傛с侴LUT鏄笅涓鑺傜殑涓婚錛孏LUT鍑芥暟浠lut寮澶淬?br>鍦∣penGL涓?鎴戜滑甯哥敤鍒拌建榪圭悆,涓嬮潰灝卞杞ㄨ抗鐞冩潵鍋氱偣涓滆タ:
褰撴垜浠瀵熶笁緇寸┖闂寸殑鐗╀綋鏈夊緢澶氱鏂規(guī)硶璁╀竴涓敤鎴鋒潵閫夋嫨涓涓鐐癸紝浣嗘槸鎴戣涓鴻建榪圭悆鏄渶濂界殑銆?br>杞ㄨ抗鐞冪殑鍩烘湰鍘熺悊鏄細(xì)
鍒涘緩涓涓洿緇曠潃鐗╀綋鐨勭悆錛岀劧鍚庣敤鎴峰崟鍑葷悆涓婇潰鐨勪竴涓偣錛屽啀鎷栧姩榪欎釜鐐瑰埌涓涓綅緗紙鍦ㄥ睆騫曚笂錛夛紝璁╁璞¤窡鐫榪欎釜鍚戦噺鏃嬭漿銆?br>瀵繪壘榧犳爣浣嶇疆錛?br>絎竴姝ュ氨鏄鎵懼埌榧犳爣鐨勪綅緗紝鎴戜滑鍙互閫氳繃鑾峰緱瑙嗚鍙樻崲鐭╅樀銆?br>鍙互閫氳繃涓嬮潰鐨勫艦寮忔潵鑾峰緱鐘舵佺煩闃碉細(xì)

GLdouble projection_matrix[16= 1000010000100001 };
GLdouble modelview_matrix[
16= 1000010000100001 };
int viewport_matrix[4= 00640480 };

glGetDoublev( GL_PROJECTION_MATRIX, projection_matrix );
glGetDoublev( GL_MODELVIEW, modelview_matrix );
glGetIntegerv( GL_VIEWPORT, viewport_matrix );

鎴戜滑鑾峰彇榪欎簺鐭╅樀鍚庨潰浣跨敤錛屾垜浠彲浠ヤ嬌鐢ㄤ粬浠潵澶勭悊榧犳爣杈撳叆錛岄紶鏍囧潗鏍噈ouse_x鍜宮ouse_y錛屽彲浠ラ氳繃gluUnProject鏉ヨ幏寰楅紶鏍囦笅闈㈠満鏅腑鐨勪竴涓偣銆?br>

GLdouble x, y, z;
gluUnProject( mouse_x, mouse_y, 
             modelview_matrix, 
             projection_matrix,
             viewport_matrix,
             
&x, &y, &z );

涓鏃﹀満鏅腑鐨勮繖涓偣琚壘鍒幫紝闂鐨勫叧閿氨鏄緩绔嬩竴涓粠鎽勮薄鏈轟綅緗埌榪欎釜鐐圭殑鍏夌嚎錛岀劧鍚庡鎵捐繖涓厜綰垮拰榪欎釜杞ㄨ抗鐞冪殑浜ょ偣銆傝繖涓厜綰挎槸E + t * ( P - E )鐨勭偣闆嗭紝榪欓噷E鏄溂鐫涚偣浣嶇疆錛孭鏄満鏅腑鐨勯偅涓偣錛宼鏄竴涓彉閲忥紝鑰岃建榪圭悆鏄疭鐨勭偣闆嗭紝榪欓噷S^2 = r錛宺鏄建榪圭悆鐨勫崐寰勩傚鏋淪 = E + t * ( P - E )錛岄偅涔堝瓨鍦ㄤ竴涓偣鏃㈠湪杞ㄨ抗鐞冧笂錛屽張鍦ㄥ厜綰夸笂錛岃繖鏍鳳紝鎴戜滑鍙互閫氳繃甯﹀叆娉曟帹鍑猴細(xì)( E + t * ( P - E ) ) ^ 2 = r銆傛垜浠煡閬撳悜閲廍銆丳浠ュ強(qiáng)鏍囬噺r錛屾墍浠ュ彲浠ユ帹鍑烘潵t錛岃繖鏄竴涓簩嬈℃柟紼嬶紝濡傛灉鏃犺В錛岃鏄庡厜綰垮拰杞ㄨ抗鐞冩棤浜ょ偣銆傚鏋滄湁2涓В錛屽簲褰撻夋嫨鏈闈犺繎鐪肩潧鐨勯偅涓В銆?br>
杞ㄨ抗鐞冪殑鏃嬭漿闂錛?br>濡傛灉浣犲崟鍑?yán)L嫋鎷借建榪圭悆涓婄殑涓涓偣鍒板彟涓涓綅緗紝璇ュ浣曞仛鍛紵
涓涓畝鍗曠殑鏂規(guī)硶錛屽仛璧風(fēng)偣鍒扮粨鏉熺偣鐨剎涔樹負(fù)鏃嬭漿杞達(dá)紝鐒跺悗瀵繪壘灝嗚鏃嬭漿鐨勮搴︼紝榪欎釜鍙互閫氳繃鍋氱偣涔樺緱鍒般?br>
璁$畻鏃嬭漿鐭╅樀錛?br>鎴戜滑閫氳繃鍥涘厓鏁版潵瑙e喅瀹冦傚洓鍏冩暟鏄簩緇村鏁扮殑鎵╁睍錛岀壒鍒傚悎鍋氭棆杞?br>濡傛灉鎴戜滑鏈変竴涓崟浣嶅悜閲? x, y, z )錛屾垜浠彲浠ラ氳繃涔樹互鏃嬭漿瑙掑害鐨勬寮︾殑涓鍗婅幏寰楀洓鍏冩暟鐨剎, y, z閮ㄥ垎鐨勪慨姝e鹼紝w鏄敱鏃嬭漿瑙掔殑鐨勪綑寮︾殑涓鍗婂喅瀹氥傚ぇ瀹剁煡閬撴墍鏈夌殑榪欎箞鍊煎彲浠ヨ緇勮榪涗竴涓棆杞煩闃碉細(xì)

* w + x *- y * y - z * z,  2 * x * y + 2 * w * z,          2 * x * z - 2 * w * y,          0 
2 * x * y - 2 * w * z,         w * w - x * x + y * y - z * z,  2 * y * z + 2 * w * x,          0 
2 * x * z + 2 * w * y,         2 * y * z - 2 * w * x,          w * w - x * x - y * y + z * z,  0 
0,                             0,                              0,  w * w + x * x + y * y + z * z



 



brilyf 2008-09-27 13:57 鍙戣〃璇勮
]]>
Ogre鍦ㄦ父鎴忓紑鍙戜腑閫愬撫鏇存柊http://www.shnenglu.com/brilyf/archive/2008/09/24/62714.htmlbrilyfbrilyfWed, 24 Sep 2008 14:11:00 GMThttp://www.shnenglu.com/brilyf/archive/2008/09/24/62714.htmlhttp://www.shnenglu.com/brilyf/comments/62714.htmlhttp://www.shnenglu.com/brilyf/archive/2008/09/24/62714.html#Feedback2http://www.shnenglu.com/brilyf/comments/commentRss/62714.htmlhttp://www.shnenglu.com/brilyf/services/trackbacks/62714.html鏈鏂扮殑Ogre紼沖畾鐗堟湰鏄?.6.0RC1[shoggoth],鍦?.6.0鐗堟湰涓璒greFrameListener.h涓殑綾籉rameListener澶氬嚭浜?jiǎn)涓涓彨virtual bool frameRenderingQueued( const FrameEvent& evt ) { return true; }鐨勫嚱鏁般傝繖涓嚱鏁板拰virtual bool frameStarted( const FrameEvent& evt ) { return true; }鏈夋槑鏄劇殑鍖哄埆銆?br>鍦ㄦ簮浠g爜涓frameStarted鐨勬敞閲婃槸錛?br>        /** Called when a frame is about to begin rendering.
  @remarks
   This event happens before any render targets have begun updating.
            @return
                True to go ahead, false to abort rendering and drop
                out of the rendering loop.
        */
澶т綋緲昏瘧鏄細(xì)
褰撲竴甯у皢瑕佸紑濮嬫覆鏌撶殑鏃跺欒璋冪敤銆?br>榪欎釜浜嬩歡鍙戠敓鍦ㄦ墍鏈夋覆鏌撶洰鏍囧凡緇忓紑濮嬫洿鏂頒箣鍓嶃?br>鑰屽湪婧愪唬鐮佷腑瀵筬rameRenderingQueued鐨勬敞閲婃槸錛?br>  /** Called after all render targets have had their rendering commands
   issued, but before render windows have been asked to flip their
   buffers over.
  @remarks
   The usefulness of this event comes from the fact that rendering
   commands are queued for the GPU to process. These can take a little
   while to finish, and so while that is happening the CPU can be doing
   useful things. Once the request to 'flip buffers' happens, the thread
   requesting it will block until the GPU is ready, which can waste CPU
   cycles. Therefore, it is often a good idea to use this callback to
   perform per-frame processing. Of course because the frame's rendering
   commands have already been issued, any changes you make will only
   take effect from the next frame, but in most cases that's not noticeable.
  @return
   True to continue rendering, false to drop out of the rendering loop.
  */
緲昏瘧涓猴細(xì)
鍦ㄦ墍鏈夋覆鏌撶洰鏍囧凡緇忎紶鍑轟粬浠殑娓叉煋鍛戒護(hù)涔嬪悗錛屽茍涓斿湪娓叉煋紿楀彛琚姹傚幓閲婃斁浠栦滑鐨勫撫涔嬪墠銆?br>榪欎釜浜嬩歡鐨勭敤閫斿叾瀹炴槸涓轟簡(jiǎn)鎶奊PU澶勭悊鐨勬覆鏌撳懡浠ゆ帹鍏ラ槦鍒楋紝榪欎簺鍙姳璐逛竴鐐瑰姛澶幓瀹屾垚錛?br>鑰屽氨榪欎竴孌墊椂闂碿pu鍙互琚敤鏉ュ鐞嗕竴浜涙湁鐢ㄧ殑浜嬫儏銆備竴鏃﹂噴鏀懼撫榪欎釜鏃墮棿鍙戠敓錛岃繖鏉$嚎紼嬭姹傚皢瑕佽
鍫靛鐩村埌GPU鍑嗗濂戒簡(jiǎn)錛岃繖鍙兘嫻垂浜?jiǎn)cpu鐨勬覆鏌撴椂闂達(dá)紝鐒惰岋紝浣滀負(fù)鍥炶皟鍑芥暟鍘婚愬撫澶勭悊涔熸槸涓涓ソ娉ㄦ剰銆?br>褰撶劧鍥犱負(fù)甯х殑娓叉煋鍛戒護(hù)宸茬粡琚斁鍑猴紝浠諱綍浣犲仛鐨勬敼鍙樺彧瀵逛笅涓甯ф湁鏁堬紝浣嗘槸澶у鏁版儏鍐典笅榪欎笉鏄緢鏄庢樉鐨勩?br>
鍔犲叆浜?jiǎn)杩欎釜鍑芥曨C篃璇存槑浜?jiǎn)Ogre1.6.0瀵筭pu閲嶈浜?jiǎn)銆?br>鍦╫gre鑷甫鐨勪緥瀛愪腑錛屽嚑涔庨兘鏄敤examplelistener鏉ュ鐞嗘父鎴忓驚鐜傝繖鏄庢樉涓嶇鍚堟瘮杈冨ぇ鐐圭殑娓告垙寮鍙戙傝屽鏋?br>浣犳兂瑕佸湪澶у瀷娓告垙涓簲鐢ㄨ繖涓父鎴忓驚鐜傛垜鎰熻棣栧厛搴旇鏈変竴涓崟浠剁殑甯х洃鍚郴緇熼氳繃娓告垙涓誨簲鐢ㄧ▼搴忔潵鍒濆鍖栥傜劧鍚庡氨鏄敤璁捐妯″紡涓殑Bridge鐨勫皢澹版槑鍜屾墽琛屽垎寮鐨勫姛鑳芥潵澶勭悊榪欎釜鏂規(guī)硶銆?br>浼唬鐮侊細(xì)

//涓涓儴浠剁殑綾?/span>
class BrilyfWidgets
{
    
bool frameRenderingQueued( const FrameEvent& evt ); 
    
}
;


//綾葷殑鍓嶅悜澹版槑
class BrilyfApplication;

class BrilyfListenSystem : public Singleton<BrilyfListenSystem>public FrameListener
{
    
bool frameRenderingQueued( const FrameEvent& evt ) 
    
{
        
//涓浜涚郴緇熺己鐪佺殑璁劇疆
        
        
//鍏抽敭閮ㄥ垎
        BrilyfApplication::getSingletonPtr()->frameRenderQueued( const FrameEvent& evt );
        BrilyfApplication::getSingletonPtr()
->frameEnded( const FrameEvent& evt );
    }

    
bool frameEnded( const FrameEvent& evt );    
}
;

//鎵鏈夌殑鍏朵粬涓浜涢儴浠剁殑鍒濆鍖栭兘瑕侀氳繃BrilyfApplication,瀹冨氨鏄父鎴忕殑涓葷閬擄紝鎺у埗鐫鎵鏈夐儴浠剁殑鐢熷懡鍛ㄦ湡錛屾彁渚涗簡(jiǎn)
//frameRenderingQueued鍜宖rameEnded鐨勬帴鍙d緵鍏朵粬鐨勯儴浠舵潵濉厖銆?/span>
class BrilyfApplication : public Singleton<BrilyfApplication>
{
    
//涓浜涘浜庡崟浠跺垵濮嬪寲鐨勫鐞?/span>
    
    
    
//瀵瑰簲鐨勪簨浠?/span>
    bool frameRenderingQueued( const FrameEvent& evt ) 
    

        
for ( int i = 0; i < 16; i++ )
            BrilyfWidgets.frameRenderingQueued(  );
    }

    
bool frameEnded( const FrameEvent& evt );

    BrilyfWidgets mWidgets[
16];
}
;



brilyf 2008-09-24 22:11 鍙戣〃璇勮
]]>
日本精品一区二区久久久| 99久久99久久| 久久99国产精一区二区三区| 久久婷婷五月综合97色直播| 区久久AAA片69亚洲| 久久精品国产亚洲AV蜜臀色欲| 久久99国产精品久久99小说 | 蜜臀av性久久久久蜜臀aⅴ| 亚洲午夜无码久久久久| 久久精品无码午夜福利理论片| AV无码久久久久不卡网站下载| 97久久香蕉国产线看观看| 国产成人香蕉久久久久| 少妇人妻综合久久中文字幕| 亚洲AV无码1区2区久久| 国产精品内射久久久久欢欢| 亚洲国产精品成人AV无码久久综合影院| 国产免费福利体检区久久| 久久精品人妻中文系列| 日韩精品国产自在久久现线拍| 三级片免费观看久久| 亚洲综合伊人久久大杳蕉| 精品欧美一区二区三区久久久| 亚洲精品国产自在久久| 久久99精品久久久久久久久久| 久久99精品久久久久久9蜜桃| 亚洲午夜精品久久久久久浪潮 | 国产精品成人无码久久久久久| 色偷偷91久久综合噜噜噜噜| 久久精品国产亚洲AV嫖农村妇女| 66精品综合久久久久久久| 久久天天躁狠狠躁夜夜躁2014| 久久人爽人人爽人人片AV| 无码日韩人妻精品久久蜜桃| 久久人妻少妇嫩草AV无码蜜桃| 久久精品麻豆日日躁夜夜躁| 午夜精品久久影院蜜桃| 久久精品嫩草影院| 国产69精品久久久久APP下载| 精品综合久久久久久88小说| 国产成人久久AV免费|