- Timestamp:
- 06/21/05 17:24:23 (8 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgparametric/osgparametric.cpp
r4347 r4348 15 15 #include <osgProducer/Viewer> 16 16 17 /////////////////////////////////////////////////////////////////// 18 // vertex shader using just Vec4 coefficients 17 19 char vertexShaderSource_simple[] = 18 20 "uniform vec4 coeff; \n" … … 26 28 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" 27 29 "}\n"; 28 30 31 32 ////////////////////////////////////////////////////////////////// 33 // vertex shader using full Matrix4 coefficients 34 char vertexShaderSource_matrix[] = 35 "uniform vec4 origin; \n" 36 "uniform mat4 coeffMatrix; \n" 37 "\n" 38 "void main(void) \n" 39 "{ \n" 40 "\n" 41 " gl_TexCoord[0] = gl_Vertex; \n" 42 " vec4 v = vec4(gl_Vertex.x, gl_Vertex.x*gl_Vertex.x, gl_Vertex.y, gl_Vertex.y*gl_Vertex.y ); \n" 43 " gl_Position = gl_ModelViewProjectionMatrix * (origin + coeffMatrix * v);\n" 44 "}\n"; 45 46 47 ////////////////////////////////////////////////////////////////// 48 // fragment shader 49 // 29 50 char fragmentShaderSource[] = 30 51 "uniform sampler2D baseTexture; \n" … … 36 57 37 58 59 38 60 class UniformVarying : public osg::Uniform::Callback 39 61 { … … 46 68 }; 47 69 48 osg::Node* createModel( )70 osg::Node* createModel(const std::string& shader) 49 71 { 50 72 osg::Geode* geode = new osg::Geode; … … 98 120 stateset->setAttribute(program); 99 121 100 osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_simple); 101 program->addShader(vertex_shader); 102 122 if (shader=="simple") 123 { 124 osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_simple); 125 program->addShader(vertex_shader); 126 127 osg::Uniform* coeff = new osg::Uniform("coeff",osg::Vec4(1.0,-1.0f,-1.0f,1.0f)); 128 coeff->setUpdateCallback(new UniformVarying); 129 stateset->addUniform(coeff); 130 } 131 else if (shader=="matrix") 132 { 133 osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_matrix); 134 program->addShader(vertex_shader); 135 136 osg::Uniform* origin = new osg::Uniform("origin",osg::Vec4(0.0f,0.0f,0.0f,1.0f)); 137 stateset->addUniform(origin); 138 139 osg::Uniform* coeffMatrix = new osg::Uniform("coeffMatrix", 140 osg::Matrix(1.0f,0.0f,1.0f,0.0f, 141 0.0f,0.0f,-1.0f,0.0f, 142 0.0f,1.0f,-1.0f,0.0f, 143 0.0f,0.0f,1.0f,0.0f)); 144 145 stateset->addUniform(coeffMatrix); 146 } 147 else if (shader=="texture") 148 { 149 150 } 103 151 104 152 osg::Shader* fragment_shader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource); 105 153 program->addShader(fragment_shader); 106 107 108 osg::Uniform* xCoeff = new osg::Uniform("coeff",osg::Vec4(1.0,-1.0f,-1.0f,1.0f));109 xCoeff->setUpdateCallback(new UniformVarying);110 stateset->addUniform(xCoeff);111 112 154 113 155 osg::Texture2D* texture = new osg::Texture2D(osgDB::readImageFile("lz.rgb")); … … 139 181 // set up the value with sensible default event handlers. 140 182 viewer.setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS); 183 184 std::string shader("simple"); 185 while(arguments.read("-s",shader)) {} 186 141 187 142 188 // get details on keyboard and mouse bindings used by the viewer. … … 161 207 162 208 // load the nodes from the commandline arguments. 163 osg::Node* model = createModel( );209 osg::Node* model = createModel(shader); 164 210 if (!model) 165 211 {
