編譯bullet
㈠ Sweating Bullets (2004 Digital Remaster) 歌詞
歌曲名:Sweating Bullets (2004 Digital Remaster)
歌手:Megadeth
專輯:Greatest Hits: Back To The Start (Digital Only)
Megadeth - Sweating Bullets汗水浸濕彈頭
編譯:jion
Hello me ... Meet the real me嗨,我……來會會真的我
And my misfits way of life還有我一團糟的生活
A dark black past is my過去漆黑一片
Most valued possessions生命毫無價值
Hindsight is always 20-20馬後炮倒是靈光
But looking back it's still a bit fuzzy回想那些只言片語
Speak of mutually assured destruction?似曾狂言毀滅對方?
Nice story ... Tell it to Reader's Digest !!!故事不錯……看這胡言亂語誰能領會!!!
Feeling paranoid就像個妄想狂
True enemy or false friend?真實的敵人還是虛偽的朋友?
Anxiety's attacking me, and焦慮將我侵襲
My air is getting thin玩命喘著粗氣
I'm in trouble for the things我陷入了麻煩
I haven't got to yet卻不知我做了什麼
I'm chomping at the bit and my我嚼著舌頭
Palms are getting wet, sweating bullets手心在冒汗,浸濕了彈頭
Hello me ... It's me again嗨,我……我又來了
You can sube, but never tame me管你使什麼手段,別想把我馴服
It gives me a migraine headache你讓我頭痛預裂
Thinking down to your level被你牽著鼻子走
Yea, just keep on thinking it's my fault盡管把錯誤歸咎於我
And stay an inch or two outta kicking distance站在一旁等著瞧吧
Mankind has got to know總有石破天驚的一天
His limitations你試試忍耐的極限!
Feeling claustrophobic幽閉與恐懼占據了心靈
Like the walls are closing in圍牆逼近眼前
Blood stains on my hands and手上滿是鮮血
I don't know where I've been我不知我身在何處
I'm in trouble for the things我陷入了麻煩
I haven't got to yet卻不知我做了什麼
I'm sharpening the axe, and my我磨著斧子
Palms are getting wet, sweating bullets手心在冒汗,浸濕了彈頭
SOLO
Well, me ... It's nice talking to myself不錯,我……和自己聊天挺有意思
A credit to dementia精神分裂的好處
Some day you too will know my pain總有一天你也要感受這痛苦
And smile its black tooth grin咧著黑牙傻笑
If the war inside my head腦中永不停歇的爭斗
Won't take a day off I'll be dead終將害我死去
My icy fingers claw your back我用冰冷手指鉗住你脖子
Here I come again我又來了
Feeling paranoid就像個偏執狂
True enemy or false friend? 真實的敵人還是虛偽的朋友?
Anxiety's attacking me, and焦慮將我侵襲
And my air is getting thin玩命喘著粗氣
Feeling claustrophobic幽閉與恐懼占據了心靈
Like the walls are closing in圍牆逼近眼前
Blood stains on my hands and手上滿是鮮血
I don't know where I've been我不知我身在何處
Once you committed me你們將我投入獄中
Now you've acquitted me現在又要判我無罪
Claiming validity判決有效
For your stupidity為了你等的愚行
I'm chomping at the bit我嚼起舌頭
I'm sharpening the axe我磨起斧子
Here I come again, whoa!我又來了,哇!
Sweating bullets汗水浸濕了彈頭
http://music..com/song/2585698
㈡ flash as3.0初級問題
因為 Event.target 返回類型是 Object類型,雖然這里確實返回的是MovieClip,但這只是因為 MovieClip 是由 Object 類繼承來的,MovieClip能強制轉換成Object而反之則不能,所以把e.target賦給MovieClip類型的obj的時候,在嚴謹模式下會發生編譯錯誤
解決方法有兩個
一個是直接去掉 var obj:MovieClip = e.target; 里的MovieClip,改成:
var obj = e.target;
另一個方法就是取消嚴謹模式,方法是選擇 文件--->發布設置
選擇Flash標簽,點擊「腳本:ActionScript 3.0」右邊的「設置」按鈕,消去「錯誤:嚴謹模式」前的勾
=======================================
LS的同學...嚴謹模式只是檢查的e.target的定義類型Object和要賦給的obj的變數類型不匹配,而且無法隱式轉換而已...
㈢ 緊急求助,請問如何在android 系統中通過ndk內嵌c版bullet物理引擎主要是如何編譯bullet源代碼...
http://blog.csdn.net/vagrxie/article/details/5928695
自己去SCDN看看吧
㈣ emscripten能不能直接編譯ll中間代碼
Emscripten是Mozilla的開發人員Alon Zakai所開發的一個獨特LLVM後端,可以將LLVM中間碼編譯成javaScript,大大簡化了現有代碼在 Web時代的重用。
和Google Chrome嘗試通過自有的Native Client在Web中利用現有C/C++庫的方式不同,Mozilla尋求了一條普適性更強的解決方案。
Emscripten並非通常的LLVM後端,本身使用JavaScript寫成。它可以將任何通過LLVM 前端(比如 C/C++ Clang)生成的LLVMIR中間碼編譯成JavaScript,從而顯著降低移植現有代碼庫到Web環境的損耗。
目前Emscripten已經比較成熟,准備發布2.0版本。很多大型的項目已經可以使用Emscripten轉換為JavaScript了,比如Python、Ruby、Lua和Doom。
根據今年5月份的演示中用Firefox的測試結果顯示,通過Emscripten 1.0得出的JavaScript在未經優化的情況,在不同的測試中比gcc -O3的原始C/C++代碼約慢了0.89到3.75 倍左右。Alon表示在使用了類型推測等優化後性能會有進一步提升。
Alon Zakai在LLVM郵件列表中關於Emscripten的說明。這里有一個使用Emscripten轉換後的Bullet/WebGL物理引擎演示。
㈤ 怎麼在一個對象數組中寫不同類得對象 希望能具體寫出.
在Visual Studio .NET 2008環境中編譯、運行通過,使用VC++開發:
#include "stdafx.h"
#include "iostream"
using namespace std;
//抽象基類CRole
class CRole
{
protected:
char *name;
public:
CRole(char *name)
{
this->name = name;
}
~CRole()
{
this->name = NULL;
}
virtual void printInfo() = 0;
};
//飛機類
class CPlane : public CRole
{
public:
CPlane(char *name):CRole(name){}
void printInfo()
{
cout<<"CPlane\t"<<name<<endl;
}
};
//坦克類
class CTank : public CRole
{
public:
CTank(char *name):CRole(name){}
void printInfo()
{
cout<<"CTank\t"<<name<<endl;
}
};
//子彈類
class CBullet : public CRole
{
public:
CBullet(char *name):CRole(name){}
void printInfo()
{
cout<<"CBullet\t"<<name<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CRole *arr[15]; //3架飛機、2部坦克,10顆子彈
int i;
arr[0] = new CPlane("殲10 1號");
arr[1] = new CPlane("殲11 1號");
arr[2] = new CPlane("殲10 2號");
arr[3] = new CTank("99式 1號");
arr[4] = new CTank("96式 1號");
arr[5] = new CBullet("5.45mm 1號");
arr[6] = new CBullet("5.8mm 1號");
arr[7] = new CBullet("5.45mm 2號");
arr[8] = new CBullet("5.8mm 2號");
arr[9] = new CBullet("5.45mm 3號");
arr[10] = new CBullet("5.8mm 3號");
arr[11] = new CBullet("5.45mm 4號");
arr[12] = new CBullet("5.8mm 4號");
arr[13] = new CBullet("5.45mm 5號");
arr[14] = new CBullet("5.8mm 5號");
for(i=0; i<15; i++)
{
arr[i]->printInfo();
}
return 0;
}
㈥ 後綴是個什麼概念
文件名後綴的含義
說起來Windows工作界面下的文件名簡直是隨心所欲,比如:某編輯部的2000年工作計劃。文件名即可用中文直接表達,而且長度最長可達256個字元,讓人看起來真是一目瞭然。然而在Windows環境中,安裝的軟體中卻大量存在著類似CALENDAR.EXE、GAMES.GRP等等的文件名,這又是為什麼呢?原來這些文件名都是根據DOS環境的文件名命名規則而定的。
DOS環境下的文件名
在DOS下,文件名採用8+3結構,即:最長8位的文件名,由小數點分隔後再跟上最長3位的後綴名,如:READ.ME、SETUP.EXE,一般情況下文件名不允許使用漢字,只能由字母、數字和一些符號組成。如READ.ME用中文理解就是「讀我」,即提示用戶在使用軟體前先看看這個文件的內容,以獲取更多的提示信息。而更重要的是,DOS下規定用後綴名來區分各種不同的文件。
在DOS下最容易遇到的首先是可執行文件,後綴名有兩類:*.exe、*.com(此處的*表示文件名任意),它們是由匯編語言或其它高級語言編出的程序經過編譯後直接在DOS下運行的文件。有時由於軟體功能多、內存偏小,不能一次性全部調入內存還可能有同文件名的ovl文件,如ws.exe、ws.ovl。另外還有一種文件可以直接運行,*.bat,即批處理文件,其中有許多命令或可執行文件名,主要用於提高工作效率,其中最有用的是Autoexec.bat,這個文件在開機時會被自動執行(自動執行在英文中就是Automatically execute)。而另外一種可以載入但不能直接運行的文件即是系統擴展管理文件*.sys(sys即系統system),它主要提供某些非標准設備如滑鼠、擴充內存等的驅動程序,如mouse.sys、himem.sys。為了統一管理還專門規定了一個config.sys的文本文件來一次性地在開機時自動調入這些必需的設備驅動程序,這些文件一旦被誤刪或換名或被病毒侵襲則將直接導致系統工作不正常。
DOS下字處理產生的文件原本是可以不用後綴的,但人們常用*.txt表示(txt即文本text)。被所有的平台和所有應用程序支持。而為了管理方便,人們也可以用自己的名字做後綴來表示是自己建的文本文件,如我輸入的很多文章即為*.mcj,為了便於用戶在意外刪掉原文件的情況下能盡快恢復原文件,許多字處理系統都提供了一種自動備份的功能,如我第二次編輯JIHUA.MCJ時(JIHUA:計劃的漢語拼音),系統會先拷貝一份原文件為JIHUA.BAK。使用具有特殊格式功能的字處理軟體,如求伯君先生早年推出的WPS,就會規定其後綴為.wps,用以標識是用WPS生成的文本文件。當使用字處理軟體編輯高級語言程序時,後綴通常為相應語言的前三個字母(如:*.BAS即BASIC語言源程序,*.PAS為PASCAL語言程序,*.FOR為Fortran語言程序,*.C即為C語言,*.ASM即為匯編語言程序)。 伴隨著可執行文件常附有以下幾類文件:*.HLP即幫助文件(help)、*.CFG即配置文件(config)、*.DAT即數據文件(data)、*.LOG即日誌文件(log)、*.TMP為臨時文件(temporal)。
Windows環境下的文件名
絕大多數DOS文件名後綴在Windows下繼續有效,但Windows本身也引出了許多種嶄新的後綴名,如:*.drv為設備驅動程序(Driver)、*.fon和*.fot都是字型檔文件、*.grp為分組文件(Group)、*.ini為初始化信息文件 (Initiation)、*.pif為DOS環境下的可執行文件在Windows下執行時所需要的文件格式、*.crd即卡片文件(Card)、*.rec即記錄器宏文件(Record)、*.wri即文本文件(Write),它是字處理write.exe生成的文件、*.doc和*.rtf也是文本文件(Document),它們是Word產生的文件、*.cal為日歷文件、*.clp是剪貼板中的文件格式、*.htm和 *.html即主頁文件、*.par為交換文件、*.pwl為口令文件(Password)等等。
圖像文件名後綴進入多媒體世界後,大家會看到各種各樣精彩的圖片,會發現許多種後綴名。的確,由於各個公司在開發圖形有關的軟體時都自製標准,導致今日在圖形方面有太多的格式,以下就是常見的幾種格式:
首先是一種點陣圖文件格式,它是一組點(像素)組成的圖像,它們由圖像程序生成或在掃描圖像時創建。主要有Windows點陣圖(.BMP):由Microsoft公司開發,它被Windows和Windows NT平台及許多應用程序支持。支持32位顏色,用於為Windows界面創建圖標的資源文件格式,游標(.CUR、.DLL、.EXE):資源文件格式,用於創建Windows界面的游標。OS/2點陣圖(.BMP):Microsoft公司和IBM開發的點陣圖文件格式。它為各種操作系統和應用程序所支持。支持壓縮,最大的圖像像素為64000×64000。畫筆(.PCX):由Zsoft公司推出,它對圖像數據也進行了壓縮,可由PCX生傘S糜赬indows的畫筆。支持24位顏色,最大圖像像素是64000×64000。支持壓縮。圖形交換格式(.GIF): ( Graphics Interchage Format):由Compu Serve創建,它能以任意大小支持圖畫,通過壓縮可節省存儲空間,還能將多幅圖畫存在一個文件中。支持256色,最大圖像像素是64000×64000。
Kodak Photo CD(.PCD):Eastman Kodak所開發的點陣圖文件格式,被所有的平台所支持,PCD支持24位顏色,最大的圖像像素是2048×3072,用於在CD-ROM上保存照片。
Adobe Photoshop(.PSD):Adobe Photoshop的點陣圖文件格式,被Macintosh和MS Windows平台所支持,最大的圖像像素是30000×30000,支持壓縮,廣泛用於商業藝術。
Macintosh繪畫(.MAC):Apple公司所開發的點陣圖文件格式。被Macintosh平台所支持,僅支持單色原圖,最大圖像像素是576×720。支持壓縮,主要用於在Macintosh圖形應用程序中保存黑白圖形和剪貼畫片。
動畫文件的後綴名
動畫文件格式用於保存包含動畫框架中的圖形信息。主要有:Autodesk FLIC(.FLC):即.FLI,Autodesk Animator和AnimatorPro的動畫文件格式。支持256色,最大的圖像像素是64000×64000,支持壓縮。廣泛用於動畫圖形中的動畫序列、計算機輔助設計和計算機游戲應用程序。不大適合製作真實世界圖像動畫。
MacPICTS(.PCS,.PIC):Macromedia開發的動畫文件格式,為Macintosh應用程序使用。支持256色,支持壓縮,用於保存動畫數據,是Quick Time的前身。
Microsoft資源互換文件格式,TIFF(.AVD):Microsoft公司開發的動畫文件格式,被Windows、Windows NT平台和OS/2多媒體應用程序所支持,支持256色和壓縮,用於在多媒體應用程序中保存音頻、視頻和圖形信息。
MPEG(.MPEG):國際標准化組織的運動圖像專家小組開發的動畫文件格式。被所有平台和Xing Technologies MPEG播放器及其它應用程序所支持,支持壓縮,最大圖像像素是4095×4094×30幀/每秒。用於編碼音頻、視頻、文本和圖形數據。
Quick Time(.QTM):Apple計算機公司開發的動畫文件格式。被Apple Macintosh和Microsoft Windows平台所支持,支持25位顏色,最大圖像像素是64000×64000,支持壓縮,用於保存音頻和運動視頻信息。
聲音文件的後綴名
聲音文件格式是用於保存數字音頻信息的。它們主要有:
AIFF(.AIF):這是Apple計算機公司開發的聲音文件格式,被Macintosh平台和應用程序所支持。支持壓縮。
Amiga聲音(.SVX):Commodore所開發的聲音文件格式,被Amiga平台和應用程序所支持,不支持壓縮。
MAC聲音(.SND):Apple計算機公司開發的聲音文件格式,被Macintosh平台和多種Macintosh應用程序所支持,支持某些壓縮。
MIDI(.MID):國際MIDI協會開發的聲音文件格式,被Windows平台和許多應用程序所支持,用於為樂器創建數字聲音。
聲霸(.VOC):Creative Labs公司開發的聲音文件格式,被Windows和DOS平台所支持,支持壓縮。
WAVE(.WAV):微軟公司用作Windows平台上保存音頻信息的資源格式。
壓縮文件的後綴名
為了提高存儲效率,許多公司都推出了壓縮數據的方法和相應的軟體,這類文件的使用主要通過壓包和解包軟體來進行,主要的後綴有:?arj、*.rar、*.lzh、*.jar。還有一些專用的壓縮文件,如:*.ex_、*.dl_、*.d3_、*.cab等。
資料庫類文件的後綴名
在Dbase、FoxBase、Foxpro系列軟體的環境下有以下幾類後綴:
.dbf 資料庫文件(databasefile) .prg 命令文件(即程序Program)
.fxp 編譯後的程序 .scx和.sct 屏幕文件
.fpt 備注欄位文件 .frx和.frt 報表文件
.cbx和.pjt 標簽文件 .mnx 和.mnt 菜單文件
.pjx和.pjt 工程文件 .app 應用文件
.cdx和.idx 索引文件 .qpr和.qpx SQL查詢文件
.fp 配置文件 .ap 生成應用
.err 編譯錯誤文件 .men 內存應用
.fky 鍵宏文件 .win 窗口文件
.pcb 庫文件 .tmp 臨時文件
.tbk 臨時資料庫文件
後記
用戶要注意在不同的操作系統下,後綴名的約定會有所不同,如在Unix下,*.p代表Pascal語言程序,*.z代表壓縮文件,*.tar代表歸檔文件。另外,針對極特殊的設備,其驅動程序也會有特殊的後綴,如3DS顯示卡的驅動程序是*.exp。還有某些公司針對自己的產品也規定了文件名後綴,如方正公司的圖像排版文件規定用*.grh(即Graph)。
文件名的後綴代表著某一種類型的文件,一般會由某一種特定的軟體產生和處理。只有對這些後綴名的知識有一定的了解,才能在上機的過程中知道其所以然。這兒帶著大家看到了常見的一些後綴類型,實際上還有很多類型,不可能全部講完。常言說,師傅領進門,修行在個人,以後大家在計算機世界中自己轉著看吧。
㈦ 如何使用Bullet物理引擎 碰撞檢測
Bullet教程: Hello World 實例
更多信息請關注 物理引擎中文社區http://www.physicsengine.org
歡迎加qq群 52821727 討論更多關於Bullet的東西
這篇文章里我們將盡可能簡單的向你展示怎麼使用Bullet, 怎樣初始化Bullet, 設置一個動力學世界, 還有一個球落向地表 這個對鑒別你的build是否成功非常有用並且也能夠讓你快速的學習到Bullet的API. 首先,我們假設你的Bullet已經正確安裝並且正確設置了Bullet的include路徑(例如. /usr/local/include/bullet) 確保能連接到正確的lib. 否則請參閱Installation安裝. 如果你用的是gcc來編譯,請確保你的靜態庫反序,就是說. dynamics, collision, math.
初始化程序
以一個標準的hello world程序開始:
[cpp] view plain
#include <iostream>
int main ()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
創建世界
現在我們要添加一個子彈(Bullet)模擬. 首先寫入以下語句:
#include <btBulletDynamicsCommon.h>
我們想把btDiscreteDynamicsWorld 實例化但是在做此之前我們還需要解決一些其他事情. 對於一個「hello world」例子來說它太復雜我們並不需要. 但是,為了能更符合我們自己的工程, 他們可以用來微調(fine-tuning)模擬環境.
我們需要指出使用什麼樣的 Broadphase algorithm(寬相演算法). 選擇什麼樣的泛型演算法很總要,如果有許多剛體在繪制場景里, since it has to somehow check every pair which when implemented naively(天真) is an O(n^2) problem.
寬相(broadphase)使用 傳統的近似物體形狀並且被稱之為代理.我們需要提前告訴子彈最大的代理數, 所以才能很好的分配內存避免浪費. 下面就是世界裡任何時候的最大剛體數.
int maxProxies = 1024;
一些 broadphases 使用特殊的結構要求世界的尺度提前被告知, 就像我們現在遇到的情況一樣. 該broadphase可能開始嚴重故障,如果離開這個物體體積. 因為 the AxisSweep broadphase quantizes 空間基於我們使用的整個空間的大小, 您想這差不多等於你的世界.
使它小於你的世界將導致重大問題, 使它大於你的世界將導致低劣的性能.這是你程序調整的一個簡單部分, 所以為了確保數字的正確多花點時間也不防.
在這個例子中,世界從起點開始延伸10公里遠。
[cpp] view plain
btVector3 worldAabbMin(-10000,-10000,-10000);
btVector3 worldAabbMax(10000,10000,10000);
這個broadphase是我們將要使用的, 這個執行的是掃描和裁剪, 這里可以看到更多解釋Broadphase .
[cpp] view plain
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
該broadphase是一個極好的空間以消除不應碰撞的成隊物體. 這是為了提高運行效率.
您可以使用碰撞調度注冊一個回調,過濾器重置broadphase代理,使碰撞系統不處理系統的其它無用部分
. 更多信息請看 Collision Things.
碰撞配置可以讓你微調演算法用於全部(而不是不是broadphase )碰撞檢測。這個方面現在還屬於研究階段
[cpp] view plain
* collisionConfiguration = new ();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
我們還需要一個"solver". 這是什麼原因導致物體進行互動得當,考慮到重力,游戲邏輯等的影響,碰撞,會被制約。
它工作的很好,只要你不把它推向極端,對於在任何高性能模擬都有瓶頸有一些相似的可以線程模型:
[cpp] view plain
* solver = new ;
終於我們可以初始化了世界了:
[cpp] view plain
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
很明顯我們把重力方向設置成了Y軸的負方向,即Y軸是像上的
[cpp] view plain
dynamicsWorld->setGravity(btVector3(0,-10,0));
子彈的政策是「誰分配,也刪除」 記住,必須符合這樣的結果
在main()後記的刪除.
我們提供了一個通用的結果. 代碼如下:
[cpp] view plain
#include <btBulletDynamicsCommon.h>
#include <iostream>
int main () {
std::cout << "Hello World!" << std::endl;
// Build the broadphase
int maxProxies = 1024;
btVector3 worldAabbMin(-10000,-10000,-10000);
btVector3 worldAabbMax(10000,10000,10000);
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
// 設置好碰撞屬性 和調度
* collisionConfiguration = new ();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
// 實際上的物理模擬器
* solver = new ;
// 世界.
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
// 這里做一些你想做的事
// 作為一個好的編程習慣 做好刪除工作
delete dynamicsWorld;
delete solver;
delete dispatcher;
delete collisionConfiguration;
delete broadphase;
return 0;
}
碰撞包圍體
我們將創造一個接地平面[靜態剛體] ,和一個球體,將屬於在地上[動態剛體] 。每個剛體需要參考碰撞包圍體. 碰撞包圍體只解決碰撞檢測問題, 因此沒有質量,慣性,恢復原狀等概念. 如果您有許多代理,使用相同的碰撞形狀[例如每飛船模擬是一個5單元半徑范圍]。這是個好做法,只有一個子彈形狀的碰撞,並分享它在所有這些代理. 但是我們這里的兩個剛體形狀都不一樣,所以他們需要各自的shape.
地面通常是向上的並且里原始點1米的樣子. 地面會和遠點交叉,但子彈不允許這樣做,
因此,我們將抵消它的1米和用來彌補,當我們把剛體設置好以後。
[cpp] view plain
btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),1);
我們將讓它從天上掉下來,它是一個球體,半徑為1米.
[cpp] view plain
btCollisionShape* fallShape = new btSphereShape(1);
這里需要做碰撞形狀的清理工作.
剛體
在,我們可以添加形狀的碰撞到我們的現場,並將它們定位.
讓我們先初始化地面. 它的方向是特定的, 子彈的四元數形式 x,y,z,w . 位置在地面下一米, 將要補充一米我們不得不做的. 運動狀態在這里可以得到詳細的說明:MotionStates
[cpp] view plain
btDefaultMotionState* groundMotionState =
new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,-1,0)));
在第一個和最後一個參數,在下面的構造函數中是質量和地表的慣性. 由於地面是靜止的所以我們把它設置成0. 固定不動的物體,質量為0 -他是固定的.
[cpp] view plain
btRigidBody::btRigidBodyConstructionInfo
groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0));
btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
最後我們把地面加到世界中:
[cpp] view plain
dynamicsWorld->addRigidBody(groundRigidBody);
新增下跌領域非常相似。我們將其置於50米以上的地面.
[cpp] view plain
btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,50,0)));
由於它是動態剛體,我們將給予質量1公斤。我不記得如何計算一個球體的慣性,但是,這並不重要,因為子彈提供它的實現
[cpp] view plain
btScalar mass = 1;
btVector3 fallInertia(0,0,0);
fallShape->calculateLocalInertia(mass,fallInertia);
現在,我們可以建造剛體只是像以前一樣,並把它加到世界中:
[cpp] view plain
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
dynamicsWorld->addRigidBody(fallRigidBody);
一個快速的解釋btRigidBody::btRigidBodyConstructionInfo是為了; 物體的構建是通過某些參數的. 這是通過一個特殊的結構實現的。 該部分的btRigidBodyConstructionInfo被復制到物體當你建造的時候,並只用於在初始化的時候. 如果你想創建幾千個屬性一樣的物體, 你只需要建立一個btRigidBodyConstructionInfo, 並通過它創建所有的.
開始模擬
這就是有趣的開始。我們會加強模擬200倍,間隔60赫茲. 這使它有足夠的時間降落的地面上. 每一步, 我們都會列印出它離地面的高度.
這stepSimulation 在做你所期待, 不過他的介面確實很復雜. 讀Stepping The World 以獲得更多消息.
進後,我們審查的狀態下降領域.位置和方向都封裝在btTranform對象,我們摘錄下降領域的運動狀態. 我們只關心位置,我們退出變換getOrigin ( ) 。然後,我們列印y組成部分的立場載體.
[cpp] view plain
for (int i=0 ; i<300 ; i++) {
dynamicsWorld->stepSimulation(1/60.f,10);
btTransform trans;
fallRigidBody->getMotionState()->getWorldTransform(trans);
std::cout << "sphere height: " << trans.getOrigin().getY() << std::endl;
}
這應該產生一個輸出看起來像這樣的東西:
sphere height: 49.9917
sphere height: 49.9833
sphere height: 49.9722
sphere height: 49.9583
sphere height: 49.9417
sphere height: 49.9222
sphere height: 49.9
...
sphere height: 1
sphere height: 1
sphere height: 1
sphere height: 1
sphere height: 1
看起來不錯迄今。如果你圖這對輸出迭代次數,你就會得到這個:
這個球體開始於地表的一米處. 這是因為取的是幾何中心並且它的半徑為1米. 這個球剛開始會有一個大的反彈然後漸漸的減緩彈起高度.
這是可以預料的實時物理引擎,但它可以盡量減少,增加頻率的模擬步驟
. 試試再說!
現在你可以把這個動態世界代入你的程序 實時繪制出這個球體. 也可以看看其他的 Collision Shapes . 試試一堆盒子 或者圓柱體然後用一個球去扔向他們.
完整代碼
[cpp] view plain
#include <iostream>
#include <btBulletDynamicsCommon.h>
int main (void)
{
btVector3 worldAabbMin(-10000,-10000,-10000);
btVector3 worldAabbMax(10000,10000,10000);
int maxProxies = 1024;
btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
* collisionConfiguration = new ();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
* solver = new ;
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
dynamicsWorld->setGravity(btVector3(0,-10,0));
btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),1);
btCollisionShape* fallShape = new btSphereShape(1);
btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,-1,0)));
btRigidBody::btRigidBodyConstructionInfo
groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0));
btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
dynamicsWorld->addRigidBody(groundRigidBody);
btDefaultMotionState* fallMotionState =
new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,50,0)));
btScalar mass = 1;
btVector3 fallInertia(0,0,0);
fallShape->calculateLocalInertia(mass,fallInertia);
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
dynamicsWorld->addRigidBody(fallRigidBody);
for (int i=0 ; i<300 ; i++) {
dynamicsWorld->stepSimulation(1/60.f,10);
btTransform trans;
fallRigidBody->getMotionState()->getWorldTransform(trans);
std::cout << "sphere height: " << trans.getOrigin().getY() << std::endl;
}
dynamicsWorld->removeRigidBody(fallRigidBody);
delete fallRigidBody->getMotionState();
delete fallRigidBody;
dynamicsWorld->removeRigidBody(groundRigidBody);
delete groundRigidBody->getMotionState();
delete groundRigidBody;
delete fallShape;
delete groundShape;
delete dynamicsWorld;
delete solver;
delete collisionConfiguration;
delete dispatcher;
delete broadphase;
return 0;
}
㈧ 電腦中GPU是什麼啊
圖形處理器(英語:Graphics Processing Unit,縮寫:GPU),又稱顯示核心、視覺處理器、顯示晶元,是一種專門在個人電腦、工作站、游戲機和一些移動設備(如平板電腦、智能手機等)上圖像運算工作的微處理器。
GPU是顯示卡的「大腦」,它決定了該顯卡的檔次和大部分性能,同時也是2D顯示卡和3D顯示卡的區別依據。2D顯示晶元在處理3D圖像和特效時主要依賴CPU的處理能力,稱為「軟加速」。3D顯示晶元是將三維圖像和特效處理功能集中在顯示晶元內,也即所謂的「硬體加速」功能。顯示晶元通常是顯示卡上最大的晶元(也是引腳最多的)。現在市場上的顯卡大多採用NVIDIA和 AMD-ATI兩家公司的圖形處理晶元。
拓展資料:
GPU主流供應商
intel:intel不但是世界上最大的CPU生產銷售商,也是世界最大的GPU生產銷售商。 intel的GPU在現在完全是集成顯卡,用於intel的主板和intel的筆記本。要是只按發售數量計算,intel隨著他主板發售的集成GPU占據了整個GPU市場的60%以上。
nVidia:現在最大的獨立顯卡生產銷售商,旗下有民用的Geforce系列,還有專業的Quadro系列。其GPU具有cuda通用運算,PureVideo高清視頻技術,PhysX物理加速,Optimus智能顯卡切換等。
AMD(ATI):世界上第二大的獨立顯卡生產銷售商,他的前身就是ATI。旗下有民用的Radeon系列,還有專業的FireGL系列等。就發售量和發售盈利方面,AMD顯卡方面仍然略輸於nv,不過兩者不相伯仲,差距只是幾個百分點。其GPU具有Stream通用運算,ATI Video Converter視頻轉碼,UVD高清視頻技術,Havok、Bullet和Pixelux DMM三種物理引擎等。
㈨ 編程:那種語言更能學到設計模式,架構思想呢
Q1:關於純粹的面向對象語言?
初學者不要太執著於某些教材所謂的"純粹的完全的"面向對象. 面向對象並不是像一些人想的那樣silver bullet.. . 從面向對象和面向過程的相互關系中可以發現, 從設計模式的學習中中也可以發現: 兩者不過是你中有我, 我中有你, 不可分離的.
Q2:關於語言與編程(模式)
借用大牛的話: 深入一種語言去編程才能深刻理解, 另外,可以多用幾門語言(包括動態和編譯的)有助於理解不同編程方式. 集中並深入一種語言去編程的能力, 也就是超越了一種特定的語言. java, C#, C++的區別只是在入手難易和應用領域不同. 個人還是認同C++之父的話, c++是程序員值得學習的語言, 它的表達能力強大, 某種程度能夠cover另外兩種. 但說到底, 高手都是通過深入而後超越一種語言得到了思想.
design pattern某種角度上可以看作是面向對象版本的數據結構. 而架構思想和一些框架都是多種模式結合的一種實現, 這些不是簡單的學習來完全理解的. 建議依據實際工作和項目中的框架多多實戰, 而模式又何止Gof的23種呢.
最後個人心得是:1必須多讀程序,2盡量多寫.
㈩ 我編譯出來的Java界面按下K鍵時,一直是死循環,不知是何解
因為這一個判斷一直沒有執行,所以沒break
if (mt.bullet.x < 0 || mt.bullet.x > 1000 || mt.bullet.y < 0 || mt.bullet.y > 1000) {
System.out.println("執行到這了嗎??????????");
mt.bullet.isLive = false;
break;
}
Bullet類需要實現Runnable介面,那個被你注釋了的run方法需要把它放出來,
Thread t=new Thread(bullet);
t.start();
這兩行放在ShotEnemy方法的最後面。
這樣應該就可以不會再死循環了。