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

歲月流轉,往昔空明

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>
            一本久久a久久免费精品不卡| 亚洲国产乱码最新视频| 亚洲欧美中文另类| 亚洲无限av看| 香港成人在线视频| 午夜精品久久久久久99热软件| 亚洲在线免费| 欧美一区视频| 嫩草伊人久久精品少妇av杨幂| 女同一区二区| 国产精品高潮视频| 国外精品视频| 9久草视频在线视频精品| 亚洲天堂男人| 久久人人爽人人爽| 日韩午夜在线播放| 欧美一区二区三区在线| 欧美激情2020午夜免费观看| 国产精品永久免费视频| 亚洲国产美女| 欧美主播一区二区三区美女 久久精品人| 久久成人一区二区| 亚洲日韩第九十九页| 亚洲一级在线观看| 免费在线观看成人av| 国产精品一二一区| 日韩视频在线观看国产| 欧美在线网站| 亚洲美女福利视频网站| 久久精品网址| 国产精品羞羞答答xxdd| 亚洲免费播放| 久热精品视频| 亚洲男人的天堂在线观看 | 久久久久久久性| 欧美日韩精品二区| 在线观看的日韩av| 久久国产精品第一页| 一区二区欧美日韩视频| 欧美+亚洲+精品+三区| 国产综合久久久久久| 亚洲欧美成人在线| 亚洲免费观看高清在线观看| 久久久免费观看视频| 国产欧美一区在线| 香蕉视频成人在线观看| 亚洲在线观看视频| 玖玖玖国产精品| 国产精品中文在线| 亚洲综合欧美日韩| 一区二区三区色| 欧美日韩成人免费| 夜夜狂射影院欧美极品| 亚洲国产美女久久久久| 麻豆国产va免费精品高清在线| 国产日韩欧美a| 久久精品导航| 久久精品国产69国产精品亚洲 | 狠狠爱综合网| 久久嫩草精品久久久久| 欧美一区二区三区视频在线| 国产精品婷婷午夜在线观看| 午夜精品久久一牛影视| 亚洲欧美自拍偷拍| 国内精品写真在线观看| 欧美 日韩 国产精品免费观看| 久久久久国内| 亚洲欧洲一区二区天堂久久| 91久久综合亚洲鲁鲁五月天| 欧美精品在欧美一区二区少妇| 一区二区三区你懂的| 亚洲无线观看| 狠狠色2019综合网| 亚洲丰满在线| 欧美日韩在线免费| 亚洲欧美日本国产有色| 性18欧美另类| 亚洲人成人一区二区在线观看| 亚洲国产成人av| 欧美日韩亚洲综合在线| 欧美自拍偷拍| 欧美成人精品影院| 亚洲免费网站| 久久中文欧美| 亚洲欧美一区二区在线观看| 欧美在线3区| 亚洲精品一区在线观看香蕉| 亚洲天堂av图片| 尤物精品国产第一福利三区| 亚洲日本电影在线| 国产午夜精品美女视频明星a级| 老司机午夜精品| 欧美精品一区二区三区蜜臀| 欧美在线视频导航| 欧美插天视频在线播放| 午夜精品三级视频福利| 免费欧美在线视频| 欧美在线观看日本一区| 欧美成黄导航| 久久频这里精品99香蕉| 欧美日韩国产色综合一二三四| 久久国产毛片| 欧美日韩精品福利| 欧美wwwwww| 国产午夜亚洲精品羞羞网站| 亚洲精品日韩在线| 精品成人免费| 午夜精彩国产免费不卡不顿大片| 国产精品实拍| 亚洲韩国精品一区| 午夜精彩国产免费不卡不顿大片| 亚洲欧洲精品一区二区三区波多野1战4| 一区二区激情| 日韩性生活视频| 久久综合伊人77777麻豆| 性久久久久久久久久久久| 欧美精品亚洲精品| 美女性感视频久久久| 国产伦精品一区二区三区免费| 91久久精品日日躁夜夜躁国产| 激情久久久久久| 欧美一区二区三区免费视| 亚洲一区免费在线观看| 欧美日韩另类在线| 亚洲日本黄色| 99精品国产福利在线观看免费| 久久人人97超碰人人澡爱香蕉| 久久九九热免费视频| 国产精品永久入口久久久| 一个色综合导航| 亚洲午夜精品网| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 亚洲性图久久| 午夜免费电影一区在线观看| 国产精品国产自产拍高清av| 亚洲精品综合在线| 在线一区二区日韩| 欧美日韩综合另类| 在线中文字幕一区| 欧美一级艳片视频免费观看| 国产精品乱码久久久久久| 亚洲永久精品国产| 欧美一区二区三区视频免费播放| 国产精品丝袜91| 午夜亚洲福利| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲激情视频在线播放| 欧美激情1区2区3区| 一区二区av在线| 久久精品72免费观看| 红桃视频国产精品| 欧美寡妇偷汉性猛交| 9i看片成人免费高清| 欧美一区二区国产| 狠狠色综合播放一区二区| 欧美成人自拍视频| 99在线精品观看| 久久久久久亚洲精品中文字幕 | 一区二区三区高清| 午夜在线精品| 伊人久久综合97精品| 欧美激情一区在线| 亚洲欧美激情一区二区| 老司机午夜免费精品视频 | 麻豆久久精品| 亚洲人成亚洲人成在线观看图片| 欧美日韩亚洲另类| 久久福利毛片| 亚洲精选国产| 久久女同精品一区二区| 亚洲精品欧洲精品| 亚洲视频一区二区| 欧美视频在线免费| 欧美一区免费视频| 亚洲黄色免费电影| 亚洲欧美国产高清va在线播| 狠狠色2019综合网| 欧美日韩中文字幕日韩欧美| 久久国产精品99国产| 亚洲伦理久久| 欧美99久久| 欧美在线91| 亚洲一区二区三区四区在线观看| 精品不卡一区| 国产欧美大片| 欧美日韩精品不卡| 麻豆乱码国产一区二区三区| 亚洲欧美日韩一区二区三区在线观看 | 国内外成人在线| 欧美四级电影网站| 狼人社综合社区| 亚洲男人的天堂在线观看| 亚洲日本在线观看| 免费观看在线综合色| 欧美一区三区二区在线观看| 一本一本大道香蕉久在线精品| 一区二区三区在线观看欧美| 国产精品免费网站在线观看| 欧美极品在线观看| 美国十次成人|