青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
本例子源于ode自帶的例子:demo_chain2
演示的是一個由小盒子構成的鏈子在受正弦力左右下的物理現象(當然還有重力因素).
其代碼如下:
  1 //! 2010.03.03
  2 /////////////////////////////////////////////////////
  3 /// 蓋莫游戲引擎的物理引擎測試2
  4 /////////////////////////////////////////////////////  
  5 #include <GEngine/Gaimo.hpp>
  6 
  7 //! 定義立方體個數 
  8 #define NUM 9
  9 
 10 #define SIDE 2.0f
 11 #define MASS 1.0f 
 12 
 13 core::PhysicsEngine<dWorldID,dSpaceID,dJointGroupID,dGeomID> engine;
 14 core::PhysicsBody<dBodyID,dGeomID,1> object[NUM];
 15 dJointID joint[NUM-1];
 16 
 17 //! 盒子表面紋理
 18 int   cubeid;
 19 
 20 //! 檢測碰撞回調函數
 21 static void nearCallback(void *data, dGeomID o1, dGeomID o2)
 22 {
 23    //! 獲取幾何體對于德物理對象    
 24    dBodyID b1 = dGeomGetBody(o1);
 25    dBodyID b2 = dGeomGetBody(o2);
 26    //! 如果物體是相連的則返回之 
 27    if(b1 && b2 && dAreConnected(b1,b2)) 
 28       return;
 29  
 30    dContact contact;
 31    contact.surface.mode = 0;
 32    contact.surface.mu = dInfinity;
 33    //! 如果物體之間發生了碰撞則關聯之 
 34    if(dCollide (o1,o2,1,&contact.geom,sizeof(dContactGeom))) 
 35    {
 36       dJointID c = dJointCreateContact(engine.GetWorld(),engine.GetContactGroup(),&contact);
 37       dJointAttach (c,b1,b2);
 38    }
 39 }  
 40 
 41 void ShowGrid();
 42 void SimLoop();
 43 
 44 int main(int argc, char **argv)
 45 {   
 46     //! 初始化引擎設備并得到設備指針
 47     core::Device* device = core::InitDevice("蓋莫引擎物理場景測試2");
 48     //! 得到引擎場景指針
 49     core::RefPtr<core::SceneManager> scenemanager = device->GetSceneManager();
 50     //! 得到引擎資源指針
 51     core::ResourceManager* resourcemanager = device->GetResourceManager();
 52  
 53     //! 獲取盒子圖形和紋理
 54     core::RefPtr<core::Image>   cubeimage = resourcemanager->GetImage("cube","..\\image//tile.tga");
 55     core::RefPtr<core::Texture> cubetexture = resourcemanager->GetTexture("cube",cubeimage);     
 56     cubetexture->Bind();   
 57     cubeid = cubetexture->GetTextureId();
 58 
 59     //! 獲取全局攝像機
 60     core::RefPtr<core::Camera> camera = scenemanager->GetGlobalCamera(Vector3f(30,11,30),
 61                                                                       Vector3f(0,0,0),
 62                                                                       Vector3f(0,1,0));
 63     camera->SetViewport(0,0,640,480);  
 64     camera->SetPerspective(50.0f,640.0f/480.0f,0.1f,1000.0f);                                                                  
 65     glClearDepth(1.0f);                                            
 66     glDepthFunc(GL_LEQUAL);                                       
 67     glEnable(GL_DEPTH_TEST);
 68     glEnable(GL_CULL_FACE);   
 69     glShadeModel(GL_SMOOTH);                                    
 70     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   
 71 
 72     //! 設置空間重力加速度
 73     engine.SetGravity(0,-0.8,0);
 74     //! 設置空間平面
 75     engine.SetPlane(0,1,0,0);
 76     //! 加載碰撞檢測回調函數
 77     engine.SetCollideCallBack(&nearCallback);
 78  
 79     for(int i=0; i<NUM; i++
 80     {
 81         dMass m;    
 82         object[i].body = dBodyCreate(engine.GetWorld());
 83         dReal k = i*SIDE;
 84         dBodySetPosition(object[i].body,k,k+0.8,k);
 85         dMassSetBox(&m,1,SIDE,SIDE,SIDE);
 86         dMassAdjust(&m,MASS);
 87         dBodySetMass(object[i].body,&m);
 88         dBodySetData(object[i].body,(void*)i);
 89         object[i].geom[0= dCreateBox(engine.GetSpace(),SIDE,SIDE,SIDE);
 90         dGeomSetBody(object[i].geom[0],object[i].body);
 91     }
 92     for(int i=0; i< NUM-1; i++
 93     {
 94         //! 必須確保生成關節的空間指針為空     
 95         joint[i] = dJointCreateBall(engine.GetWorld(),NULL);
 96         dJointAttach(joint[i],object[i].body,object[i+1].body);
 97         dReal k = (i+0.5)*SIDE;
 98         dJointSetBallAnchor(joint[i],k,k+0.8,k);
 99     }   
100    
101     BEGIN_LOOP(device)
102        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);            
103        glLoadIdentity();
104        camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,1000.0f);
105        camera->Render();   
106        //! 繪制網格 
107        ShowGrid();
108        SimLoop();      
109     END_LOOP(device)
110    
111     device->Close();
112     device->Drop();
113 
114     return 0;
115 }
116 
117 void SimLoop()
118 {
119     static double angle = 0;
120     angle += 0.05;
121     dBodyAddForce(object[NUM-1].body,0,3*(sin(angle)+1.0),0);
122     
123     engine.Simulation(); 
124   
125     for (int i=0; i<NUM; i++)
126     {   
127         dReal sides[3];
128         const dReal *pos;
129         const dReal *mat;
130         dGeomBoxGetLengths(object[i].geom[0], sides);
131         float dsides[] = {sides[0],sides[1],sides[2]};
132         pos = dGeomGetPosition(object[i].geom[0]);
133         float dpos[] = {pos[0],pos[1],pos[2]};
134         mat = dGeomGetRotation(object[i].geom[0]);
135         float dmat[] = {mat[0],mat[1],mat[2], mat[3],
136                         mat[4],mat[5],mat[6], mat[7],
137                         mat[8],mat[9],mat[10],mat[11]};
138         core::Render::RenderCube(cubeid,dpos,dmat,dsides);
139     }
140 }
141 
142 //! 顯示地面網格
143 void ShowGrid()
144 {   
145     glPushAttrib(GL_CURRENT_BIT); 
146     glPushMatrix();                 
147     glColor3f(0,0,1);
148     glBegin(GL_QUADS);
149             glTexCoord2f(0.0f,0.0f);
150             glVertex3i(-50,0,-50);     
151             glTexCoord2f(1.0f0.0f);
152             glVertex3i(50,0,-50);         
153             glTexCoord2f(1.0f1.0f);
154             glVertex3i(50,0,50); 
155             glTexCoord2f(0.0f1.0f);
156             glVertex3i(-50,0,50); 
157     glEnd();    
158 
159     for(float i = -50; i <= 50; i += 1)
160     {
161         glBegin(GL_LINES);
162             glVertex3f(-500, i);
163             glVertex3f(500, i);
164             glVertex3f(i, 0-50);
165             glVertex3f(i, 050);
166         glEnd();
167     }
168     glPopMatrix();    
169     glPopAttrib();
170 }
171 

顯示圖片如下:

2.
需要說明的就是函數:
dJointCreateBall(world,space)
在一般情況下第二個參數也就是space必須是空值
再看其回調函數:
 1 //! 檢測碰撞回調函數
 2 static void nearCallback(void *data, dGeomID o1, dGeomID o2)
 3 {
 4    //! 獲取幾何體對于德物理對象    
 5    dBodyID b1 = dGeomGetBody(o1);
 6    dBodyID b2 = dGeomGetBody(o2);
 7    //! 如果物體是相連的則返回之 
 8    if(b1 && b2 && dAreConnected(b1,b2)) 
 9       return;
10  
11    dContact contact;
12    contact.surface.mode = 0;
13    contact.surface.mu = dInfinity;
14    //! 如果物體之間發生了碰撞則關聯之 
15    if(dCollide (o1,o2,1,&contact.geom,sizeof(dContactGeom))) 
16    {
17       dJointID c = dJointCreateContact(engine.GetWorld(),engine.GetContactGroup(),&contact);
18       dJointAttach (c,b1,b2);
19    }
20 }  
其一般描述就是先有幾何體獲取其body句柄
如果為空則返回
再者說明如果body是連接在一起的應該如何處理
接下來局勢如何發生碰撞應該如何處理
最后看看其關節生成和鏈接:
1   
2         joint[i] = dJointCreateBall(engine.GetWorld(),NULL);
3         dJointAttach(joint[i],object[i].body,object[i+1].body);
4         dReal k = (i+0.5)*SIDE;
5         dJointSetBallAnchor(joint[i],k,k+0.8,k);
首先是關節生成
其次是關節連接
其次是設置關節位置
ok 
posted on 2010-03-04 11:40 ccsdu2009 閱讀(1512) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久亚洲一区二区三区四区| 欧美精品久久久久久久久老牛影院| 性欧美18~19sex高清播放| 亚洲级视频在线观看免费1级| 在线观看一区| 亚洲日本乱码在线观看| 一区二区日韩| 欧美亚洲一级| 欧美88av| 国产精品99久久久久久久vr| 亚洲欧美另类在线| 久久精品久久99精品久久| 久久天堂成人| 欧美三级特黄| 精品不卡一区二区三区| 日韩视频永久免费| 久久成人综合视频| 最新国产の精品合集bt伙计| 99热免费精品在线观看| 午夜精品久久久久久久久久久| 欧美伊久线香蕉线新在线| 免费国产自线拍一欧美视频| 欧美午夜精品伦理| 伊人天天综合| 欧美亚洲三区| 亚洲精品女av网站| 亚洲欧美中文字幕| 欧美精品免费播放| 国内精品**久久毛片app| 一本大道久久a久久综合婷婷| 久久精品国产亚洲一区二区三区| 亚洲人成网站在线播| 亚洲欧美日韩精品久久| 欧美人与禽猛交乱配视频| 伊人成综合网伊人222| 亚洲网站在线观看| 亚洲国产午夜| 久久一区国产| 国产一区成人| 香蕉久久夜色精品国产使用方法| 欧美大胆a视频| 欧美一区二区日韩| 国产精品国码视频| 一二三区精品福利视频| 亚洲成色777777女色窝| 久久成人精品视频| 国产欧美在线观看一区| 久久九九电影| 亚洲国产精品久久久久| 亚洲综合首页| 国产精品www.| 亚洲视频中文| 亚洲精品国产欧美| 欧美承认网站| 亚洲第一区中文99精品| 久久久久一本一区二区青青蜜月| 在线亚洲自拍| 国产精品久久激情| 亚洲综合三区| 亚洲午夜在线观看| 国产精品久久久久秋霞鲁丝 | 亚洲综合丁香| 国产精品毛片大码女人| 亚洲直播在线一区| 亚洲小视频在线| 国产精品扒开腿做爽爽爽软件| 一本到12不卡视频在线dvd| 亚洲日本国产| 欧美视频中文字幕在线| 亚洲欧美日韩网| 亚洲视频欧洲视频| 国产裸体写真av一区二区| 欧美专区福利在线| 久久久久久一区| 亚洲欧洲视频在线| 亚洲麻豆视频| 国产精品一区二区三区四区| 欧美在线观看视频一区二区| 欧美一区二区视频在线观看| 伊人成年综合电影网| 女主播福利一区| 欧美日韩成人网| 欧美亚洲一区二区在线观看| 欧美影院一区| 亚洲精品国产精品国自产观看浪潮| 亚洲激情小视频| 国产精品久久波多野结衣| 亚欧美中日韩视频| 久久婷婷影院| 亚洲一区免费看| 久久精品国产第一区二区三区最新章节 | 久久久国产精品亚洲一区 | 久久综合电影| 亚洲视频福利| 久久久国际精品| 一本色道**综合亚洲精品蜜桃冫| 亚洲免费在线视频一区 二区| 亚洲精品中文字幕女同| 欧美日韩精品一二三区| 欧美一区亚洲二区| 国产精品国产三级国产专播精品人| 日韩一区二区精品在线观看| 亚洲免费高清| 国产午夜精品理论片a级大结局 | 夜夜嗨av一区二区三区| 夜夜嗨av一区二区三区四季av | 性色av香蕉一区二区| 亚洲第一页自拍| 一区二区三区久久| 亚洲国产视频直播| 亚洲欧美日韩第一区| 亚洲免费观看高清在线观看| 欧美一区二区女人| 亚洲视频精品在线| 欧美成人在线免费视频| 久久久久88色偷偷免费| 欧美视频三区在线播放| 亚洲国产91| 国产在线不卡精品| 亚洲小说欧美另类婷婷| 亚洲日本成人网| 久久精品免费观看| 欧美一区三区三区高中清蜜桃| 欧美伦理91i| 欧美成人综合在线| 一区在线观看视频| 欧美一级理论性理论a| 亚洲综合第一页| 欧美视频二区| 国产精品99久久不卡二区| 中日韩视频在线观看| 欧美精品videossex性护士| 免费美女久久99| 依依成人综合视频| 久久久人成影片一区二区三区 | 黄色精品网站| 久久精品一区二区三区四区| 久久成人亚洲| 国内精品久久久| 久久精彩视频| 理论片一区二区在线| 激情偷拍久久| 久久夜色精品国产欧美乱| 美女精品自拍一二三四| 在线观看日韩精品| 六十路精品视频| 亚洲国产毛片完整版 | 亚洲激情视频网站| 欧美成人午夜激情视频| 亚洲电影一级黄| 国产精品五月天| 一区二区三区|亚洲午夜| 久久综合影视| 亚洲高清视频在线| 久久久久一区二区三区| 久久精品官网| 亚洲电影欧美电影有声小说| 亚洲裸体视频| 欧美日韩综合久久| 亚洲欧美日韩精品久久久久| 久久久国际精品| 亚洲福利视频免费观看| 欧美高清视频一二三区| 99re视频这里只有精品| 欧美在线电影| 91久久国产精品91久久性色| 欧美韩国日本综合| 亚洲午夜激情在线| 久久久女女女女999久久| 亚洲精品久久久久久久久久久| 欧美日韩伊人| 久久精品二区三区| 亚洲三级电影全部在线观看高清| 午夜久久美女| 亚洲国产成人精品久久| 国产精品v片在线观看不卡| 久久黄色级2电影| 亚洲精品久久久久久久久| 欧美在线一二三| 亚洲另类在线视频| 国产亚洲精品久久久| 欧美日韩高清免费| 久久久精品视频成人| 夜夜嗨网站十八久久| 免费欧美日韩| 欧美一级久久久| 一区二区三区四区五区精品| 国产一区二区三区不卡在线观看| 欧美韩日精品| 久久久久久亚洲精品不卡4k岛国| 一区二区三区偷拍| 亚洲电影观看| 久热国产精品| 久久久福利视频| 性做久久久久久免费观看欧美| 99精品国产一区二区青青牛奶| 伊人久久大香线| 好吊日精品视频| 国产日韩一区| 国产精品进线69影院|