void Choreo3DApp::renderScene() { // gl::pushMatrices(); mGridMesh->draw(); // gl::popMatrices(); }
void GeometryApp::draw() { // Prepare for drawing. gl::clear(); gl::setMatrices( mCamera ); // Draw the grid. if( mShowGrid && mGrid ) { gl::ScopedGlslProg scopedGlslProg( gl::context()->getStockShader( gl::ShaderDef().color() ) ); // draw the coordinate frame with length 2. gl::drawCoordinateFrame( 2 ); mGrid->draw(); } if( mPrimitive ) { gl::ScopedTextureBind scopedTextureBind( mTexture ); mPhongShader->uniform( "uTexturingMode", mTexturingMode ); // Rotate it slowly around the y-axis. gl::ScopedModelMatrix matScope; gl::rotate( float( getElapsedSeconds() / 5 ), 0, 1, 0 ); // Draw the normals. if( mShowNormals && mPrimitiveNormalLines ) { gl::ScopedColor colorScope( Color( 1, 1, 0 ) ); mPrimitiveNormalLines->draw(); } // Draw the primitive. gl::ScopedColor colorScope( Color( 0.7f, 0.5f, 0.3f ) ); if( mViewMode == WIREFRAME ) { // We're using alpha blending, so render the back side first. gl::ScopedAlphaBlend blendScope( false ); gl::ScopedFaceCulling cullScope( true, GL_FRONT ); mWireframeShader->uniform( "uBrightness", 0.5f ); mPrimitiveWireframe->draw(); // Now render the front side. gl::cullFace( GL_BACK ); mWireframeShader->uniform( "uBrightness", 1.0f ); mPrimitiveWireframe->draw(); } else mPrimitive->draw(); } // Render the parameter window. #if ! defined( CINDER_GL_ES ) if( mParams ) mParams->draw(); #endif }
void GeometryShaderIntroApp::draw() { gl::clear(); gl::setMatricesWindow( getWindowWidth(), getWindowHeight() ); gl::translate( getWindowCenter() ); gl::ScopedGlslProg glslProg( mGlsl ); mGlsl->uniform( "uNumSides", mNumSides ); mGlsl->uniform( "uRadius", mRadius ); mBatch->draw(); }
void GeometryShaderIntroApp::setup() { mNumSides = 2; mRadius = 100; // setup shader try { mGlsl = gl::GlslProg::create( gl::GlslProg::Format().vertex( loadAsset( "basic.vert" ) ) .fragment( loadAsset( "basic.frag" ) ) .geometry( loadAsset( "basic.geom" ) ) ); } catch( gl::GlslProgCompileExc ex ) { cout << ex.what() << endl; quit(); } // setup VertBatch with a single point at the origin mBatch = gl::VertBatch::create(); mBatch->vertex( vec2( 0 ) ); mBatch->color( 1, 0, 0 ); }
void Choreo3DApp::setupEnviron( int xSize, int zSize, int spacing ) { CI_ASSERT( ( spacing <= xSize ) && ( spacing <= zSize ) ); // Cut in half and adjust for spacing. xSize = ( ( xSize / 2 ) / spacing ) * spacing; zSize = ( ( zSize / 2 ) / spacing ) * spacing; const int xMax = xSize + spacing; const int zMax = zSize + spacing; // const ColorA defaultColor( 0.9f, 0.9f, 0.9f,0.1f); gridColor = ColorA( 0.9f, 0.9f, 0.9f,0.1f); const ColorA black( 0, 0, 0, 1 ); mGridMesh = gl::VertBatch::create( GL_LINES ); // Add x lines. for( int xVal = -xSize; xVal < xMax; xVal += spacing ) { mGridMesh->color( gridColor ); mGridMesh->vertex( (float)xVal, 0, (float)-zSize ); mGridMesh->vertex( (float)xVal, 0, (float)zSize ); }// end for each x dir line // Add z lines. for( int zVal = -zSize; zVal < zMax; zVal += spacing ) { mGridMesh->color( gridColor ); mGridMesh->vertex( (float)xSize, 0, (float)zVal ); mGridMesh->vertex( (float)-xSize, 0, (float)zVal ); }// end for each z dir line //SETUP THE CAMERA mCamera.lookAt( vec3( 500, 500, 0 ), vec3( 0 ) ); mCamera.setEyePoint(vec3(500,1000,0)); mCamera.setFarClip(20000); }
void ImmediateModeApp::draw() { gl::clear(); gl::VertBatch vb( GL_TRIANGLES ); vb.color( 1, 0, 0 ); vb.vertex( getWindowWidth() / 2, 50 ); vb.color( 0, 1, 0 ); vb.vertex( getWindowWidth() - 50, getWindowHeight() - 50 ); vb.color( 0, 0, 1 ); vb.vertex( 50, getWindowHeight() - 50 ); vb.draw(); // draw mBatch->begin( GL_LINE_STRIP ); for( const vec2 &point : mPoints ) { mBatch->vertex( vec4( point, 0, 1 ), Color( 1.0f, 0.5f, 0.25f ) ); } mBatch->draw(); }
void TessellationShaderApp::setup() { mTessLevelInner = mTessLevelOuter = 4; int maxPatchVertices = 0; glGetIntegerv( GL_MAX_PATCH_VERTICES, &maxPatchVertices ); app::console() << "Max supported patch vertices " << maxPatchVertices << std::endl; #if ! defined( CINDER_GL_ES ) fs::path glDir = "ogl"; mRadius = 200.0f; mParams = params::InterfaceGl::create( "Settings", ivec2( 200, 200 ) ); mParams->addParam( "Radius", &mRadius, "step=1.0" ); mParams->addParam( "Tess level inner", &mTessLevelInner, "min=0" ); mParams->addParam( "Tess level outer", &mTessLevelOuter, "min=0" ); #else fs::path glDir = "es31a"; mRadius = 400.0f; #endif try { mGlsl = gl::GlslProg::create( gl::GlslProg::Format() .vertex( loadAsset( glDir / "0_vert.glsl" ) ) .tessellationCtrl( loadAsset( glDir / "1_tess_ctrl.glsl" ) ) .tessellationEval( loadAsset( glDir / "2_tess_eval.glsl" ) ) #if defined( CINDER_GL_ES ) .geometry( loadAsset( glDir / "x_geom.glsl" ) ) #endif .fragment( loadAsset( glDir / "3_frag.glsl" ) ) ); } catch( const std::exception &ex ) { console() << ex.what() << endl; //quit(); } mBatch = gl::VertBatch::create( GL_PATCHES ); mBatch->color( 1.0f, 0.0f, 0.0f ); mBatch->vertex( vec2( 1, -1 ) ); mBatch->color( 0.0f, 1.0f, 0.0f ); mBatch->vertex( vec2( 0 , 1 ) ); mBatch->color( 0.0f, 0.0f, 1.0f ); mBatch->vertex( vec2( -1, -1 ) ); gl::patchParameteri( GL_PATCH_VERTICES, 3 ); }
void TessellationShaderApp::draw() { gl::clear(); #if ! defined( CINDER_GL_ES ) gl::enableWireframe(); #endif gl::setMatricesWindow( getWindowSize() ); gl::translate( getWindowCenter() ); gl::ScopedGlslProg glslProg( mGlsl ); mGlsl->uniform( "uTessLevelInner", (float)mTessLevelInner ); mGlsl->uniform( "uTessLevelOuter", (float)mTessLevelOuter ); mGlsl->uniform( "uRadius", mRadius ); mBatch->draw(); #if ! defined( CINDER_GL_ES ) gl::disableWireframe(); mParams->draw(); #endif }
void GeometryApp::createGrid() { mGrid = gl::VertBatch::create( GL_LINES ); mGrid->begin( GL_LINES ); for( int i = -10; i <= 10; ++i ) { mGrid->color( Color( 0.25f, 0.25f, 0.25f ) ); mGrid->color( Color( 0.25f, 0.25f, 0.25f ) ); mGrid->color( Color( 0.25f, 0.25f, 0.25f ) ); mGrid->color( Color( 0.25f, 0.25f, 0.25f ) ); mGrid->vertex( float( i ), 0.0f, -10.0f ); mGrid->vertex( float( i ), 0.0f, +10.0f ); mGrid->vertex( -10.0f, 0.0f, float( i ) ); mGrid->vertex( +10.0f, 0.0f, float( i ) ); } mGrid->end(); }
void GeometryApp::draw() { // Prepare for drawing. gl::clear(); gl::setMatrices( mCamera ); // Enable the depth buffer. gl::enableDepthRead(); gl::enableDepthWrite(); if( mPrimitive ) { gl::ScopedTextureBind scopedTextureBind( mTexture ); mPhongShader->uniform( "uTexturingMode", mTexturingMode ); mPhongShader->uniform( "uFreq", ( mPrimitiveCurrent == TORUSKNOT ) ? ivec2( 100, 10 ) : ivec2( 20 ) ); // Rotate it slowly around the y-axis. gl::ScopedModelMatrix matScope; //gl::rotate( float( getElapsedSeconds() / 5 ), 0, 1, 0 ); // Draw the normals. if( mShowNormals && mPrimitiveNormalLines ) { gl::ScopedColor colorScope( Color( 1, 1, 0 ) ); mPrimitiveNormalLines->draw(); } // Draw the tangents. if( mShowTangents && mPrimitiveTangentLines ) { gl::ScopedColor colorScope( Color( 0, 1, 0 ) ); mPrimitiveTangentLines->draw(); } // Draw the wire primitive. if( mShowWirePrimitive && mPrimitiveWire ) { gl::ScopedColor color( Color( 1, 1, 1 ) ); gl::ScopedLineWidth linewidth( 2.5f ); mPrimitiveWire->draw(); } // Draw the primitive. if( mShowSolidPrimitive ) { gl::ScopedColor colorScope( Color( 1, 1, 1 ) ); if( mViewMode == WIREFRAME ) { // We're using alpha blending, so render the back side first. gl::ScopedBlendAlpha blendScope; gl::ScopedFaceCulling cullScope( true, GL_FRONT ); mWireframeShader->uniform( "uBrightness", 0.5f ); mPrimitiveWireframe->draw(); // Now render the front side. gl::cullFace( GL_BACK ); mWireframeShader->uniform( "uBrightness", 1.0f ); mPrimitiveWireframe->draw(); } else { gl::ScopedFaceCulling cullScope( mEnableFaceFulling, GL_BACK ); mPrimitive->draw(); } } } // gl::disableDepthWrite(); // Draw the grid. if( mShowGrid && mGrid ) { gl::ScopedGlslProg scopedGlslProg( gl::context()->getStockShader( gl::ShaderDef().color() ) ); mGrid->draw(); // draw the coordinate frame with length 2. gl::drawCoordinateFrame( 2 ); } // Disable the depth buffer. gl::disableDepthRead(); // Render the parameter windows. #if ! defined( CINDER_GL_ES ) if( mParams ) { mParams->draw(); } #endif }