自己的經驗知識雜記

 工作中學習收集的一些知識還有解決問題的方法,一般是些小技巧來不及總結的那種,僅用於自己查閱!

/**********************************************************************************************************************************/

 原創作品,轉載時請務必以超鏈接形式標明文章原始出處:http://blog.csdn.net/gqb666/article/details/8819772,作者:gqb666  
/**********************************************************************************************************************************/

1.圖形學流水線:

頂點->頂點變換- >片源組裝->裁剪->插值->像素操作->stencil test ->depth test ->alpha test->alpha 混合

頂點着色器->插值->圖元組裝光柵化或者幾何着色器->片段着色器->裁剪測試->多重採樣->模板測試->深度測試->混合->抖動->遮罩輸出

 

不對,比如你用三角形面片逼近一個球,如果你指定一個三角形每個頂點法向量都一樣的話,加上光以後你會發現這個球是不光滑的。因爲實際得到的是一個多面體而不是一個球。但如果你根據每個頂點在球面上的座標計算該頂點實際的法方向(是球面的法方向)的話,得到的球就會光滑得多了。
換句話說,其實頂點法向量是根據原先的曲面算出來的,而不是根據近似以後的三角形面片算出來的。
關於根據曲面方程計算上面任意一點法向量的問題,可以參考任意一本高等數學書。
如果不知道曲面的解析方程的話,也不妨用平面法向量代替曲面法向量,不過光滑程度差一點。


圖形硬件技術:

 1.fast clear
 2. tile based rendering
 3. h-z
 4.early z 
 5.hierarchy Z
 6.Z compression
插值 (Interpolation) 
   在不生成像素的情況下增加圖像像素大小的一種方法,在周圍像素色彩的基礎上用數學公式計算丟失像素的色彩。有些相機使用插值,人爲地增加圖像的分辨系。
 
但是w的值就是等於z的值,這個z值不是映射到0到1的值
你把那個透視矩陣乘以一個x,y,z,w就等於z
w就是乘以透視矩陣後的w值

 

fbo

stencil buffer的作用
mipmap紋理採樣
reflection
shadow map
shadow volume
stencil buffer

Deferedshading 

skining

water 

 

 

2. 測試framebuffer

先cat /dev/fb0 >a.dat生成一個不就行了?以後就拿這個a.dat測試

 

3.shell腳本相關

shell腳本中${#0}表示第0個參數的長度,也就是命令的長度,${#1}表示第一個參數的長度。
舉例:
./sub_str.sh hello 2 3
剛${#0}=12  ${#1}=5${#2}=1 ${#3}=1  

4.valgrind
內核態調試神器:valgrind
內存使用檢測,包括:
    –內存泄漏
    –非法內存訪問
    –未初始化變量使用
    –重複釋放內存
  •多線程競爭
    –檢測死鎖
    -檢測競爭

 

將這個CPU_CFG_INT_DIS_MEAS_EN 關掉,去掉進出中斷時統計開關中斷的時間,以減少進出臨界區的時間。果然解決了問題!

編譯:
$ g++ -IGL -lglut test2.cpp -o test.exe
就生成了test.exe
$  ./test.exe
顯示:
OpenGL Warning: XGetVisualInfo returned 0 visuals for 0xa082b78
OpenGL Warning: Retry with 0x8002 returned 0 visuals
Segmentation fault
解決方案
$ LIBGL_ALWAYS_INDIRECT=1 ./test.exe

派生類的繼承方式

默認的派生方式說明爲private,各種繼承的特點如下:
1。私有繼承:私有繼承的特點是基類中的公有成員和保護成員作爲派生類中的私有成員,不能夠被派生類的子類所訪問。在私有繼承方式下,基類中的公有成員和保護成員只能夠被直接派生類訪問,不能夠由派生類的子類再繼承。
2。公有繼承:公有繼承的特點是基類中的公有成員和保護成員作爲派生類中的公有成員和保護成員,但基類中的私有成員仍然是私有的(不可繼承)。在公有繼承方式下,基類成員的訪問權限在派生類中保持不變,公有派生類的對象可以訪問基類中的公有成員和保護成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。
3保護繼承:特點是基類中的公有成員和保護成員都作爲派生類中的保護成員,基類中私有成員仍然是私有的。

各種繼承方式的保護屬性

父類成員屬性                    公有繼承          保護繼承           私有繼承
private                                 不可繼承          不可繼承           不可繼承
proteceted                             proteceted       private            private     
public                                      public           proteceted         private 
構造函數靜態成員友員關係     不可繼承         不可繼承           不可繼承


 
16bitSDRAM接法如下圖:


Ubuntu下編譯AndroidNDK項目報arm-linux-androideabi-gcc:命令未找到 

NDK-BUILD失敗,錯誤提示: 
make: ~/dev/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: 命令未找到 
找了半天,在網上終於找到個解決辦法 
step1: 
sudo apt-get install libc6-dev-i386 
step2: 
sudo apt-get install ia32-libs 

 

VIM 學習筆記

http://www.360doc.com/content/10/1128/15/4807202_73143894.shtml

 

nividia

http://www.nvidia.com/object/cube_map_ogl_tutorial.html

 

 Toolchains have a loose name convention like arch[-vendor][-os]-abi.

arch is for architecture: arm, mips, x86, i686...
vendor is tool chain supplier: apple,
os is for operating system: linux, none (bare metal)
abi is for application binary interface convention: eabi, gnueabi, gnueabihf
For your question, arm-none-linux-gnueabi and arm-linux-gnueabi is same thing. arm-linux-gcc is actually binary for gcc which produces objects for ARM architecture to be run on Linux with default configuration (abi) provided by toolchain. 

http://hi.baidu.com/dbfr2011818/archive/tag/%5B%E8%BD%AC%E8%BD%BD%5D%E5%9B%BE%E5%BD%A2%26%2338%3Bdx?page=9


出現文件系統錯誤:
在修復模式下重新掛載一下“/” mount -o remount,rw /  就可以了

修改這個文件etc/sysconfig/network這個文件裏的主機名.
NETWORKING=yes
HOSTNAME=主機名
------------------------------------------------------------------------
記得重啓!!!
------------------------------------------------------------------------
完整:
第一步:
#hostname oratest
第二步:
修改/etc/sysconfig/network中的hostname
第三步:
修改/etc/hosts文件

Fedora 安裝卸載軟件時比較重要的命令:
安裝:rpm -ivh linuxqq-v1.0.2-beta1.i386.rpm --nodeps --force
卸載:rpm -e linuxqq-v1.0.2-beta1.i386.rpm --nodep --force
查詢:rpm -qa | grep linuxqq

 

GPU架構

http://www.opengpu.org/bbs/forum.php?mod=viewthread&tid=2993


總結一點:虛擬機中Linux中minicom裏COM1、COM2…對應tty0、tty1而kermit裏面對應ttyS0、ttyS1……。


默認情況下,tmpfs會mount到/dev/shm目錄。使用tmpfs,就是說你可以使用這個目錄,這個目錄就是tmpfs,如你寫臨時文件到此目錄,這些文件實際上是在VM中。
要使用tmpfs,您要在內核配置時,啓用“Virtual memory file system support”。
爲防止tmpfs使用了全部VM,有時候要限制其大小。要創建一個最大爲32 MB的tmpfs文件系統,鍵入:
# mount -t tmpfs tmpfs /mnt/tmp -o size=32m
添加到 /etc/fstab,應該是這樣:
tmpfs /mnt/tmp tmpfs size=32m 0 0


嵌入式系統中cgi向lighttpd服務器上傳文件遇到內存不足的解決方法:

cgic.c裏面的(第一行有效代碼)
#define cgicTempDir "/dev/shm"
lighttpd.conf裏面的(最後一行)
server.upload-dirs=("/dev/shm")


Telnet root用戶的登入

Telnet 不是很安全,默認的情況之下不允許 root 以 telnet 進入 Linux 主機 。若要允許root用

戶登入,可用下列方法:

(1)[root @echo /root]# vi /etc/pam.d/login

#auth required pam_securetty.so #將這一行加上註釋!

或[root@echo root]# mv /etc/securetty /etc/securetty.bak

(2)編輯/etc/securetty 文件,加上下面幾行:

pts/0

pts/1

pts/2

pts/3

測試root用戶直接telnet登陸成功,這樣, root 就可以直接進入 Linux 主機了。不過,建議不要這樣做。也可以在普通用戶進入後,切換到root用戶,擁有root的權限。


linux上就有開源軟件做到這點,叫valgrind,直接在運行環境配上這個東西,什麼內存崩潰、溢出、泄露通通給你找出來。
對於嵌入式開發者,更方便的方式就是看崩潰的內存,通過addr2line來debug,不過要求開發者對內存有非常深刻的認識。
發佈了41 篇原創文章 · 獲贊 38 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章