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

公告

聯系我:我的126郵箱: billhsu。 Locations of visitors to this page
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

統計

  • 隨筆 - 41
  • 文章 - 0
  • 評論 - 82
  • 引用 - 0

常用鏈接

留言簿(16)

隨筆分類

隨筆檔案

相冊

Game Dev

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

基于shader的骨骼蒙皮計算

     摘要: 我的古董顯卡很操蛋,好端端的shader,傳骨骼矩陣進去,硬是沒反應。。
尋尋覓覓,找到了 NVIDIA SDK 的example,終于解決了。
難道我的顯卡不支持BLENDINDICES和BLENDWEIGHT?
把BLENDINDICES和BLENDWEIGHT用TEXCOORD[n]表示才正常。。
不說廢話,直接上代碼。  閱讀全文

posted @ 2010-04-01 22:10 Bill Hsu 閱讀(1043) | 評論 (0)編輯 收藏
fstream那些事

感覺fstream有些地方設計的不太合理,不知道是bug還是那些牛X們故意這樣的。

首先,fstream竟然在中文路徑這種東西上不支持,網上也可以看到許多實現方法,但有的方法其實并不是太好。
我覺得這樣做最簡單:

setlocale(LC_ALL,"");//設置成當前語言環境
ofstream?out(filename);//打開文件
setlocale(LC_CTYPE,?0);

還有,fstream的getline也有問題,對于那些\n \r 空行 什么的都沒考慮,用起來會出錯。
在網上看到一個函數可以完美解決這個問題:
bool?readline(ifstream&?infile,?string&?textline)
{

while(getline(infile,?textline,?'\n'))
{
??
int?prev_pos?=?0;?//最開始有效字符位置.
??int?post_pos?=?0;?//最后有效字符位置
??
//下面的循環語句能夠用textline.find_first_not_of(filter,pos)來處理,出于效率考慮本處使用這樣的算法
??while(textline[prev_pos]?==?'?'?||?textline[prev_pos]?==?'\t'?||?textline[prev_pos]?==?'\r')//過濾開始空白
???prev_pos++;
??
if(textline[prev_pos]?==?'\0')
???
continue;//假如是空白行則再讀一行進行處理.
??else
??{
?????? post_pos
=textline.length()-1;
??????
while(textline[post_pos]?==?'?'?||?textline[post_pos]?==?'\t'?||?textline[post_pos]?==?'\r')//過濾最后的空白
???????????? {
????????????????? post_pos
--;
???????????? }
?????? textline
=textline.substr(prev_pos,post_pos+1-prev_pos);
???
return?true;//成功讀取一有效行
??}
??
}
return?false;//讀到文檔的末尾
}

我根據上面這個函數 重載了一個char* 版的:

bool?readline(ifstream&?infile,?char*?textline)
{
while(infile.getline(textline,32))
{
??
int?prev_pos?=?0;?//最開始有效字符位置
??int?post_pos?=?0;?//最后有效字符位置.??
??string?str=textline;
??
//下面的循環語句能夠用textline.find_first_not_of(filter,pos)來處理,出于效率考慮本處使用這樣的算法
??while(str[prev_pos]?==?'?'?||?str[prev_pos]?==?'\t'?||?str[prev_pos]?==?'\r')//過濾開始空白
???prev_pos++;
??
if(str[prev_pos]?==?'\0')
???
continue;//假如是空白行則再讀一行進行處理
??else
??{
???????? post_pos
=str.length()-1;
????????
while(str[post_pos]?==?'?'?||?str[post_pos]?==?'\t'?||?str[post_pos]?==?'\r')//過濾最后的空白
???????? {
?????????????? post_pos
--;
???????? }
????????
string?str2=str.substr(prev_pos,post_pos+1-prev_pos);
???????? strcpy(textline,str2.c_str());
????????

???return?true;//成功讀取一有效行
??}
}
return?false;//讀到文檔的末尾
}


posted @ 2010-03-27 18:37 Bill Hsu 閱讀(1820) | 評論 (3)編輯 收藏
GPU水面模擬

先上個自己實現的水面模擬圖:


效果比較簡單,只是模擬了下水面的反射效果。折射與Fresnel系數沒有考慮。

水面模擬大致需要分這么幾步:
1.剪裁掉水面以下的頂點[gpu里的clipplane要注意轉換到Clip Space],
將攝像機放到同原攝像機關于水面對稱的位置,比如原來攝像機在(x,y,z),
此時就該把攝像機放在(x,-y,z),up向量也要設置成向下的。
再把場景渲染到Render Target的紋理上(我用的紋理大小是256*256),不知道為什么Render Target的紋理大小不能超過窗口大小,超過的話渲染會出錯,知道的大大告訴我一下哈。

于是,就得到了這樣一個紋理:


2.將上面得到的紋理與水面的頂點對應.
把Vertex Shader中乘過變換矩陣后的坐標傳到Pixel Shader,
在PS中計算

?? ???? float2 clipspace = input.Coord.xy / input.Coord.w;
?? ???? clipspace.x=((clipspace.x * 0.5f) + 0.5f);
?? ???? clipspace.y = ((clipspace.y * -0.5f) + 0.5f);
?? ???? clipspace.x=1-clipspace.x;
既可以讓水面頂點與紋理對應,然后再想辦法把紋理坐標擾亂來模擬水面波動。

3.再渲染一次場景就可以了。

大家也可以參考下Azure的水面渲染源代碼:
http://www.azure.com.cn/article.asp?id=186

posted @ 2010-03-23 20:59 Bill Hsu 閱讀(2018) | 評論 (0)編輯 收藏
可編程管道下的剪裁平面

剪裁平面 (Clip Plane) 在圖形學領域有著重要的作用,比如水面模擬中,渲染折射紋理時,我們就必須將水面以上的頂點通過剪裁平面剪裁掉。

在過去的固定渲染管道時代,剪裁平面的實現較為簡單,比如在 DirectX 9 中,可以先設定剪裁平面在世界坐標系下的方程 (ax+by+cz+d=0) ,再調用 SetClipPlane(DWORD Index,CONST float * pPlane) 這個 API 函數就可以了。

?

附上例子程序:

vPosition=D3DXVECTOR3(0,0,0); // 平面上一個點
vNormal=D3DXVECTOR3(0,1,0); // 法向量
D3DXPlaneFromPointNormal(?&clipplane,?&vPosition,?&vNormal?); // 生成剪裁平面

m_pDevice()->SetClipPlane(?0,?(
float *)clipplane);?

?

然而,在現在的可編程管道 (programmable pipeline) 下,設置的剪裁平面會被在剪裁坐標系下處理,而不是在世界坐標系下。

解決這個問題的方法有:

1)? 給要剪裁的頂點做標記,在Pixel Shader中把它剪裁掉。

2)? 使用近斜平面裁剪(Oblique Near-Plane Clipping),即修改投影矩陣,將要剪裁的頂點放在視截體之外,從而避免了該頂點的繪制。

3)? 修改平面方程,使之從世界坐標系轉換到剪裁坐標系。


上述方法中,第一種和第二種效率并不高:在
Pixel Shader中剪裁沒有減少任何不必要的頂點處理,而計算近斜平面裁剪矩陣較為繁瑣。所以,方法三是最佳選擇。

?要將一個平面從世界坐標系轉換到剪裁坐標系,必須求出這個變換矩陣。

設平面方程ax+by+cz+d=0,用一個4維向量來n表示(a,b,c,d),設平面上有個點p:(x,y,z,1)。根據平面方程的定義,有:


nTp = ax + by + cz + d = 0

設矩陣R可以讓點P從世界坐標系轉換到剪裁坐標系,矩陣Q可以讓平面n實現同樣的變換。那么,有:

p'= Rp
n'= Qn

其中p'n'分別是轉換后的點與平面。


n'Tp'= 0
(Qn)T (Rp) = 0
nTQTRp = 0


如果:QTR = I

那么:

nTQTRp = nTIp = nTp = 0

于是:

QT = R-1
Q
= (R-1)T

DirectX 3D中,將一個點從世界坐標系轉換到剪裁坐標系,所用的矩陣為觀察矩陣與投影矩陣的乘積,即:

D3DXMATRIX??TranMatrix?=?matView*matProj;

(TranMatrix為所求的變換矩陣,matViewmatProj分別為觀察矩陣與投影矩陣)

?

附上在D3D中變換的完整代碼:

D3DXPLANE?tempPlane?=?clipplane;
D3DXPlaneNormalize(&tempPlane,?&tempPlane);

D3DXMATRIX??TranMatrix?=?matView*matProj;
D3DXMatrixInverse(&TranMatrix,?NULL,?&TranMatrix);
D3DXMatrixTranspose(&TranMatrix,?&TranMatrix);
D3DXPlaneTransform(&tempPlane,?&tempPlane,?&TranMatrix);

參考資料:

1.Back Face Culling Notes ,Jordan Smith (University of California, Berkeley)

http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/backfacecull.shtml?

2.GameDev Forum

http://www.gamedev.net/community/forums/topic.asp?topic_id=402381

3.Oblique Near-Plane Clipping with Orthographic Camera ,Aras

http://aras-p.info/texts/obliqueortho.html

posted @ 2010-01-20 22:00 Bill Hsu 閱讀(2046) | 評論 (2)編輯 收藏
矩陣求逆代碼

     摘要: 感覺線性代數作業里一直少不了矩陣求逆,

寫個帶輸出算逆矩陣的步驟的矩陣求逆程序,希望給即將或正在學線代的同學一點方便。  閱讀全文

posted @ 2009-12-11 22:23 Bill Hsu 閱讀(6800) | 評論 (8)編輯 收藏
僅列出標題
共9頁: 1 2 3 4 5 6 7 8 9 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜视频一区二区| 欧美综合国产| 国产精品狠色婷| 欧美三区在线视频| 国产精品v欧美精品v日韩| 亚洲视频高清| 国产精品久久久久久久电影| 欧美日韩综合网| 国产欧美精品va在线观看| 国产视频在线一区二区| 一区在线免费| 亚洲每日更新| 性欧美videos另类喷潮| 老色批av在线精品| 亚洲全黄一级网站| 亚洲精品一区在线观看香蕉| 宅男精品视频| 久久精品国产综合精品| 猛干欧美女孩| 国产精品毛片va一区二区三区| 国内免费精品永久在线视频| 在线不卡亚洲| 亚洲综合电影| 欧美成人精品1314www| 一本色道久久综合亚洲二区三区 | 国产精品久久久久久久久久免费看 | 欧美天天视频| 国产一区亚洲一区| 中国亚洲黄色| 欧美黄色aa电影| 欧美一区二区三区四区高清| 欧美日韩免费观看一区| 精品999成人| 亚洲一区二区三区久久| 欧美激情性爽国产精品17p| 亚洲永久网站| 欧美视频中文在线看| 亚洲欧洲视频| 裸体女人亚洲精品一区| 亚洲欧美日韩一区二区在线 | 欧美日韩成人综合在线一区二区| 国产精品午夜在线观看| 亚洲精品一区二区三区在线观看| 久久免费的精品国产v∧| 亚洲天堂av在线免费| 欧美日韩在线播放| 亚洲人屁股眼子交8| 久久综合久久88| 先锋a资源在线看亚洲| 国产精品入口福利| 午夜精品一区二区三区在线播放 | 久久理论片午夜琪琪电影网| 国产九九精品视频| 亚洲一区亚洲二区| 在线看日韩av| 午夜电影亚洲| 欧美激情第五页| 久久www免费人成看片高清| 国产精品主播| 午夜欧美电影在线观看| 亚洲午夜精品一区二区三区他趣| 欧美高清一区| 夜夜爽www精品| 99精品国产热久久91蜜凸| 欧美日韩理论| 亚洲欧美变态国产另类| 亚洲视频一二区| 国产美女诱惑一区二区| 久久久久久电影| 久久久不卡网国产精品一区| 18成人免费观看视频| 乱人伦精品视频在线观看| 老司机aⅴ在线精品导航| 亚洲精品中文字| 中文久久精品| 国产婷婷色一区二区三区在线| 午夜精品在线| 久久久91精品国产一区二区三区 | 亚洲一区999| 国产日韩精品入口| 久久一二三四| 欧美精品一卡二卡| 亚洲欧美三级伦理| 久久精品国产99国产精品澳门| 亚洲电影欧美电影有声小说| 91久久精品久久国产性色也91| 欧美日韩国产黄| 久久高清一区| 免费人成网站在线观看欧美高清 | 亚洲电影观看| 国产精品成人av性教育| 久久久噜噜噜久久久| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲人成人99网站| 亚洲资源av| 亚洲精品婷婷| 亚洲欧美日韩在线播放| 91久久精品国产91久久| 亚洲欧美激情一区二区| 亚洲裸体俱乐部裸体舞表演av| 亚洲午夜日本在线观看| 亚洲国产精品一区二区www| 亚洲网站视频| 亚洲国产精品久久久久久女王| 中文av字幕一区| 91久久在线视频| 午夜欧美精品久久久久久久| 亚洲精品女av网站| 久久精品毛片| 欧美在线综合视频| 欧美日韩精品是欧美日韩精品| 麻豆精品网站| 国产亚洲一区二区三区在线播放| 亚洲国产精品成人精品| 亚洲综合成人婷婷小说| 麻豆国产精品va在线观看不卡| 亚洲午夜精品视频| 久热精品在线视频| 久久人人爽人人爽| 国产精品系列在线播放| 一本久道久久综合中文字幕| 亚洲黄网站在线观看| 久久精品成人一区二区三区| 性欧美长视频| 国产精品看片你懂得| 亚洲美女av电影| 99视频有精品| 欧美日本亚洲| 亚洲激情在线观看| 亚洲最黄网站| 欧美成年人在线观看| 欧美**人妖| 91久久综合| 欧美激情片在线观看| 欧美r片在线| 在线成人av| 蜜臀av一级做a爰片久久| 久久午夜精品一区二区| 国产一区二区欧美| 欧美在线视频一区二区三区| 久久久综合网| 加勒比av一区二区| 久久综合色天天久久综合图片| 久久久久久久久久久成人| 国产在线精品成人一区二区三区| 亚洲欧美资源在线| 久久综合国产精品| 一区二区在线不卡| 欧美激情中文字幕一区二区| 亚洲美女在线观看| 欧美在线视频导航| 激情自拍一区| 欧美成人在线免费观看| 99av国产精品欲麻豆| 亚洲专区免费| 国产亚洲一区二区三区| 久久夜色精品国产噜噜av| 欧美激情2020午夜免费观看| 亚洲每日更新| 国产女主播一区| 欧美成人一二三| 制服丝袜激情欧洲亚洲| 久久精品欧美| 99精品欧美一区| 国产在线视频欧美| 欧美高清视频在线| 午夜一级久久| 亚洲七七久久综合桃花剧情介绍| 亚洲午夜激情网页| 国内精品久久久久久久影视麻豆| 免费不卡在线视频| 中文av一区特黄| 欧美成人综合| 亚洲制服少妇| 亚洲经典一区| 国产亚洲一区二区在线观看| 欧美成人午夜激情| 亚洲免费在线观看视频| 亚洲成色www久久网站| 亚洲免费在线视频一区 二区| 国产视频一区欧美| 欧美日韩高清免费| 久久字幕精品一区| 亚洲资源av| 一区二区三区高清不卡| 国产伦精品一区二区三区照片91 | 国产精品一二三四区| 免费成人av| 久久riav二区三区| 亚洲影视在线播放| 亚洲精品乱码久久久久| 久久久蜜桃一区二区人| 亚洲一区二区精品在线| 亚洲精选成人| 亚洲高清123| 激情久久久久久久久久久久久久久久| 欧美性片在线观看| 欧美大片一区二区三区| 久久久另类综合| 久久国产精品第一页|