FPS

FPS

FPS全稱為Frames Per Second.用於統計遊戲與影片每秒的渲染畫面(幀)次數.此值越高畫面越流暢,電影以每秒24格菲林進行播放.所以你的遊戲要流暢無停頓感.需要不低於24幀最好高於30幀.當然幀數越高越好.

FPS算法如下:

FPS = 100 * Frequency / (currentTime – startTime);

Frequency為時鐘頻率. currentTime與 startTime為前後兩次時鐘

 

Windows下你需要高精度計數器:

返回硬件級高精度時鐘頻率,若返回0代表系統不支持.

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

返回硬件級高精度計數器,若返回0代表系統不支持.

BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);

LARGE_INTEGER:為64BIT結構

 

此兩個函式需要winbase.h頭文檔和Kernel32.LIB庫

#include <winbase.h>

#pragma comment(lib, “Kernel32.LIB”)

 

定義如下FPS結構:

typedef struct FPS_TYP {

LARGE_INTEGER  Frequency;// 計數器的頻率

LARGE_INTEGER  startTime;// 啟動時鐘

float Frames;// 每秒渲染幀數

int n;// 臨時幀計數器

}FPS,*FPS_PTR;

 

初此化高精度定時器

bool Init_FPS(FPS_PTR fps)

{

// 返回硬件支持的高精度計數器的頻率

if (QueryPerformanceFrequency(&fps->Frequency) == false)

return false;

// 獲取啟動時鐘

QueryPerformanceCounter(&fps->startTime);//

return true;

}

 

計算每秒渲染幀數,每100幀進行一次計算

float Get_FPS(FPS_PTR fps)

{

++fps->n;

if (fps->n > 100)

{

LARGE_INTEGER currentTime;

// 返回高精度計數器

QueryPerformanceCounter(&currentTime);

fps->Frames = (float)100 * (float)fps->Frequency.QuadPart / ((float)currentTime.QuadPart – (float)fps->startTime.QuadPart);

fps->startTime = currentTime;// 重置時間

fps->n = 0;

}

return fps->Frames;

}

 

计算两次测量所花费时间

float Get_Counter_FPS(FPS_PTR fps){

LARGE_INTEGER currentTime;//当前时钟

// 返回高精度计数器

QueryPerformanceCounter(&currentTime);

float seconds = ((float)currentTime.QuadPart – (float)fps->startTime.QuadPart) / (float)fps->Frequency.QuadPart;

fps->startTime = currentTime;

return seconds;

}

 

OpenGL簡介

OpenGL簡介

在DOS時代因為當時硬件品類小,程序直接控制硬件,但當硬件品類不斷增加,要對所有硬件進行支持變得不現實.所以便有OpenGL的出現,把硬件的支持交還給硬件開發商.

最初OpenGL由Silicon Graphics,Inc(SGI)開發的一個可以跨平臺使用的圖形編程接口, GL就是Graphics library的縮寫,最初用於UNIX工作站.

1992年OpenGL Architecture Review Board(ARB)委員會創建,由ATI,Compaq,Evans&Sutherland,Hewlett-packard,IBM,Intel,Intergraph,Nvidia,Microsoft,Silicon Graphics組成

1995年微軟在遊戲廠商進逼下不得已在WinNT中支持OpenGL

程式庫 簡介 下載點
OpenGL 標準OpenGL 下載1下載2
GLU (實用庫)OpenGL的補充

 

GLUT (OpenGL Utility Toolkit)應用工具包,與系統無關且便於移於移植.作為AUX庫的的替代品.

 

下載

 

下載並解壓後,更據文檔的擴展名拷貝到各自對應的VC目錄

文件 文檔類形 目錄
include files .h文檔 C:\Program Files\Microsoft Visual Studio\VC98\Include\GL
Library files .lib文檔 C:\Program Files\Microsoft Visual Studio\VC98\Lib
Executable files .dll文檔 C:\Program Files\Microsoft Visual Studio\VC98\Bin

 

程式頭文檔 程式庫文檔 程式二進制文檔 簡介
gl.h Opengl32.lib OPENGL32.DLL 標準OpenGL頭文件
glu.h Glu32.lib GLU32.DLL OpenGL實用工具庫
glaux.h GLAUX.LIB OpenGL輔助函數庫
glut.h glut.lib glut.dll OpenGL應用工具包
glut32.lib glut32.dll

 

放射性衰减

放射性衰減
放射性衰減

放射性衰减

放射性衰減,例如鈾在一個給定的單位時間內是按其品質的百分比衰減的,描述衰減率的方法是給出該物質品質衰減一半所用的時間週期.這個時間週期稱作該物質的半衰期.對於放射性衰減兩個半衰期並不購成一個全衰期.事實上在兩個半衰期的時間週期裏該物質衰減到原品質的(1/2)*(1/2)=1/4

最有名的放射性物質之一是碳-14,它常被用於確定有機物的年代,當一塊木頭或骨頭還是活著的有機體的一部分時它就積聚了放射性的碳-14,因而碳-14在該物體的含碳中佔有一定比例,而一旦有機體死亡它就不能在通過於外部環境獲得碳-14,如通過食物和呼吸.

通過測定該物體中碳-14所占的比例做比較就能估算出原來的碳-14已經衰減了多小,碳-14的半衰期大約是5730年,因此5730年後該物質所含的碳-14是它在世時的所在的一半既1/2.

11463年後含有的碳-14只剩下1/4. 17190年後只剩下1/8.

 

在一個時間週期t之後,碳-14所剩下的量可以寫成一個指數函數

公式:C=C0(1/2)(t/5370)

C0:碳-14原有的含量

1/2:衰減一半

5730:碳-14的半衰期5730年C

t:以年單位的時間

C:碳-14剩下的含量

 

核武器之鍶90

核武器之鍶90
核武器之鍶90

核武器之鍶90

在上世紀60代初(包括之前)所有的核武器都在大氣中進行試驗,它會釋放出放射性同位素鍶-90,當它進入當時在世的人的骨骼中,而鍶-90半衰期為29年,那麼如過你在1960年吸收了鍶-90到現在你的骨骼中還剩當初的百分之幾呢?

=(1/2)((2016-1960)/29)

= (1/2)((56)/29)

=0.26

=26%

答案是只剩當初的26%

蟋蟀与高温

蟋蟀与高温
蟋蟀与高温

蟋蟀與高溫

蟋蟀是一種昆蟲它令人驚訝的是只要在同一溫度下,蟋蟀叫聲頻率基本相同.也就說只要知到蟋蟀每分鐘叫聲頻率,就可計算出當時的穩度.下面會計算出一個表讓你可以快速查表.

從下面的公式可得知要蟋蟀發出叫聲不能低於5攝氏度,而58攝氏度,是天文臺有記錄以來的最溫高度,

 

公式:C=7T-35

C:蟋蟀每分鐘的叫聲頻率

T:攝氏溫度

下面是C代碼

float Cricket(float t)

{

float c;

c = 7*t-35;

return c;

}

 

void Crickets()

{

float t;

float c;

for (t=5; t<=58; ++t)

{

c = Cricket(t);

::printf(“溫度%i=蟋蟀叫聲%i\r\n”,(int)t,(int)c);

}

}

 

攝氏溫度 蟋蟀每分鐘的叫聲頻率
5 0
6 7
7 14
8 21
9 28
10 35
11 42
12 49
13 56
14 63
15 70
16 77
17 84
18 91
19 98
20 105
21 112
22 119
23 126
24 133
25 140
26 147
27 154
28 161
29 168
30 175
31 182
32 189
33 196
34 203
35 210
36 217
37 224
38 231
39 238
40 245
41 252
42 259
43 266
44 273
45 280
46 287
47 294
48 301
49 308
50 315
51 322
52 329
53 336
54 343
55 350
56 357
57 364
58 371

 

 

牛頓三定律-物體運動的物理學

牛頓三定律-物體運動的物理學
牛頓三定律-物體運動的物理學

牛頓三定律-物體運動的物理學

以撒·牛頓生於1643年1月4日終於1727年3月31日,享年85歲.

牛頓物體運動三個基本定律是遊戲開發重要基礎,下面我會簡單的講序.

 

牛頓第一運動定律: (即慣性定律)

一切物體在任何情況下,總是保持靜止或勻速直線運動壯態,直到受外力作用發生改變.物體會一直保持狀態不變,直到有外力的作用讓它變化.物體的滑行之所以會停下與它的摩擦力與阻力有關

  1. 作用力不是維持物體運動的原因
  2. 作用力是改變物體運動狀態的原因

 

 

牛頓第二運動定律:

物體的加速度跟物體所受的合外力成正比,跟物體的品質成反比,加速度的方向跟合外力的方向相同.

物體的加速度取決於兩個因素:作用於物體的力和物體本身的品質.如果其他的因素相同,則同樣的力作用於品質是其一倍的物體時,該物體的加速度慢一倍.

所以,要加速度變快就要需要更大的作用力或更小品質.或同時兩者.

運算式:f=ma

f:代表作用力

m:代表品質

a:代表加速度

 

 

 

牛頓第三運動定律:

兩個物體之間的作用力和反方向作用力,在同一直線上,大小相等,方向相反.

當物體運動時都包含作用力和反作用力,並且是對稱.

運算式:f=-f’

f:代表作用力

f’:代表反方向作用力

求花花

求花花
求花花
求花花
求花花

求花花

今在歐陽家群出現一條幼稚園大班的算術題,題目是一張圖.圖中的花具有權重相加合得一定的數值,三種花必須符合以下三個條件

  1. 紅花+紅花+紅花=60
  2. 紅花+藍花+藍花=30
  3. 藍花-黃花*2=3

求: 黃花+紅花*藍花/5*4=?

 

因為電腦是科學家經過幾百才得到強大運算器,下面我使用電腦求解這個問題,演算法超簡單無經過優化. 黃花1紅花權重20,五瓣花藍花權重5,四瓣藍花權重4 ,答案是81

 

//——————————————————————–

// 求花花

//——————————————————————–

int flowers()

{

int red=0;// 紅花

int blue = 0;// 藍花

int yellow=0;// 黃花

int x=0;

 

while(true)

{

if((red + red + red   == 60) )

{

if( red + blue + blue == 30)

{

if(blue – yellow*2  == 3 )

{

x = yellow + red * (blue/5*4);

break;// 求得答案

}

else

{

++yellow;// 黃花

}

}

else

{

++blue;//藍花

}

}

else

{

++red;// 紅花

}

}//END WHILE

 

return x;

}

 

一筐雞蛋

一筐雞蛋
一筐雞蛋

今日見老豆在看微信,而且不停的在紙上寫數位並按計算機,原來是三舅父群裏發了一條數學題,這是條數學題求筐裏雞蛋的個數,我一口答應由我來算,題目我在下面給出,這種題目非常適合使用電腦進行碰撞求結果.常細的C語言演算法我在下面給出,演算法思路就是雞蛋個數逐次加一,所有條件都附合就得出接果,我果台老爺機IBM-T60P瞬間就給我答案1449,我將結果告訴我老豆他立馬發上群威一威.

 

一筐雞蛋:求筐裏雞蛋的個數
一個一個拿,正好拿完.
二個二個拿,還剩一個.
三個三個拿,正好拿完.
四個四個拿,還剩一個.
五個五個拿,還差一個.
六個六個拿,還剩三個.
七個七個拿,正好拿完.
八個八個拿,還剩一個.
九個九個拿,正好拿完.

//——————————————————————–
//一筐雞蛋
//——————————————————————–
int egg()
{
int x[9];
int _x;// 雞蛋個數
int c;//拿蛋的次數

_x = 0;// 雞蛋個數
while(1)
{
++_x;// 雞蛋個數加一

for(c = 0; 1c   <= _x; ++c)
x[0] = 1
c;

for(c = 0; 2c+1 <= _x; ++c)
x[1] = 2
c+1;

for(c = 0; 3c   <= _x; ++c)
x[2] = 3
c;

for(c = 0; 4c+1 <= _x; ++c)
x[3] = 4
c+1;

for(c = 0; 5c-1 <= _x; ++c)
x[4] = 5
c-1;

for(c = 0; 6c+3 <= _x; ++c)
x[5] = 6
c+3;

for(c = 0; 7c   <= _x; ++c)
x[6] = 7
c;

for(c = 0; 8c+1 <= _x; ++c)
x[7] = 8
c+1;

for(c = 0; 9c   <= _x; ++c)
x[8] = 9
c;

if(_x == x[0] &&
_x == x[1] &&
_x == x[2] &&
_x == x[3] &&
_x == x[4] &&
_x == x[5] &&
_x == x[6] &&
_x == x[7] &&
_x == x[8] )
break;
}

return _x;
}

大端與小端

大端與小端
大端與小端

大端與小端

小人國的兩個派系因為水煮蛋時該從大的一端剝開還是小的一端剝開而爭論,發生六次判亂, 其中一個皇帝送了命,另一個丟了王位. 出自喬納森•斯威夫特的小說”格列佛遊記”

 

在1974年4月 Intel(英代爾)推出8080 CPU,它採用(Little-Endian)小端方式存取資料, 即低位優先,存取從最低位址開始按順序存放.因位Inter的X86的霸主地位,CPU運算都是小端, 稱為主機字節.

(Little-Endian)小端 存放0x22446688

低位地址                                            高位地址
——————————————————–>
————————————————-
|     88     |      66    |     44      |     22    |
————————————————-

 

在1974年8月Motorola(摩托羅拉)推出6800 CPU,它採用(Big-Endian)大端方式存取資料,即高位優先,存取從最高位址開始按順序存放.後來所大部分的網路資料均採用大端方式,稱為網路字節.

(Big-Endian)大端 存放0x22446688

低位地址                                            高位地址
——————————————————–>
————————————————-
|     22     |      44    |     66      |     88    |
————————————————-

 

自動駕駛汽車

自动驾驶汽车

自動駕駛需要一輛普通汽車上安裝三套系統.

  1. 硬體:超級電腦可同時處理大量汽車影片攝像機和雷達感測器以及鐳射測距器的資訊.
  2. 算發:人工智慧演算法
  3. 地圖:可不斷網路更新離線3D地圖.

影片攝像機:車身外部攝像機,用於識別人行道,自行車道等障礙物.

鐳射測距器:硬體車頂旋轉感應器對半徑60米內物體進行3D掃描,也獲的精確車身周邊3D地圖模型.

雷達感測器:幫助電腦確定車輛與障礙物的距離.

硬體和地圖早以不是問題,唯獨是人工智慧演算法多年冇突破.不過一旦突破電腦將有獨立思維與情感,終結者場面將在人世間重現.

自動駕駛要百分百保障車輛和人員安全,人工智能多用”狀態機”和”決策樹”,其他概率性演算法則多有失誤.

路面可能『大貨車』『細車』『單車』和『行人』橫穿馬路,要百分百識別各種路面情况從現在情况還不太可能.

2016年6月30日,美國佛羅裏達州,一輛特斯拉S型電動轎車在自動駕駛模式撞上大貨車車身,原因是高大的白色車身無法識別.

不過自動駕駛汽車將會大幅減少車禍的數量,因為他們遵守限速,路標,從不闖紅燈.

以現在技術完全可以自動控制方向盤,避免追尾相撞,自動泊車,變線警告,根據車流情況自動加速或減速.

在礦場裏卡車以可以由電腦操控全部自動運行.它們可以應付礦場裏有限交通量.由於成本可能更低,機器人卡車司機終究會全面取代人類司機工作.

你真想要冇『踏板』冇『方向盤』冇『手波』汽車?還有駕駛樂趣嗎?