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

歲月流轉,往昔空明

C++博客 首頁 新隨筆 聯系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks

#

上次用boost.python的時候boost還是1.33的時候。

那個時候剛剛開始看shader的東西,就用boost.python做了用python做shader語言的演示。
其實當時看boost.python完全是半懂不懂的。
這段時間找了個C的數值庫,要Python的接口,Python For C的Interface又懶得使用,還是用boost.python把一些我要的功能給封裝出來好了。
結果一看才發現對Boost.Python的理解好了不好。

看來人都是在慢慢進步的。。。哈哈。

posted @ 2008-07-14 19:05 空明流轉 閱讀(566) | 評論 (0)編輯 收藏


以前看D3D的時候,就發現骨骼動畫是個有點難以掌握的東西。
但是也可以說,骨骼動畫是3D齊次空間變換的集大成者,掌握了骨骼動畫,差不多3D空間變換你也就掌握了。
其他所有的層級變換,基本上都不會脫離骨骼動畫需要你了解的東西。

網上骨骼動畫的demo多如牛毛,我空間想象能力不行,看過無數資料都不大明白骨骼怎么轉,皮膚怎么蒙。況且那些基于DX、基于GL的代碼都長的不行,難看的明白。

前兩天vczh搞了個C#的弱智版的2D物理Engine,我今天就搞個C#和GDIPlus的低能版骨骼變換。雖然是2D的,但是原理和實現基本和3D的完全一樣。希望這已經簡單到不能再簡單的代碼能幫助大家搞明白骨骼動畫是咋回事。

代碼框架上都有注釋了,矩陣使用的是Sharp3D的數學庫,已經在包中了。不過也就用了矩陣乘法和矩陣-矢量乘法,還有一些矢量加減法。

源代碼在此下載
。

2樓的回帖給了一個地址,是關于骨骼運動變換的數學推理和理論解釋,還討論了左右手系的問題。理論上有問題的親們可以參照此篇文章

截圖:

骨骼的初始狀態


變換后的骨骼


加了一圈子頂點,這個雖然是2D的,但也是貨真價實的蒙皮哈。

posted @ 2008-06-07 19:35 空明流轉 閱讀(8503) | 評論 (9)編輯 收藏

 

 1 for(int i=0; i<numBS; i++)
 2 {
 3   uint offset = bsPitch * bsOffsets.Load(i);
 4   float weight = bsWeights.Load(i);
 5   dp = bsVertices.Load(offset + 3*vertexID+0);
 6   dn = bsVertices.Load(offset + 3*vertexID+1);
 7   dt = bsVertices.Load(offset + 3*vertexID+2);
 8 
 9   pos += dp * weight;
10   normal += dn * weight;
11   tangent += dt * weight;
12 }
13 



Blend Shapes 放在一個固定的數組bsVertices中,
按照

S0V0, S0V1 ... S0VN, S1V0 ... SMVN
的形式存放.

numBS說明了有多少個BS被混合,也就是slots的大小;
bsPitch為SxV0 - SxVN的長度;
bsOffsets[i] 代表第i個slot使用了哪個BS.
posted @ 2008-05-21 10:58 空明流轉 閱讀(462) | 評論 (0)編輯 收藏

最近開始抽空在看GPU Gems 3了。本來想挑幾篇全文翻譯,但是無奈自己英語水平薄弱,同時最近老板逼得緊,也沒有那么多時間,于是便準備以導讀的形式,將文章的主干部分翻譯出來,幫助英文不好的筒子們。
導讀也是我自己讀書的總結。文章的核心內容一定會提及.圖和源碼,通常我會標注上對應的圖書上的figure和list,各位自行參考。基本維持原文的篇章段落,但是一般不會逐字句的考究。
至于能有多少篇,我倒是不能保證。不過我所用的電子版是那個26M的chm,我讀的時候會把它翻成PDF并加注,如果有筒子需要我注釋后的pdf,可以與我聯系:

mail: wuye9036   _AAAAATTTTT_ google _dotdotdotdotdot_com

--------------------------------------------------------------------------------

Chapter I 運用GPU構造復雜的過程化地形
1.1 Introduction
過程化地形的應用已經有不少的歷史了,Game Programming Gems 2上就已經有了不少成熟的過程化地形的方法,比方說隨機斷層、基于噪聲的、基于分形理論的、中點分割加擾動的。
不過這些算法在現代硬件上都時有缺陷的,特別是針對規模很大的地形,要么只能在CPU上實時生成,要么就得預存儲起來,但是不管怎么說都面臨著很大的資源開銷;其次這些算法都是只能生成有些起伏的平面,沒辦法表現山洞、巖石凸角一類的3D特征。本文運用DX10的Geometry Shader與Stream Output,彌補了上述兩個缺陷。

1.2 移動立方體與密度函數
要解決3D的地形特征,首先要解決3D地形特征的表達問題。文中將空間劃分為多個Blocks,每個Block代表了世界坐標系中1*1*1大小的空間。每個Block由一個3D紋理來表達。由于使用了過程化的方法,每個Block可以在運行的時候動態生成,這樣只需要保留那些能看得見的blocks,從而解決了存儲問題。
概念上,一個3D的地形可以由一個密度函數來表達。對于每個空間中的點(x, y, z),都有唯一對應的密度值。我們假設,對于任意一個空間中的點,如果點在地形內部/巖石內部當且僅當點上的密度值大于0。那么小于0的點,自然就在地形之外,如在空氣中,水中等等。而巖石表面上的點密度剛好等于0。
那么自然,這些巖石表面上密度值等于0的點,就是我們要繪制的“表面”。
在將空間劃分為Block后,還要將每個block進一步細分為多個voxel(體素)。我們假定體素內密度變化時連續的。那么很顯然,如果一個體素的頂點上密度有正有負,那么必然里面會有一個(也有可能是多個)0值面。問題就轉化為,如何根據體素各個頂點的密度值,求出這個體素內的0值面。如果再把這個假設限定的嚴格一點,如果體素內密度變化是線性的,那么這些面可以由0-5個三角形來表示;求得這些三角形的方法,被稱為Marching Cube算法。
很顯然,有多少個三角形,每個三角形的頂點落在哪條邊上,是由八個頂點的密度的正負值所決定的,而值的相對大小則決定了三角形的頂點在邊上靠近那個頂點。那么也就是說,一個體素內0值面的分布共有2^8中情況。如果頂點密度為負,那么標記為0,頂點密度為正則標記為1,則八個頂點的情況可以由一個Byte來表示。

圖1-3

如果這個字節的值為0或者為255,那么說明所有的頂點都為正或為負,那么說明體素中并沒有地表面。Martin Frank為剩下的254中情況建立了一個查找表。其中基本的情形有14種,其余的均可由這些基本情況的對稱或旋轉求得。

圖1-4

當確定了三角形的三個頂點分布于哪些邊上后,便可用插值的方法求出所在位置。頂點將位于0值點處。例如,一條邊AB上有一個0值點P,如果A的密度0.3,B的密度-0.1,那么PB的長度是PA長度的三倍。

1.2.2 查找表
上文已經提到了如何通過體素角點的密度值,就會知道會生成哪些多邊形;這些多邊形的頂點落在哪些邊上。
接下來,我們將用討論這些理論如何在GPU上實現。
首先我們建立一張查找表
int case_to_numpolys[256];
其中每種情況能產生多少個三角形。
第二張查找表,
int3 edge_connect_list[256][5];
這張表保存了每種情況對應的5個三角形。并且我們將一個體素中的12條邊按照0-11編號(圖 1-5),則查找返回的返回的int3指出了,每個三角形的三個頂點分別落在哪條邊上。

圖 1-5 Case 193 的0值多邊形情況

下面的例子很好的說明了這一點。
我們以case 193為例。193總共有3個三角形,那么case_to_numploys[193] = 3,其次,edge_connect_list[193][]返回這樣的結果:

int3 edge_connect_list[193][0]: 11 5 10
int3 edge_connect_list[193][1]: 11 7 5
int3 edge_connect_list[193][2]: 8 3 0
int3 edge_connect_list[193][3]: -1 -1 -1
int3 edge_connect_list[193][4]: -1 -1 -1

Geometry Shader在查找了這兩張表的信息之后,并計算出頂點在邊上的具體位置,便會返回3個多邊形列表所需要的9個頂點。由于創建Marching Cubes查找表需要很多的計算量,因此建議預先計算好并在運行前載入。該表在光盤上可以找到。

posted @ 2008-05-20 20:38 空明流轉 閱讀(2175) | 評論 (2)編輯 收藏

     摘要:
討論腳本編程與靜態語言的異同點,
總結一下近期腳本編程的心得,
吸取教訓,
并歡迎大家探討、指點。  閱讀全文
posted @ 2008-05-16 15:51 空明流轉 閱讀(2117) | 評論 (4)編輯 收藏

這個設計主要是拿來保證跨組件的時候能盡可能的保護型別安全.

我今天晚上早些時候也往SoftArt里面提交了一個type to id的實現,使用宏和特化機制
但是這個版本的一個很大的問題就在于用起來不是很方便,每注冊一個類需要2行代碼,而且都是
#define PARAM float
#include REGTYPE()
這樣的非常規的宏用法.
但是由于它是分類實現的,所以可以在里面補充一些額外的功能,比如自動的具名常量的生成.

所以晚上回來的時候又用boost的mpl寫了一個原形,基本上是純模板的.注冊類只需要一行,但是宏實現版本中一些半自動化的特點也損失的差不多了.
回頭還是要考慮用preprocessor結合MPL,看看能不能做到兩個特點兼備.

mingw + gcc 4.2.1下通過

#include <iostream>
#include 
<boost/smart_ptr.hpp>

#include 
<boost/mpl/vector.hpp>
#include 
<boost/mpl/find.hpp>
#include 
<boost/mpl/at.hpp>
#include 
<boost/mpl/size.hpp>
#include 
<boost/mpl/if.hpp>
#include 
<boost/mpl/less.hpp>
#include 
<boost/mpl/int.hpp>
#include 
<boost/mpl/less_equal.hpp>

#include 
<boost/type_traits/is_same.hpp>

using namespace std;

struct empty{};

#define BEGIN_REGISTER_TYPE() typedef boost::mpl::vector<empty
#define REGISTER_TYPE(type) ,type
#define END_REGISTER_TYPE() > typelst;

namespace shader_constant
{
    BEGIN_REGISTER_TYPE()
        REGISTER_TYPE(
int)
        REGISTER_TYPE(
float)
        REGISTER_TYPE(
bool)
    END_REGISTER_TYPE();

    
static const int size_of_typelst = boost::mpl::size<typelst>::value;
    typedef boost::mpl::int_
<size_of_typelst> size_of_typelst_t;

    template
<class T>
    
struct type2id{
        typedef typename boost::mpl::find
<typelst, T>::type iter;
        
static const int id =
            boost::mpl::if_
<
                boost::is_same
<boost::mpl::end<typelst>::type, iter>,
                boost::mpl::int_
<0>,
                typename iter::pos
            
>::type::value;
    }
;

    template
<int id>
    
struct id2type{
        typedef boost::mpl::int_
<id> int_id;
        typedef boost::mpl::int_
<0> int_0;

        
//type = (0 < id && id <= size) ? typelst[id] : empty;
        typedef typename boost::mpl::if_<
            boost::mpl::and_
<
                boost::mpl::less
<int_0, int_id >,
                boost::mpl::less_equal
<int_id, boost::mpl::size<typelst>::type >
            
>,
            typename boost::mpl::at
<typelst, int_id>::type,
            empty
        
>::type type;
    }
;
}


using namespace shader_constant;

typedef 
void (*Assignments)(void* p1, void* p2);

template
<class T>
void AssignImpl(void* p1, void* p2)
{
    cout 
<< typeid(T).name() << endl;
    
*(T*)p1 = *(T*)p2;
}


template 
<> void AssignImpl<empty>(void* p1, void* p2)
{
    cout 
<< "error type!" << endl;
}


 Assignments assigns[size_of_typelst
+1];

template 
<int i>
struct assigns_initializer
{
    assigns_initializer
<i-1> m;
    assigns_initializer()
{
        assigns[i] 
= &AssignImpl<typename id2type<i>::type >;
        }

}
;

template 
<>
struct assigns_initializer<-1>
{
    assigns_initializer()
{
        }

}
;

static assigns_initializer<size_of_typelst> ai;

typedef 
double T;
int main()
{
    T i1(T(
0));
    T i2(T(
10));
    assigns[type2id
<T>::id](&i1, &i2);
    cout 
<< i1;
    system(
"pause");
    
return 0;
}

posted @ 2008-03-08 00:55 空明流轉 閱讀(1314) | 評論 (4)編輯 收藏

2月22日更新:
修改了項目設置(大換血。。。)。昨天下過的最好重新check out。

2月21日更新:

已經將SoftArt整體放置到SF的SVN上了。

SVN地址: https://softart.svn.sourceforge/svnroot/softart/prealpha
svn co https://softart.svn.sourceforge/svnroot/softart/prealpha softart

由于目前的渲染器離成品還很遙遠,所以就沒有以Release的形式放出。Version 6 中,CartoonDemo大家可以自行從solution里面移除;EFLIB需要項目地址上下載Release,然后在VC環境中另行設置,給大家帶來的不便深表歉意。

2005 SP1 下通過(有點bug)

感謝亨德列克和叛逆者兩位前輩的無私指點(不管哪一方面都是,從技術到態度到Fix Defects到New Ideas),非常感謝~~~拜~~~


該軟件渲染器名字就叫SoftArt,本來準備叫做ColorfulSnail(哈,因為Debug的時候它的運行速度是在是太慢了),但是無奈Snail已經被人注冊過了,所以就還是叫這個名字了。
每個開發階段我都會有一個項目代號,目前的這個還是prealpha階段,所以就叫prealpha好了。

今天放上去的是支持庫Essential Functions Library,大家可以去我的項目地址下載。

https://sourceforge.net/projects/softart/

也叫Efl Functions Library,提供了一些基本的數學工具(比方說基本的向量和矩陣的運算)。項目的主體代碼我需要將接口整理完畢以后再行發布。目前僅https://softart.svn.sourceforge.net/svnroot/softart/prealpha 支持VS2005編譯器,很快會考慮2008和GCC 4.2 or later。

希望大家有什么意見和建議盡管提出,我一定會盡可能將大家的想法加入到我的TODO LIST中。

posted @ 2008-02-20 18:44 空明流轉 閱讀(2014) | 評論 (3)編輯 收藏

     摘要: 總結了我在以往項目中使用設計模式的經驗;
我閱讀《設計模式》的心得;
討論一些在閱讀時產生,實踐中解決的困惑,為設計模式新手提供一條可以參考的學習路線;
并希望與老手們一同探討、交換:
設計模式在實際中使用中的經驗與教訓;關于拓展現有設計模式、聯合使用多個設計模式的案例和思路。  閱讀全文
posted @ 2008-02-17 15:11 空明流轉 閱讀(1787) | 評論 (0)編輯 收藏

我也不知道這個能不能算是2005的bug吧,反正我是想不太明白。
今天在對我的pool使用policy的設計的時候發現的。

//前面代碼省略

struct single_thread
{
  template
<class T> struct thread_safe_type
  {
     typedef boost::add_volatile
<T> result;
  }
};

template
<class ThreadingModel>
struct pool : private ThreadingModel
{
  typedef typename ThreadingModel::thread_safe_type
<size_t>::result index_t;//其實有沒有typename都一樣。
 
//other public members

private:
 index_t first_free_;
};
看起來這段代碼是完全能正常工作的,是吧??墒呛懿恍业氖沁@代碼在2005上沒法正常通過。
解決的方法很簡單:
typedef ThreadingModel TM;
typedef TM::thread_safe_type<size_t>::result index_t;
就可以大功告成了。不知道是不是typename的問題。但是從編譯器的出錯提示來看并不能和簡單的typename的問題混為一談。另外,如果這個thread_safe_type不是模板而只是一個普通的struct或者typedef的話,也是沒有這個問題的。

如果有知道這個問題出現的根本原因的,請指教。

posted @ 2008-02-16 21:45 空明流轉 閱讀(1846) | 評論 (6)編輯 收藏


今天把軟渲器前后跑了一下,排掉了z buffer的一個很惡心的bug后,終于順暢了。
雖然前前后后的球啊、方盒子啊、平面啊測試了不少,但是差不多像Demo的這還是頭一個。
由于不支持復雜的ddx、ddy(ps僅僅支持求輸入寄存器的ddx ddy),因此ps30的很多東西就沒法做了。

一開始實現的時候沒考慮GS,所以也就沒有ps40可言。
不過對于軟件渲染器來說,沒有GS,以及沒有DX11的TS也算不得什么硬傷。

博客的文章上,這之前還缺設計模式的最后一個話題沒講完。
等結束了尾巴話題以后,就簡單的說一下軟件渲染器的問題。
其實沒有什么太大的難度,代碼量也不大,核心庫也就8K行代碼。

源代碼由于還比較混亂(主要是很多地方都是雙向),所以還沒有放出來。準備在我放假前放到sourceforge上,這也是我答應了叛兄的。
然后可能要在他的幫助下把SR規范一下后作為KlayGE的software renderer plug-in用。

這是一個勾邊的Demo。原理很簡單,先正面渲染一次,再沿法線拉伸一下模型,背面渲染一次。
效果圖。

光擺圖我也不敢放首頁啊……
主要是征詢一下,這段時間我做什么Demo比較好(如果有太復雜場景的就算了,因為軟件渲染器速度有限,但是可以有比較復雜的效果)
還有個就是,征詢一下SF上project的名字。。。
posted @ 2007-12-30 22:28 空明流轉 閱讀(1044) | 評論 (0)編輯 收藏

僅列出標題
共12頁: First 2 3 4 5 6 7 8 9 10 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            永久久久久久| 国产欧美日韩免费| 亚洲欧洲午夜| 亚洲激情成人在线| 男人插女人欧美| 亚洲日本乱码在线观看| 亚洲精选国产| 国产精品久久久久久久久久妞妞 | 亚洲欧美综合网| 欧美一级欧美一级在线播放| 韩日精品中文字幕| 亚洲国产精品久久久久秋霞影院| 欧美理论在线播放| 午夜精品一区二区三区在线| 久久成人免费日本黄色| 日韩视频一区二区三区在线播放免费观看 | 日韩亚洲在线观看| 国产片一区二区| 欧美风情在线| 国产精品美女久久| 欧美大片免费观看在线观看网站推荐| 久久精品色图| 亚洲美女中文字幕| 国产在线欧美日韩| 亚洲精品免费看| 国产一区99| 亚洲精品乱码久久久久久| 国产精品扒开腿做爽爽爽视频| 久久国产直播| 欧美日韩人人澡狠狠躁视频| 久久女同精品一区二区| 欧美视频官网| 欧美激情乱人伦| 国产亚洲亚洲| 国产精品99久久久久久宅男 | 欧美日韩中文精品| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美视频日韩视频在线观看| 免费久久99精品国产| 国产精品免费一区豆花| 亚洲狠狠丁香婷婷综合久久久| 国产亚洲成年网址在线观看| 夜夜嗨av色综合久久久综合网| 在线精品视频一区二区| 午夜精品影院在线观看| 亚洲午夜精品17c| 欧美黄在线观看| 欧美91视频| 一区二区视频在线观看| 欧美亚洲三区| 午夜精品久久久久久久男人的天堂| 暖暖成人免费视频| 欧美成人久久| 永久免费精品影视网站| 久久精品免费播放| 久久久久.com| 国产亚洲欧美激情| 亚洲欧美视频在线| 销魂美女一区二区三区视频在线| 欧美日韩三级一区二区| 亚洲人成人一区二区三区| 亚洲欧洲日本mm| 欧美成人午夜影院| 亚洲激情成人| 一区二区三区国产在线观看| 欧美日韩高清免费| 99国产精品99久久久久久| av成人激情| 欧美日韩另类字幕中文| 亚洲精品自在在线观看| 中文在线资源观看视频网站免费不卡| 欧美激情无毛| 中文亚洲视频在线| 欧美在线视频免费观看| 国产亚洲福利社区一区| 性色av一区二区三区| 久久免费视频一区| 亚洲国产一区在线观看| 欧美日本成人| 亚洲自拍偷拍网址| 久久影院午夜片一区| 亚洲国产日韩欧美在线图片| 欧美韩国在线| 亚洲综合欧美| 欧美 日韩 国产 一区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美精品一区二区视频| 亚洲精品女人| 午夜精品久久久久久久久久久| 欧美日韩高清在线一区| 亚洲一区制服诱惑| 久久久久久久综合日本| 亚洲精品国产精品国产自| 欧美三级电影精品| 久久超碰97中文字幕| 亚洲国产一区二区三区在线播 | 国产欧美日本在线| 美女久久一区| 亚洲一区二区成人在线观看| 蜜桃视频一区| 午夜欧美大片免费观看| 亚洲国产精品ⅴa在线观看 | 免费观看成人| 亚洲深夜av| 欧美激情第六页| 午夜欧美理论片| 亚洲日本aⅴ片在线观看香蕉| 国产精品久久久久久久久搜平片| 久久深夜福利| 亚洲欧美日韩国产中文| 亚洲精品久久嫩草网站秘色| 久久久精品国产免费观看同学| 99国产精品视频免费观看| 国产一区观看| 国产精品美女一区二区在线观看 | 一区二区三区四区蜜桃| 蘑菇福利视频一区播放| 欧美一区二区在线看| 日韩午夜精品| 亚洲国产老妈| 国产一区二区在线观看免费| 国产精品久久久久91| 欧美精品精品一区| 久久久久久久97| 欧美亚洲在线| 亚洲一级在线| 一区二区三区视频观看| 亚洲激情电影中文字幕| 欧美电影在线免费观看网站| 久久精品国产v日韩v亚洲| 亚洲欧美中文日韩v在线观看| 亚洲毛片在线观看| 亚洲区一区二区三区| 一区二区三区中文在线观看 | 欧美日韩成人在线视频| 欧美99久久| 免费成人你懂的| 美女视频黄免费的久久| 久久一区免费| 美女网站久久| 免费精品视频| 欧美高清在线| 欧美精品v国产精品v日韩精品| 欧美不卡高清| 欧美精品在线网站| 欧美日韩一区二区三| 欧美色123| 国产精品久久波多野结衣| 国产精品乱码| 国产一区二区三区日韩欧美| 狠狠综合久久av一区二区小说| 国内一区二区在线视频观看| 在线观看日韩欧美| 亚洲欧洲一级| 亚洲影院一区| 久久精品一区二区| 欧美成人按摩| 亚洲激情在线视频| 一区二区三区www| 欧美a级一区| 中日韩美女免费视频网站在线观看| 亚洲视频在线二区| 亚洲欧美日韩国产一区二区三区 | 一区二区三区无毛| 亚洲人午夜精品| 亚洲一区二区三区视频播放| 欧美一区国产二区| 久久综合伊人77777麻豆| 亚洲国产欧美不卡在线观看| 999在线观看精品免费不卡网站| 亚洲一区二区三区视频播放| 久久久久看片| 欧美日韩视频在线观看一区二区三区| 国产精品美女999| 亚洲二区视频| 午夜视频一区在线观看| 欧美成人精品| 中文精品99久久国产香蕉| 久久精品国产综合精品| 欧美日韩国产成人在线91| 国产午夜亚洲精品羞羞网站 | 亚洲福利电影| 亚洲综合日韩在线| 欧美成人免费在线| 亚洲自拍偷拍网址| 欧美精品自拍偷拍动漫精品| 黑人一区二区| 亚洲一区日韩在线| 欧美激情偷拍| 欧美在线一二三区| 欧美性一区二区| 亚洲日本电影| 久久久五月天| 亚洲欧美视频在线观看| 欧美日韩国产另类不卡| 伊人伊人伊人久久| 欧美一区国产二区| 中文网丁香综合网| 欧美精选午夜久久久乱码6080| 尤物视频一区二区|