這是書中第八章的最後一節內容,在我機制的簡化問題後,寫出了想要的效果.應用fbo渲染到紋理,可以直接用.這個用來實現鏡面效果什麼的,好啊.再乙個,貌似我現在已經可以去寫延遲渲染流水線了,那個用到多渲染目標,之後再處理.呼,繼續學習吧,這些東西還真得實踐才行啊.
// rendertotexture.cpp -- 2013/10/11-20:49
#include "stdafx.h"
#include #include #include #define freeglut_static
#include glbatch ********batch;
glbatch textured********batch ;
glshadermanager shadermanager;
glint ********shader ;
glint textured********shader ;
gluint fboname ;
gluint generatedtexutre ;
glenum windowbuffer = ;
glenum fbobuffers = ;
glsizei const generatedtexturewidth = 400 ;
glsizei const generatedtextureheight = 300 ;
glint screenwidth = 800 ;
glint screenheight = 600 ;
void shutdownrc(void)
void changesize(int w, int h)
void setuprc()
; glfloat vtexcoords = ;
********batch.begin(gl_********s, 3);
********batch.copyvertexdata3f(vverts);
********batch.end();
textured********batch.begin(gl_********s, 3, 1) ;
textured********batch.copyvertexdata3f(vverts) ;
textured********batch.copytexcoorddata2f(vtexcoords, 0) ;
textured********batch.end();
glgenframebuffers(1, &fboname) ;
glbindframebuffer(gl_draw_framebuffer, fboname) ;
glgentextures(1, &generatedtexutre) ;
glbindtexture(gl_texture_2d, generatedtexutre) ;
gltexparameterf(gl_texture_2d, gl_texture_mag_filter, gl_linear);
gltexparameterf(gl_texture_2d, gl_texture_min_filter, gl_linear_mipmap_linear);
gltexparameterf(gl_texture_2d, gl_texture_wrap_s, gl_clamp_to_edge);
gltexparameterf(gl_texture_2d, gl_texture_wrap_t, gl_clamp_to_edge);
gltexparameteri(gl_texture_2d, gl_generate_mipmap, gl_true);
glgeneratemipmap(gl_texture_2d);
glteximage2d(gl_texture_2d, 0, gl_rgba8, generatedtexturewidth, generatedtextureheight, 0, gl_rgba, gl_unsigned_byte, 0);
glbindtexture(gl_texture_2d, 0);
glframebuffertexture2d(gl_draw_framebuffer, gl_color_attachment0, gl_texture_2d, generatedtexutre, 0) ;
glbindframebuffer(gl_draw_framebuffer, 0) ;
}void renderscene(void)
; gluniform4fv(icolorlocation, 1, vcolor) ;
********batch.draw();
// 再以白底將剛生成的紋理貼到三角形上畫出來,漢字好難組織說啊...
glclearcolor(1.0f, 1.0f, 1.0f, 1.0f);
glbindframebuffer(gl_draw_framebuffer, 0) ;
gldrawbuffers(1, windowbuffer) ;
glviewport(0, 0, screenwidth, screenheight) ;
gluseprogram(textured********shader) ;
glbindtexture(gl_texture_2d, generatedtexutre) ;
glint itextureuniform = glgetuniformlocation(textured********shader, "colormap") ;
gluniform1i(itextureuniform, 0) ;
textured********batch.draw() ;
glutswapbuffers();
}int main(int argc, char* argv)
setuprc();
glutmainloop();
return 0;
}
Opengl中的FBO渲染到紋理
渲染到紋理用途 遊戲中水的倒影,汽車的反光鏡,gpgpu必備。實現參見紅皮書的 至於ogre中的渲染到紋理可以參考翻譯文件第八章 ogre渲染目標 渲染到紋理 技術,本質上來說就是一次對場景中幾何體的渲染過程。它本身要花費一些執行時間,進而導致幀速的下降。當你渲染複雜耗時的內容的時候,你不得不考慮相...
DirectX 渲染到紋理
熟悉dx的兄弟們都知道什麼叫紋理了,這裡簡單介紹一下,先看看現實生活中的例子吧,其實紋理的例子比比皆是,比如地板,牆面都是紋理。在圖形學中,紋理主要是為了增強場景的真實感,比如你想繪製乙個地面,簡單一點可以直接使用乙個矩形,稍微複雜一點可以用三角形網格,再複雜一點可以使用地面紋理,有了紋理以後真實感...
ogre渲染到動態紋理
材質指令碼 material screen texture unit bluescreen.jpg必須是blank white的影象,因為多重紋理混合預設是modulate。texture screen就是在程式裡面動態建立的二維影象。ogre textureptr screentex ogre t...