在之前的版本中.我們的障礙物移動和場景移動放在同乙個for迴圈中,雖然減少了**的操作,但是很容易出現邊界問題,程式執行中往往會出現障礙物驟現,或者障礙物還未抵達車前方便突然消失的情況,為了修改這齣bug,我將重寫這部分**.
無腦寫**的多數結果都是bug不斷,並且寫完後文就忘記前文.為了提高**的清晰度和準確性,挺屍幫我們捋清思路,我們先通過寫偽**的方式整理一下我們的程式有哪些需求,以及粗略的實現方式.
障礙物能夠從左側樓棟出現,到達路**之後,將停留一小段時間(等待車撞上).
對這個過程進行分解分析,我們可以大致得到如下流程:
如果當前狀態為靜止, 並且停留時間還未到達2s,保持pos不變
// 先獲取左側建築情況
int left_temp = building_left_flag;
if(left_temp >> 11 & 0b1 == 1)
}}else
glbindtexture(gl_texture_2d, texture[4]);
glloadidentity();
gltranslatef(child_run_len, -1.0f, -7.0f);
glcalllist(children);
if(child_run_len >= -0.5)
child_run_len = -0.5f;
}else
}elseelse
}
為了和真實駕駛更加相似,我們不應該讓障礙物只從單側出現,而是因該讓其兩側都有可能出現.因此,我們需要在原來的**上進行進一步的修改.
如果障礙物從兩側出現的話, 每次障礙物將要出現的時候, 我們需要用乙個flag標誌儲存障礙物本次出現是從左側出現還是右側出現. 在繪製障礙物的時候, 我們將通過這個flag來判斷物體是如何運動.
int left_temp = building_left_flag;
int right_temp = building_right_flag;
if(left_temp >> 11 & 0b1 == 1)
}} else
glbindtexture(gl_texture_2d, texture[4]);
glloadidentity();
gltranslatef(child_run_len, -1.0f, -7.0f);
glcalllist(children);
if(child_run_len >= -0.5)
child_run_len = -0.5f;
} else
} else else
}}else
// 奇數為左側, 偶數為右側
if(rand() & 0b1 == 1)
}else}}
} else
if(left_or_right_flag == 1)
child_run_len = -0.5f;
} else
}else
} else
}} else else
}}
虛擬駕駛環境搭建 一
本篇部落格將對整個虛擬環境的搭建進行乙個綜述,後續將會對環境中各個功能的實現進行一一解釋分析.整個pro實現了模仿一輛車在街道上進行賓士的場景 目前實現的是在直道上行駛,後續會加入轉彎功能 專案的執行效果如圖所示.為了實現上述功能,我將整個專案大致分為如下幾塊.其中,本次專案是基於opengl學習 ...
虛擬環境搭建
使用虛擬環境的原因 如果在一台電腦上,想開發多個不同的專案,需要用到同乙個包的不同版本,如果使用上面的命令,在同乙個目錄下安裝或者更新,新版本會覆蓋以前的版本,其它的專案就無法執行了。1.安裝虛擬環境 sudo pip install virtualenv安裝完虛擬環境後,如果提示找不到mkvirt...
搭建虛擬環境
一 安裝虛擬環境的命令 sudo pip install virtualenv二 安裝完虛擬環境後,如果提示找不到mkvirtualenv命令,須配置環境變數 1 建立目錄用來存放虛擬環境 mkdir home virtualenvs2 開啟 bashrc檔案 sudo vim bashrc3 在檔...