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

Cpper
C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿
本例子源于ode自帶的例子:demo_chain2
演示的是一個(gè)由小盒子構(gòu)成的鏈子在受正弦力左右下的物理現(xiàn)象(當(dāng)然還有重力因素).
其代碼如下:
  1 //! 2010.03.03
  2 /////////////////////////////////////////////////////
  3 /// 蓋莫游戲引擎的物理引擎測(cè)試2
  4 /////////////////////////////////////////////////////  
  5 #include <GEngine/Gaimo.hpp>
  6 
  7 //! 定義立方體個(gè)數(shù) 
  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 //! 檢測(cè)碰撞回調(diào)函數(shù)
 21 static void nearCallback(void *data, dGeomID o1, dGeomID o2)
 22 {
 23    //! 獲取幾何體對(duì)于德物理對(duì)象    
 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    //! 如果物體之間發(fā)生了碰撞則關(guān)聯(lián)之 
 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     //! 初始化引擎設(shè)備并得到設(shè)備指針
 47     core::Device* device = core::InitDevice("蓋莫引擎物理場(chǎng)景測(cè)試2");
 48     //! 得到引擎場(chǎng)景指針
 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     //! 獲取全局?jǐn)z像機(jī)
 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     //! 設(shè)置空間重力加速度
 73     engine.SetGravity(0,-0.8,0);
 74     //! 設(shè)置空間平面
 75     engine.SetPlane(0,1,0,0);
 76     //! 加載碰撞檢測(cè)回調(diào)函數(shù)
 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         //! 必須確保生成關(guān)節(jié)的空間指針為空     
 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        //! 繪制網(wǎng)格 
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 //! 顯示地面網(wǎng)格
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.
需要說(shuō)明的就是函數(shù):
dJointCreateBall(world,space)
在一般情況下第二個(gè)參數(shù)也就是space必須是空值
再看其回調(diào)函數(shù):
 1 //! 檢測(cè)碰撞回調(diào)函數(shù)
 2 static void nearCallback(void *data, dGeomID o1, dGeomID o2)
 3 {
 4    //! 獲取幾何體對(duì)于德物理對(duì)象    
 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    //! 如果物體之間發(fā)生了碰撞則關(guān)聯(lián)之 
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句柄
如果為空則返回
再者說(shuō)明如果body是連接在一起的應(yīng)該如何處理
接下來(lái)局勢(shì)如何發(fā)生碰撞應(yīng)該如何處理
最后看看其關(guān)節(jié)生成和鏈接:
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);
首先是關(guān)節(jié)生成
其次是關(guān)節(jié)連接
其次是設(shè)置關(guān)節(jié)位置
ok 
posted on 2010-03-04 11:40 ccsdu2009 閱讀(1512) 評(píng)論(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>
            欧美在线日韩| 亚洲国产色一区| 欧美成人免费大片| 国产在线视频不卡二| 午夜视频在线观看一区| 亚洲欧美精品中文字幕在线| 久久av二区| 亚洲高清久久久| 欧美a级在线| 欧美精品尤物在线| 久久精品99国产精品| 久久国产88| 欧美xart系列高清| 亚洲欧美日本国产专区一区| 久久久www免费人成黑人精品| 亚洲激情欧美激情| 亚洲小视频在线观看| 亚洲第一毛片| 国产视频精品va久久久久久| 亚洲国产91精品在线观看| 国产精品私房写真福利视频| 在线精品视频在线观看高清| 国产伦精品一区二区三区视频黑人| 欧美一区高清| 欧美 日韩 国产 一区| 亚洲欧美一区二区精品久久久| 久久久久免费视频| 香蕉久久a毛片| 亚洲免费视频一区二区| 久久美女性网| 久久av红桃一区二区小说| 欧美剧在线免费观看网站| 巨乳诱惑日韩免费av| 欧美激情按摩| 性欧美1819性猛交| 亚久久调教视频| 亚洲精品中文字幕女同| 欧美国产激情| 亚洲一区二区视频| 欧美精品久久久久久久| 女人色偷偷aa久久天堂| 一区二区三区亚洲| 伊人久久大香线蕉综合热线| 亚洲欧美卡通另类91av| 香蕉国产精品偷在线观看不卡| 韩国视频理论视频久久| 亚洲一区二区三区免费观看| 日韩一级欧洲| 美女性感视频久久久| 久久视频在线免费观看| 午夜日韩电影| 久久久久久久综合色一本| 国产精品免费电影| 欧美偷拍另类| 一区二区av| 亚洲在线播放| 欧美激情bt| 欧美一级日韩一级| 牛牛国产精品| 亚洲国产精品久久久久秋霞蜜臀 | 欧美日韩国内自拍| 欧美人与性动交cc0o| 国产精品视频免费观看www| 欧美亚州韩日在线看免费版国语版| 国产精品第一区| 亚洲欧美乱综合| 久久国产精品电影| 香港久久久电影| 美玉足脚交一区二区三区图片| 在线观看日韩av| 中文在线不卡| 亚洲一区二区三区久久| 久久久亚洲高清| 亚洲人成网在线播放| 亚洲自拍偷拍福利| 久久aⅴ国产紧身牛仔裤| 欧美激情a∨在线视频播放| 一本色道久久综合亚洲精品婷婷| 亚洲欧美日韩另类精品一区二区三区| 亚洲午夜一区| 欧美韩日一区| 亚洲欧美三级伦理| 最新日韩在线| 亚洲自拍偷拍麻豆| 亚洲国产天堂久久国产91| 亚洲自拍偷拍视频| 欧美一区二区啪啪| 国产精品成人一区二区| 久久婷婷久久| 亚洲免费一区二区| 久久精品国产99精品国产亚洲性色 | 欧美黄色一级视频| 欧美日韩伦理在线免费| 亚洲欧美一区二区视频| 欧美高潮视频| 国产精品成人播放| 国内精品久久国产| 久久先锋资源| 久久国产精品久久久久久久久久| 亚洲一区三区视频在线观看| 国产精品午夜国产小视频| 国产嫩草一区二区三区在线观看 | 欧美在线电影| 亚洲卡通欧美制服中文| 欧美91精品| 欧美日韩免费精品| 日韩视频在线观看国产| 性欧美大战久久久久久久久| 欧美精品一区二区三区在线看午夜 | 亚洲视频一区在线观看| 亚洲免费av网站| 久久麻豆一区二区| 日韩视频一区二区三区在线播放免费观看 | 日韩亚洲成人av在线| 狂野欧美激情性xxxx| 国内久久精品视频| 久久久久久久尹人综合网亚洲| 日韩一级黄色av| 欧美午夜欧美| 欧美一区二区三区免费在线看| 中文在线资源观看网站视频免费不卡 | 精品91久久久久| 国产精品揄拍500视频| 亚洲乱码国产乱码精品精98午夜| 欧美有码在线视频| 亚洲女女做受ⅹxx高潮| 国产精品一区久久久| 亚洲综合好骚| 亚洲午夜久久久久久尤物| 国产精品亚洲网站| 影音先锋国产精品| 亚洲电影av| 久久精彩免费视频| 久久久久久亚洲精品中文字幕| 狠狠干成人综合网| 欧美国产日韩一区| 欧美日韩精品三区| 午夜精品久久久久久久久久久久久 | 亚洲性感美女99在线| 欧美大片一区二区| 久久亚洲色图| 亚洲美女黄色片| 亚洲午夜羞羞片| 激情成人综合| 亚洲欧洲视频在线| 国产精品久久久久久久午夜 | 亚洲乱码国产乱码精品精98午夜| 亚洲激情在线激情| 国产精品三级久久久久久电影| 久久精品一区二区国产| 麻豆成人综合网| 亚洲免费视频观看| 久久亚洲国产精品日日av夜夜| 亚洲乱码国产乱码精品精天堂| 中文欧美在线视频| 亚洲国产精品久久久久久女王| 一本色道**综合亚洲精品蜜桃冫 | 欧美日韩国产页| 欧美在线短视频| 免费成人av| 亚洲宅男天堂在线观看无病毒| 欧美一区视频| 一区二区三区免费在线观看| 欧美亚洲一级| 中文精品视频| 每日更新成人在线视频| 午夜国产欧美理论在线播放| 免费成人黄色| 久久久久国色av免费看影院| 欧美日本不卡| 一区二区三区亚洲| 亚洲三级免费| 亚洲素人一区二区| 亚洲高清免费| 亚洲自拍偷拍麻豆| 亚洲精品乱码| 久久久福利视频| 小嫩嫩精品导航| 欧美精品综合| 欧美激情一区二区三区蜜桃视频| 国产精品久久久久国产精品日日| 久久精品一区四区| 一区二区三区高清视频在线观看| 久久免费视频这里只有精品| 99精品欧美一区| 精品91久久久久| 国产精品影音先锋| 欧美一区二区精品久久911| 欧美成人精品不卡视频在线观看| 久久久国产精品亚洲一区| 国产精品高清在线观看| 亚洲国语精品自产拍在线观看| 影音先锋日韩有码| 久久九九国产精品| 快播亚洲色图| 一区二区三区在线免费视频| 欧美激情a∨在线视频播放| 久久久久久久久久久久久久一区 | 欧美韩国在线| 亚洲大胆在线|