方法一(osg):
//建立shader
osg::shader* vshader = new osg::shader(osg::shader::vertex, vertexsource);
osg::shader* gshader = new osg::shader(osg::shader::geometry, geomsource);
osg::shader* fshader = new osg::shader(osg::shader::fragment, fragmentsource);
//關聯shader
osg::program* program = new osg::program;
program->addshader(vshader);
program->addshader(gshader);
program->addshader(fshader);
//新增shader
geom->getorcreatestateset()->setattribute(program);
//設定shader中的uniform變數
geom->getorcreatestateset()->adduniform(new osg::uniform("texture", 0));
方法二(osgearth):
osg::stateset* stateset = getorcreatestateset();
virtualprogram* vp = virtualprogram::getorcreate(stateset);
osg::shader* shader = new osg::shader(osg::shader::vertex, vertexsource);
vp->setshader( name, shader );
乙個opengl建立三角形的例子
#include #include #include #include #include #include "ogldev_util.h"
#include "ogldev_math_3d.h"
gluint vbo;
gluint gscalelocation; // 位置中間變數
const char* pvsfilename = "shader.vs";
const char* pfsfilename = "shader.fs";
static void renderscenecb()
static void initializeglutcallbacks()
static void createvertexbuffer()
static void addshader(gluint shaderprogram, const char* pshadertext, glenum shadertype)
const glchar* p[1];
p[0] = pshadertext;
glint lengths[1];
lengths[0] = strlen(pshadertext);
glshadersource(shaderobj, 1, p, lengths);
glcompileshader(shaderobj);
glint success;
glgetshaderiv(shaderobj, gl_compile_status, &success);
if (!success)
glattachshader(shaderprogram, shaderobj);
}static void compileshaders()
string vs, fs;
if (!readfile(pvsfilename, vs)) ;
if (!readfile(pfsfilename, fs)) ;
addshader(shaderprogram, vs.c_str(), gl_vertex_shader);
addshader(shaderprogram, fs.c_str(), gl_fragment_shader);
glint success = 0;
glchar errorlog[1024] = ;
gllinkprogram(shaderprogram);
glgetprogramiv(shaderprogram, gl_link_status, &success);
if (success == 0)
glvalidateprogram(shaderprogram);
glgetprogramiv(shaderprogram, gl_validate_status, &success);
if (!success)
gluseprogram(shaderprogram);
// 查詢獲取一致變數的位置
gscalelocation = glgetuniformlocation(shaderprogram, "gscale");
// 檢查錯誤
assert(gscalelocation != 0xffffffff);
}int main(int argc, char** ar**)
printf("gl version: %s\n", glgetstring(gl_version));
glclearcolor(0.0f, 0.0f, 0.0f, 0.0f);
createvertexbuffer();
compileshaders();
glutmainloop();
return 0;
}
相比上個教程做了修改後的shader.vs指令碼**:
#version 330 //告訴編譯器我們的目標glsl編譯器版本是3.3
layout (location = 0) in vec3 position; // 繫結定點屬性名和屬性,方式二緩衝屬性和shader屬性對應對映
uniform float gscale;
void main()
shader.fs指令碼**保持不變:
#version 330 //告訴編譯器我們的目標glsl編譯器版本是3.3
out vec4 fragcolor; // 片段著色器的輸出顏色變數
// 著色器的唯一入口函式
void main()
位於螢幕中心的紅色三角形動態從0放大到原尺寸又縮小到消失,然後翻轉放大後又縮小如此迴圈,也就是後面教程8中的縮放變換效果。
OSG新手使用過程中可能遇到的坑
說明 其實這篇博文內容跟osg關係不大,更確切的說是在使用visual studio的過程中可能遇到的坑。由於osg編譯的過程中會依賴很多第三方庫,還有debug和release版本,確實很容易動態鏈結異常,這是本人在編譯osg程式的過程中遇到的真實問題,故還是放在osg類別中了,希望對新手有用,高...
tiles的使用過程
本文以最簡單而有效的形式記錄tiles的使用過程,以備以後使用時快速參考。1.先建乙個layout.jsp布局頁面 2 新建乙個tiles defs.xml檔案,並在其中做相應的配置。這樣就相當於通過xml檔案定義了乙個member.jsp.3.在web.xml和struts config.xml和...
Mac faceswap 使用過程
報錯資訊 no module 安裝環境 pip3 install opencv python 缺少什麼就install什麼就可以。tensorflow只支援3.6,3.5 2.7 重新配置了python環境。keras 報錯 cannot import name np utils 解決 pip in...