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

隨筆 - 505  文章 - 1034  trackbacks - 0
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


子曾經曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 918813
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

簡介:
This sample uses the GPU to render post-processing effects with source images and video. It takes advantage of the nv_image_processing framework, Cg, and GLSL for to implement several video filters, including guassian blur, edge detection overlay, wobble, TV-noise, radial blur, and night vision.


這個例子用GPU渲染對圖片或視頻進行后處理得到的效果。它利用nv_image_processing框架,Cg還有GLSL實現了幾種視頻過濾器,包括高斯模糊,edge detection overlay, wobble, TV-noise, radial blur, and night vision.

截圖:


編譯:
        VC7.1編譯的,但是我機器上沒裝,只有VC8.0,所以要把其用到的lib也都用VC8重新生成一下(期間會遇到n個編譯不過的地方)。
        lib的solution目錄NVIDIA Corporation\SDK 9.5\LIBS\
        這些lib里面最麻煩的是這個OpenEXR-1.2.1-win32,要自己下載源碼來生成對應的lib.

        最搞的是這個地方,nErrorCode總是1282(0x502),害得程序執行不起來,我重新安裝了驅動也不好使,最后我加了句return直接返回,程序就執行起來了
void gl_assert(const char * zFile, unsigned int nLine)
{
    
return// lyl: 直接返回了
    GLenum nErrorCode = glGetError();

    
if (nErrorCode != GL_NO_ERROR)
    {
        
const GLubyte * zErrorString = gluErrorString(nErrorCode);
        std::cerr 
<< "Assertion failed (" <<zFile << ":"
                  
<< nLine << "" << zErrorString << std::endl;

        exit(
-1);
    }
}

      dshow用的是dxsdk_feb2005_extras.exe里面的,怎一個“煩”字了得啊!
代碼注解:
      渲染核心代碼如下
Scene::render()
{
    
double time;

    
if (_bUseGLSL) {
        time 
= renderGLSL();
    } 
    
else
    {
        
if (!_bUseNVImage) 
        {
            time 
= renderCg();
        } 
        
else
        {
            time 
= renderNVImageProc();
        }
    }
    
return time;
}
沒看到opengl的API不算看到核心,進一個里面看看
Scene::renderGLSL()
{
    assert(_pImageSource 
!= 0);
    unsigned 
int nDownloadedBytes = _pImageSource->pushNewFrame();

    
float nX = 0.0f, nY = 0.0f;

    
float nImageWidth  = static_cast<float>(_pImageSource->image().width());
    
float nImageHeight = static_cast<float>(_pImageSource->image().height());

    
if (nImageWidth < MIN_WIDTH) {
        nX 
= (_nWindowWidth - nImageWidth) / 2;
    }
    
if (nImageHeight < (_nWindowHeight - _pApplicationInfo->height())) {
        nY 
= (_nWindowHeight - _pApplicationInfo->height() - nImageHeight) / 2;
    }

    
double timer = 0.0;

    glClear(GL_COLOR_BUFFER_BIT);

    glViewport(
00, (GLsizei) _nWindowWidth, (GLsizei) _nWindowHeight - _pApplicationInfo->height());
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluOrtho2D(
0, _nWindowWidth, 0,  _nWindowHeight - _pApplicationInfo->height());

    assert(_pProgramGLSL 
!= 0);
    _pProgramGLSL
->setWindowSize(_nWindowWidth, _nWindowHeight);
    _pProgramGLSL
->setTextureSize( (int)nImageWidth, (int)nImageHeight, 0 );

    _pProgramGLSL
->bind();  // bind our vertex/pixel shader program

    
if (_pInteractionController)
        _pInteractionController
->updateUniforms();

    
// draw the image as a textured quad
    glEnable (GL_FRAGMENT_PROGRAM_NV);
    glEnable (GL_TEXTURE_RECTANGLE_NV);

    
// draw the image as a textured quad
    glBegin (GL_QUADS);
        glTexCoord2f (
0.00.0);                    glVertex2f(nX,             (_bInvertTexCoords ? nImageHeight : 0.0+ nY);
        glTexCoord2f (nImageWidth, 
0.0);            glVertex2f(nImageWidth+nX, (_bInvertTexCoords ? nImageHeight : 0.0+ nY);
        glTexCoord2f (nImageWidth, nImageHeight);   glVertex2f(nImageWidth
+nX, (_bInvertTexCoords ? 0.0 : nImageHeight) + nY);
        glTexCoord2f (
0.0, nImageHeight);           glVertex2f(nX,             (_bInvertTexCoords ? 0.0 : nImageHeight) + nY);
    glEnd ();

    glDisable (GL_TEXTURE_RECTANGLE_NV);
    glDisable (GL_FRAGMENT_PROGRAM_NV);

    _pProgramGLSL
->unbind();

    assert(_pApplicationInfo 
!= 0);
    _pApplicationInfo
->setBytesDownloaded(nDownloadedBytes);

    
// draw the GUI elements
    glViewport(0, _nWindowHeight - _pApplicationInfo->height(), _nWindowWidth,  _pApplicationInfo->height());
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluOrtho2D(
0, _nWindowWidth, 0, _pApplicationInfo->height());
    _pApplicationInfo
->render(00);

    
// Now render the slider bars
    glViewport(00, _nWindowWidth, _nWindowHeight);
    
if (_pInteractionController)
        _pInteractionController
->renderSliders(_pApplicationInfo->width(), 0);

    glutSwapBuffers();

    assert(_pImageSink 
!= 0);
                                
// readback 
    unsigned int nReadBytes = _pImageSink->pull(00);
                                
// number of bytes read back will be displayed 
                                
// in successive frame
    _pApplicationInfo->setBytesRead(nReadBytes);

    
return timer;
}
3D部分的主體架構可以參照這兒看看就明白了
        NVIDIA SDK 9.5 Simple Texture Rectangle
原理一樣,都是往一個面上貼了個texture。
                   上面這個的texture是靜態的,從硬盤上的圖片生成的;
                    本篇里面是動態的,一幀一幀的視頻或者圖片進行下后處理然后放到texture里面。

2009-1-9

Video Filter

posted on 2008-12-23 01:45 七星重劍 閱讀(1356) 評論(0)  編輯 收藏 引用 所屬分類: Game GraphicsIDE -- visual c++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美 日韩 国产一区二区在线视频| 亚洲一区二区三区涩| 亚洲香蕉在线观看| 欧美高清视频在线观看| 欧美人与禽猛交乱配| 91久久精品国产| 欧美高清在线精品一区| 在线观看日韩www视频免费| 欧美a级一区| 午夜在线观看免费一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲午夜精品17c| 一本大道久久精品懂色aⅴ| 亚洲电影欧美电影有声小说| 日韩视频―中文字幕| 黑人巨大精品欧美黑白配亚洲| 亚洲一级免费视频| 欧美高清hd18日本| 欧美日韩一区二区在线| 国产精品久久久999| 欧美日韩第一页| 国产精品久久久久7777婷婷| 欧美母乳在线| 国产精品自在线| 一区二区三区久久久| 亚洲精品国产拍免费91在线| 久久久久成人网| 在线观看欧美黄色| 欧美va天堂在线| 国产精品伦一区| 亚洲国产日日夜夜| 欧美老女人xx| 亚洲一区二区在线播放| 一本色道久久综合精品竹菊| 国产精品国产精品国产专区不蜜| 亚洲男人的天堂在线| 亚洲深夜福利网站| 黄色欧美日韩| 亚洲精品久久嫩草网站秘色| 国产精品久99| 美女视频黄a大片欧美| 欧美极品影院| 欧美高清在线视频| 国产精品福利在线观看| 久久久久国产精品一区二区| 久久九九久久九九| 一本久久综合亚洲鲁鲁| 亚洲永久网站| 亚洲经典一区| 亚洲欧美美女| 亚洲精品无人区| 亚洲欧美日本日韩| 亚洲精品视频一区二区三区| 正在播放欧美视频| 亚洲激情二区| 久久国产加勒比精品无码| 日韩视频精品| 国产欧美韩日| 在线亚洲精品福利网址导航| 亚洲女人天堂av| 亚洲免费电影在线观看| 久久av二区| 亚洲电影在线| 亚洲欧美激情视频在线观看一区二区三区| 悠悠资源网亚洲青| 亚洲无线一线二线三线区别av| 亚洲国产专区| 欧美一区二区视频网站| 亚洲系列中文字幕| 欧美成年人网站| 久久婷婷麻豆| 亚洲欧美另类在线| 欧美一区二区三区婷婷月色| 亚洲天堂av在线免费观看| 另类亚洲自拍| 美女爽到呻吟久久久久| 国产人成一区二区三区影院| 一本色道久久综合精品竹菊| 日韩一区二区精品在线观看| 毛片基地黄久久久久久天堂| 久久久久久久综合| 国产精自产拍久久久久久| 日韩一二三区视频| av不卡在线看| 欧美精品久久久久久| 亚洲国产欧美不卡在线观看| 在线观看的日韩av| 久久婷婷综合激情| 亚洲精品免费网站| 老司机aⅴ在线精品导航| 欧美日韩免费观看一区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 免费观看日韩| 免费成人黄色av| 一区二区三区产品免费精品久久75| 久久综合国产精品台湾中文娱乐网| 久久久999精品| 国产欧美日韩视频一区二区| 午夜精品影院| 蜜桃精品久久久久久久免费影院| 狠狠色丁香婷婷综合影院| 欧美一级视频一区二区| 久久久久久久久久码影片| 激情亚洲成人| 欧美gay视频激情| 亚洲欧洲一区二区天堂久久| 亚洲美女在线国产| 欧美日韩在线播放| 亚洲综合日韩在线| 久久精品成人一区二区三区蜜臀| 国内精品视频666| 免播放器亚洲| 99热这里只有成人精品国产| 国产亚洲福利社区一区| 欧美亚洲网站| 另类尿喷潮videofree | 久久天堂成人| 亚洲国产精品www| 一区二区三区成人| 欧美午夜不卡| 久久精品视频网| 亚洲欧洲日本一区二区三区| 亚洲综合首页| 一区二区三区在线观看视频 | 久久精品国产久精国产一老狼| 国产亚洲欧洲一区高清在线观看| 狼人社综合社区| 99国产精品视频免费观看一公开| 欧美一区二区精美| 亚洲国产精品传媒在线观看| 国产精品成人一区二区三区吃奶| 久久激情五月激情| 亚洲免费观看| 久久久精品国产免大香伊 | 亚洲精品一区二区三区99| 午夜精品久久| 亚洲片国产一区一级在线观看| 欧美午夜女人视频在线| 久久久国产成人精品| 日韩手机在线导航| 亚洲日本欧美日韩高观看| 国产精品v欧美精品v日韩精品| 欧美中文字幕久久| 亚洲精品一区二区三区在线观看| 久久激情一区| 亚洲视频每日更新| 久久久久国产免费免费| 99re6这里只有精品| 国产亚洲精品激情久久| 欧美日韩精品综合| 蜜桃av综合| 久久精品道一区二区三区| 一区二区三区免费观看| 欧美成在线视频| 久久综合色综合88| 西西人体一区二区| 亚洲网站啪啪| 日韩一级视频免费观看在线| 尤物yw午夜国产精品视频| 国产欧美日韩精品a在线观看| 欧美了一区在线观看| 老司机午夜精品视频| 久久黄色网页| 欧美在线一二三四区| 亚洲欧美视频| 亚洲影院免费观看| 国产精品99久久不卡二区| 亚洲毛片一区二区| 亚洲精品一区二区三区av| 亚洲黄色性网站| 欧美国产日韩一区二区三区| 免费观看成人| 欧美高清视频一区二区三区在线观看 | 免费亚洲婷婷| 蜜乳av另类精品一区二区| 久久国产一区二区| 欧美一区视频在线| 先锋资源久久| 欧美在线网址| 久久久九九九九| 久久偷看各类wc女厕嘘嘘偷窃| 欧美成人高清视频| 国产精品视频最多的网站| 久久综合激情| 国产精品九色蝌蚪自拍| 日韩视频精品在线| 亚洲国产另类精品专区| 亚洲女同精品视频| 欧美一区二区视频观看视频| 欧美日韩免费一区| 日韩一级黄色av| 久久天天狠狠| 久久国产精品72免费观看| 亚洲一区视频在线| 亚洲午夜在线视频| 亚洲欧美综合网| 久久精品一区蜜桃臀影院| 久久久综合视频| 欧美激情一区二区三区成人| 欧美日韩网站|