lxlbgd1 发表于 2010-10-4 17:03:16

shader 文件打不开

int main( int argc, char **argv ) { osgViewer::Viewer viewer; osg::Group* pRoot = new osg::Group; viewer.setCameraManipulator(new osgGA::TrackballManipulator()); viewer.setSceneData(pRoot); osgWidget::WindowManager* pMgr=new osgWidget::WindowManager(&viewer,1024.f,768.f,MASK_2D,osgWidget::WindowManager::WM_USE_RENDERBINS); CreateExample(viewer, pMgr, pRoot); osg::Geode* pGeode=new osg::Geode; pRoot->addChild(pGeode); pGeode->addDrawable(createPlane(5,5)); osg::StateSet* stateset = pGeode->getOrCreateStateSet(); osg::Shader* vertexShader = new osg::Shader( osg::Shader::VERTEX ); osg::Shader* fragmentShader = new osg::Shader( osg::Shader::FRAGMENT ); vertexShader->loadShaderSourceFromFile("shaders/temp.vert"); fragmentShader->loadShaderSourceFromFile("shaders/temp.frag"); // loadShaderSource(vertexShader,"shaders\temp.vert"); //loadShaderSource(fragmentShader,"shaders\temp.frag"); osg::Program* program = new osg::Program; program->addShader( vertexShader ); program->addShader( fragmentShader ); stateset->setAttributeAndModes( program, osg::StateAttribute::ON ); float time=0.0; osg::Uniform* param = new osg::Uniform("Time", time ); stateset->addUniform( param ); osg::Uniform* param0 = new osg::Uniform( "texMap", 0 ); stateset->addUniform( param0 ); //BindTexture("tex1.jpg",stateset,0); BindTexture("Images/skymap.jpg",stateset,0); osg::Uniform* param1 = new osg::Uniform( "mixMap", 1 ); stateset->addUniform( param1 ); //BindTexture("texture.png",stateset,1); BindTexture("Images/blueFlowers.png",stateset,1); while( !viewer.done() ) { time+=0.0002; param->set(time); viewer.frame(); } return 0; }

为什么老说我那两个shader文件打不开呢?请多帮忙,谢谢!

lxlbgd1 发表于 2010-10-4 17:03:33

int main( int argc, char **argv )
{
osgViewer::Viewer viewer;
osg::Group* pRoot = new osg::Group;
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.setSceneData(pRoot);
osgWidget::WindowManager* pMgr=new osgWidget::WindowManager(&viewer,1024.f,768.f,MASK_2D,osgWidget::WindowManager::WM_USE_RENDERBINS);
CreateExample(viewer, pMgr, pRoot);

osg::Geode* pGeode=new osg::Geode;
pRoot->addChild(pGeode);
pGeode->addDrawable(createPlane(5,5));


osg::StateSet* stateset = pGeode->getOrCreateStateSet();
osg::Shader* vertexShader = new osg::Shader( osg::Shader::VERTEX );
osg::Shader* fragmentShader = new osg::Shader( osg::Shader::FRAGMENT );
vertexShader->loadShaderSourceFromFile("shaders/temp.vert");
fragmentShader->loadShaderSourceFromFile("shaders/temp.frag");

// loadShaderSource(vertexShader,"shaders\temp.vert");
//loadShaderSource(fragmentShader,"shaders\temp.frag");
osg::Program* program = new osg::Program;
program->addShader( vertexShader );
program->addShader( fragmentShader );
stateset->setAttributeAndModes( program, osg::StateAttribute::ON );

float time=0.0;

osg::Uniform* param = new osg::Uniform("Time", time );
stateset->addUniform( param );

osg::Uniform* param0 = new osg::Uniform( "texMap", 0 );
stateset->addUniform( param0 );
//BindTexture("tex1.jpg",stateset,0);
BindTexture("Images/skymap.jpg",stateset,0);

osg::Uniform* param1 = new osg::Uniform( "mixMap", 1 );
stateset->addUniform( param1 );
//BindTexture("texture.png",stateset,1);
BindTexture("Images/blueFlowers.png",stateset,1);


while( !viewer.done() )
{
time+=0.0002;
param->set(time);
viewer.frame();
}
return 0;
}

aya_daxiang 发表于 2010-10-4 18:08:06

"shaders/temp.frag"

lxlbgd1 发表于 2010-10-4 18:30:53

3# aya_daxiang
("shaders/temp.frag");
对呀我是这样用的呀

lxlbgd1 发表于 2010-10-4 18:37:30

file:///D:/我的文档/桌面/未命名.bmp

lxlbgd1 发表于 2010-10-4 18:51:18

array 版主,难道是必须用绝对路径吗?

FlySky 发表于 2010-10-7 02:25:43

没有规定一定要使用绝对路径~~相对路径也没问题的~~~~~关键是您是否设置正确的路径~~

gis_wudi 发表于 2011-5-30 11:43:13

“shaders\\temp.frag”
两个斜线哦

gis_wudi 发表于 2011-5-30 11:44:05

c或c++路径是要双斜线的

阿威 发表于 2012-6-11 12:55:16

你能不能先用绝对路径试试来出来问
页: [1]
查看完整版本: shader 文件打不开