• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            4D星宇

            c++

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              57 隨筆 :: 0 文章 :: 39 評(píng)論 :: 0 Trackbacks

            #

            posted @ 2008-05-04 15:37 bloodbao 閱讀(163) | 評(píng)論 (1)編輯 收藏

            //Function to create a NewtonCollision from irrlicht mesh 
            NewtonCollision 
            *CreateCollisionFromMesh(NewtonWorld *nWorld, scene::IMesh *mesh) 

              
            //Get number of vertices 
              u32 nVertices 
            = 0, nMeshBuffer; 
              
            for( nMeshBuffer = 0 ; nMeshBuffer < mesh->getMeshBufferCount(); ++nMeshBuffer) 
              { 
                scene::IMeshBuffer 
            *buffer = mesh->getMeshBuffer(nMeshBuffer); 
                nVertices 
            += buffer->getVertexCount(); 
              } 

              
            // allocate block for positions of every vertex in mesh, no need to delete 
              
            // anything, the array cleans up for us. 
              core::
            array<core::vector3df> vertices; 
              vertices.reallocate(nVertices); 

              
            //Get mesh buffers and copy face vertices 
              
            for( nMeshBuffer = 0 ; nMeshBuffer < mesh->getMeshBufferCount(); ++nMeshBuffer) 
              { 
                scene::IMeshBuffer 
            *buffer = mesh->getMeshBuffer(nMeshBuffer); 

                
            // handle the irrlicht supported vertex types 
                switch(buffer
            ->getVertexType()) 
                { 
                
            case video::EVT_STANDARD: 
                  { 
                    video::S3DVertex
            * verts = (video::S3DVertex*)buffer->getVertices(); 
                    
            for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
                      vertices.push_back(verts[v].Pos); 
                  } 
                  break; 

                
            case video::EVT_2TCOORDS: 
                  { 
                    video::S3DVertex2TCoords
            * verts = (video::S3DVertex2TCoords*)buffer->getVertices(); 
                    
            for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
                      vertices.push_back(verts[v].Pos); 
                  } 
                  break; 

                
            case video::EVT_TANGENTS: 
                  { 
                    video::S3DVertexTangents
            * verts = (video::S3DVertexTangents*)buffer->getVertices(); 
                    
            for(u32 v = 0; v < buffer->getVertexCount(); ++v) 
                      vertices.push_back(verts[v].Pos); 
                  } 
                  break; 

                default: 
                  return 
            0// don't know vertex type! bail. 
                } 
              } 

              
            //Create Newton collision object 
              return NewtonCreateConvexHull(nWorld, nVertices, 
            &vertices[0].X, sizeof(core::vector3df), NULL); 
            }

            core::
            array<f32> vertices; 
            vertices.reallocate(nVertices 
            * 3); 

            // each loop should be updated 
            for(u32 v = 0; v < buffer->getVertexCount(); ++v) 

              vertices.push_back(verts[v].Pos.X); 
              vertices.push_back(verts[v].Pos.Y); 
              vertices.push_back(verts[v].Pos.Z); 


            // this should be passed to the convex hull function 
            return NewtonCreateConvexHull(nWorld, nVertices, 
            &vertices[0], sizeof(f32 * 3), NULL);
            posted @ 2008-05-04 12:20 bloodbao 閱讀(250) | 評(píng)論 (0)編輯 收藏

            IRRLICHT的實(shí)現(xiàn):
            1.波浪是如何實(shí)現(xiàn)的?
            先對(duì)每個(gè)點(diǎn)計(jì)算高度,

            void addWave(vector3df& dest, const vector3df source, f32 time

                 dest.Y 
            = source.Y +
             (sinf(((source.X
            /WaveLength) + time)) * WaveHeight) +
             (cosf(((source.Z
            /WaveLength) + time)) * WaveHeight);
            }


            然后再計(jì)算法線,
            recalculateNormals(Mesh);
            2.ATMOSphere
            太陽嘛,就是個(gè)跟隨時(shí)間移動(dòng)的BILLBOARD,邊緣最好加上霧化效果。
            3.地形編輯器代碼

            if( Terrain && !RightMouseDown && Terrain->getTriangleSelector() )
            {
            LastMousePosition.set( Device
            ->getCursorControl()->getPosition().X, Device->   getCursorControl()->getPosition().Y );
            //計(jì)算從鼠標(biāo)位置到觀察點(diǎn)的射線
            core::line3df line 
            = CollisionMgr->getRayFromScreenCoordinates( 
             core::position2d
            <s32>( LastMousePosition.X, LastMousePosition.Y ) );
            //計(jì)算以交點(diǎn)為中心,一定半徑范圍內(nèi)的點(diǎn)
            core::vector3df spherePosition;
            if( CollisionMgr->getClosestVertex( line, Terrain->getTriangleSelector(), 
             spherePosition, CurrentVertexIndex ) )
                  {
                   LeftMouseDown 
            = true;

                   
            // Get all vertices with the circle
                   SelectedTerrainVertices.clear();
                   core::vector3df intersection;
                   scene::SCollisionTriangle tri;
                   
            if( CollisionMgr->getCollisionPoint( line, Terrain->getTriangleSelector(), intersection, tri ) )
                   {
                    u32 count 
            = 0;
                    SelectedTerrainVertices.reallocate( Terrain
            ->getTriangleSelector()->getTriangleCount() );
                    Terrain
            ->getTriangleSelector()->getVerticesInRadius( SelectedTerrainVertices.pointer(), Terrain->getTriangleSelector()->getTriangleCount(), count, intersection, RedCircleRadius );
                    SelectedTerrainVertices.set_used( count );
                   }

                   return 
            true;
                  }
                 }

            posted @ 2008-05-04 12:17 bloodbao 閱讀(202) | 評(píng)論 (0)編輯 收藏

            posted @ 2008-05-01 16:40 bloodbao 閱讀(190) | 評(píng)論 (0)編輯 收藏

            posted @ 2008-05-01 11:16 bloodbao 閱讀(182) | 評(píng)論 (0)編輯 收藏

            現(xiàn)將場景編輯器測(cè)試版上傳,望廣大朋友測(cè)試,多謝!
            經(jīng)過一周的改寫,完成部分功能,這個(gè)版本非完全版。
            下載地址:http://pickup.mofile.com/7877768148587694
            共享提取碼:7877768148587694
            圖片在本博客都有!
            VISTA下測(cè)試通過!
            嗯,顯卡至少要DX9吧,下一階段把草地,水面,碰撞補(bǔ)齊!

            posted @ 2008-04-30 19:22 bloodbao 閱讀(215) | 評(píng)論 (1)編輯 收藏

                                          郁悶,重寫架構(gòu)
            IRRLICHT的SVN更新到最新版后,出現(xiàn)很多BUG,一調(diào)試就出錯(cuò)。
            原因是用到了FKEDITOR的架構(gòu),不適合我的需求,所以下定決心重寫架構(gòu),
            還要加上一些腳本支持。
            希望能盡快完工,以便找到工作。
            哎,哪家公司要我啊?
            posted @ 2008-04-26 19:53 bloodbao 閱讀(185) | 評(píng)論 (0)編輯 收藏

            各種動(dòng)作:直飛,翻轉(zhuǎn),旋轉(zhuǎn)。。。

            posted @ 2008-04-24 17:17 bloodbao 閱讀(227) | 評(píng)論 (0)編輯 收藏

            posted @ 2008-04-24 16:50 bloodbao 閱讀(131) | 評(píng)論 (0)編輯 收藏

            posted @ 2008-04-24 16:48 bloodbao 閱讀(189) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共6頁: 1 2 3 4 5 6 
            人妻少妇久久中文字幕一区二区| 久久免费视频一区| 国产精品久久久久a影院| 久久久久久久久久免免费精品 | 蜜臀av性久久久久蜜臀aⅴ| 久久久久女教师免费一区| 香港aa三级久久三级| 91久久精品国产91性色也| 色综合久久天天综合| 国产精品久久久福利| 9191精品国产免费久久| 精品久久久久久无码人妻热| 久久精品无码一区二区日韩AV| 久久国产成人亚洲精品影院| 久久国产三级无码一区二区 | 伊人久久免费视频| 91精品国产高清久久久久久91| 国产精品无码久久综合网| 久久久久国产| 久久精品国产亚洲AV香蕉| 久久精品中文无码资源站| 7国产欧美日韩综合天堂中文久久久久 | 无码人妻久久一区二区三区| 亚洲AV无码久久| 99久久精品费精品国产 | 久久综合九色欧美综合狠狠| 久久精品国产99国产精品亚洲| 久久亚洲私人国产精品vA | 久久精品a亚洲国产v高清不卡| 国内精品伊人久久久久av一坑| 超级碰久久免费公开视频| 亚洲精品美女久久久久99小说 | 久久久久亚洲av无码专区导航 | 久久免费视频一区| 欧美熟妇另类久久久久久不卡| 国产精品久久久天天影视香蕉| 99精品国产免费久久久久久下载 | 中文字幕乱码人妻无码久久| 久久精品视频网| 日本五月天婷久久网站| 中文字幕久久欲求不满|