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

隨筆 - 505  文章 - 1034  trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 924214
  • 排名 - 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渲染對圖片或視頻進(jìn)行后處理得到的效果。它利用nv_image_processing框架,Cg還有GLSL實(shí)現(xiàn)了幾種視頻過濾器,包括高斯模糊,edge detection overlay, wobble, TV-noise, radial blur, and night vision.

截圖:


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

        最搞的是這個地方,nErrorCode總是1282(0x502),害得程序執(zhí)行不起來,我重新安裝了驅(qū)動也不好使,最后我加了句return直接返回,程序就執(zhí)行起來了
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不算看到核心,進(jìn)一個里面看看
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部分的主體架構(gòu)可以參照這兒看看就明白了
        NVIDIA SDK 9.5 Simple Texture Rectangle
原理一樣,都是往一個面上貼了個texture。
                   上面這個的texture是靜態(tài)的,從硬盤上的圖片生成的;
                    本篇里面是動態(tài)的,一幀一幀的視頻或者圖片進(jìn)行下后處理然后放到texture里面。

2009-1-9

Video Filter

posted on 2008-12-23 01:45 七星重劍 閱讀(1361) 評論(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>
            亚洲最新在线| 夜夜爽99久久国产综合精品女不卡| 亚洲男人的天堂在线| 亚洲欧美中文另类| 国产亚洲综合性久久久影院| 欧美中文在线观看| 亚洲国产国产亚洲一二三| 亚洲精品孕妇| 欧美视频中文在线看| 欧美一区二区三区四区在线| 美国十次成人| 99在线热播精品免费99热| 国产精品日韩久久久| 久久精品欧美| 亚洲三级影院| 久久激情五月丁香伊人| 亚洲国产精品一区二区www在线| 欧美69视频| 亚洲午夜久久久久久尤物| 久久亚洲精品一区二区| 一本色道久久88综合亚洲精品ⅰ | 中日韩美女免费视频网站在线观看| 香蕉久久夜色精品国产使用方法| 国产综合色精品一区二区三区| 欧美fxxxxxx另类| 亚洲欧美日韩网| 亚洲国产午夜| 久久久精品2019中文字幕神马| 亚洲黄色影院| 国产午夜精品在线| 欧美日韩精品久久| 乱码第一页成人| 亚洲欧美日韩精品久久久久| 亚洲国产另类久久精品| 新片速递亚洲合集欧美合集| 亚洲精品久久7777| 国内精品美女在线观看| 欧美日韩在线播放| 美女精品自拍一二三四| 欧美一级久久久| 99精品国产热久久91蜜凸| 免费观看成人| 久久国产视频网站| 亚洲一区二区三区中文字幕| 在线观看日韩欧美| 国产在线国偷精品产拍免费yy| 欧美天堂亚洲电影院在线播放| 理论片一区二区在线| 久久国产精品99久久久久久老狼| aa成人免费视频| 最新69国产成人精品视频免费| 欧美ed2k| 久久一区二区三区国产精品| 午夜精彩视频在线观看不卡| 亚洲婷婷国产精品电影人久久| 亚洲人成网站精品片在线观看| 黑丝一区二区| 国产一区二区精品久久91| 国产精品日日做人人爱| 国产精品久久| 国产精品乱码人人做人人爱| 欧美日韩视频不卡| 欧美日韩免费一区| 欧美日韩国产不卡| 欧美黑人一区二区三区| 免费亚洲电影| 欧美成年视频| 欧美精品 日韩| 欧美成在线视频| 欧美肥婆bbw| 欧美另类变人与禽xxxxx| 欧美va天堂va视频va在线| 六十路精品视频| 欧美成人一品| 欧美连裤袜在线视频| 欧美日韩亚洲综合一区| 欧美日韩亚洲一区三区| 欧美系列一区| 国产精品私房写真福利视频| 国产欧美精品日韩精品| 国产一区自拍视频| 在线观看91精品国产麻豆| 亚洲成人在线网站| 亚洲国产一区二区三区高清| 91久久夜色精品国产九色| 亚洲精品一二| 亚洲一区在线免费| 久久激情婷婷| 欧美国产激情二区三区| 亚洲日本电影在线| 亚洲一区二区三区免费视频| 欧美在线高清视频| 美日韩精品免费| 欧美午夜久久| 韩国av一区二区三区在线观看| 一区在线观看视频| 99国内精品久久| 午夜精品视频网站| 卡一卡二国产精品| 亚洲日本激情| 欧美在线观看视频一区二区| 久久夜精品va视频免费观看| 欧美日韩国产欧| 国产午夜精品一区二区三区欧美| 亚洲黄色在线看| 亚洲欧美日韩综合| 牛牛影视久久网| 宅男噜噜噜66国产日韩在线观看| 欧美一区二区三区播放老司机 | 亚洲激情校园春色| 亚洲综合精品自拍| 欧美成人免费大片| 一区二区三区 在线观看视频| 午夜久久99| 欧美日本在线播放| 国际精品欧美精品| 一区二区不卡在线视频 午夜欧美不卡'| 午夜久久久久久| 亚洲电影免费观看高清| 亚洲欧美激情在线视频| 欧美sm极限捆绑bd| 国产日韩久久| 亚洲午夜激情免费视频| 久久综合影视| 亚洲午夜av在线| 欧美xart系列高清| 国产视频一区在线观看| 99在线精品视频| 你懂的国产精品永久在线| 亚洲主播在线| 欧美精品在线免费观看| 好吊妞这里只有精品| 亚洲一区二区三区免费在线观看 | 欧美成人日本| 午夜精品久久久久久久久久久久| 欧美精品乱码久久久久久按摩| 国产日韩欧美在线| 亚洲欧美韩国| 亚洲精品一区二区三区四区高清| 久久精品国产亚洲一区二区| 国产精品麻豆va在线播放| 亚洲精品免费网站| 美女亚洲精品| 欧美在线免费看| 国产精品视频在线观看| 亚洲一级网站| 亚洲精品国产精品国自产观看 | 亚洲国产精品ⅴa在线观看| 欧美在线视频一区二区| 亚洲少妇诱惑| 欧美视频在线观看免费网址| 日韩视频免费| 亚洲国产导航| 欧美国产综合| 最新中文字幕一区二区三区| 欧美 日韩 国产精品免费观看| 欧美一区二区免费观在线| 国产欧美精品va在线观看| 校园激情久久| 亚洲欧美国产精品桃花| 国产免费一区二区三区香蕉精| 亚洲欧美日韩成人| 亚洲女女女同性video| 国产精品久久久免费| 亚洲欧美日韩一区二区| 中文在线一区| 国产精品视区| 久久久国产精品一区| 久久精品欧洲| 在线观看成人小视频| 欧美www视频| 免费欧美电影| 9色porny自拍视频一区二区| 亚洲另类自拍| 国产精品视频专区| 久久久久免费视频| 久久视频在线免费观看| 91久久夜色精品国产九色| 亚洲欧洲综合另类| 欧美日韩精品一区二区天天拍小说 | 亚洲一级网站| 午夜激情一区| 伊人狠狠色j香婷婷综合| 久久综合激情| 欧美激情在线免费观看| 亚洲一区二区精品在线| 亚洲免费在线| 精品福利电影| 亚洲黄色av| 国产精品福利在线观看网址| 欧美伊人久久大香线蕉综合69| 久久av红桃一区二区小说| 亚洲欧洲精品一区二区三区 | 国产亚洲成av人在线观看导航| 久久久久9999亚洲精品| 欧美xx视频| 午夜精品久久久久影视 | 亚洲免费在线播放| 亚洲福利国产| 国产精品久久一区二区三区|