本文整理汇总了C++中gl::BatchRef::drawInstanced方法的典型用法代码示例。如果您正苦于以下问题:C++ BatchRef::drawInstanced方法的具体用法?C++ BatchRef::drawInstanced怎么用?C++ BatchRef::drawInstanced使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gl::BatchRef
的用法示例。
在下文中一共展示了BatchRef::drawInstanced方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
void InstancedTeapotsApp::draw()
{
gl::clear( Color::black() );
gl::setMatrices( mCam );
mBatch->drawInstanced( NUM_INSTANCES_X * NUM_INSTANCES_Y );
}
示例2: drawParticles
void RandomSpawn::drawParticles()
{
mBatch_P->getGlslProg()->uniform("ViewDirection", mCamera.getViewDirection());
mBatch_P->getGlslProg()->uniform("LightPosition", vec3(0, 10, 0));
mBatch_P->getGlslProg()->uniform("SpecPow", 4.0f);
mBatch_P->getGlslProg()->uniform("SpecStr", 2.0f);
mBatch_P->drawInstanced(mPointsParticles.size());
}
示例3: drawToDepthFbo
void BulletSpheresApp::drawToDepthFbo()
{
// draw into the depth fbo for shadow casting
gl::ScopedFramebuffer bindFbo( mLight->getFbo() );
gl::clear();
gl::ScopedState scopeCull( GL_CULL_FACE, true );
gl::cullFace( GL_FRONT );
gl::ScopedMatrices scopeMat;
gl::setMatrices( mLight->getCam() );
gl::viewport( mLight->getFbo()->getSize() );
mShadowSphere->drawInstanced( NUM_PARTICLES-2 );
}
示例4: draw
void BulletSpheresApp::draw()
{
drawToDepthFbo();
gl::clear( Color( 0.1f, 0.1f, 0.1f ) );
gl::setMatrices( mCam );
gl::viewport( vec2( 0 ), getWindowSize() );
// Draw small spheres
{
gl::ScopedTextureBind scopeTex0( mLight->getFbo()->getDepthTexture(), 0 );
gl::ScopedTextureBind scopeTex1( mStripeTex, 1 );
mRenderGlsl->uniform( "uShadowMap", 0 );
mRenderGlsl->uniform( "uStripeTex", 1 );
mRenderGlsl->uniform( "uLightPos", mLight->getPos() );
mRenderGlsl->uniform( "uDepthBias", mLight->getDepthBias() );
mRenderGlsl->uniform( "uLightPos1", mRigidBodies[0].getPos() );
mRenderGlsl->uniform( "uLightPos2", mRigidBodies[1].getPos() );
mRenderGlsl->uniform( "uRadius1", mRigidBodies[0].getSize() );
mRenderGlsl->uniform( "uRadius2", mRigidBodies[1].getSize() );
mRenderGlsl->uniform( "uShadowMvp", mLight->getViewProjection() );
mRenderSphere->drawInstanced( NUM_PARTICLES - 2 );
}
// Draw big spheres
mGlowGlsl->bind();
mGlowGlsl->uniform( "uLightPos", mLight->getPos() );
for( auto &body : mRigidBodies ){
auto index = body.getId();
if( index < NUM_GLOWS ){
mGlowGlsl->uniform( "uColor", mGlowColors[index] );
body.draw();
}
}
// Draw light source (if point light)
if( mLight->getPos().w > 0.5f )
mLight->draw();
mContext->debugDraw();
}
示例5: update
void InstancedStereoApp::update()
{
mTime = getElapsedSeconds();
gl::clear();
hmd::ScopedRiftBuffer bind{ mRift };
std::array<mat4, 6> worldToEyeClipMatrices;
// Calc clip space conversion matrices for both eyes
for( auto eye : mRift->getEyes() ) {
gl::ScopedMatrices push;
mRift->enableEye( eye );
auto idx = 3 * static_cast<size_t>(eye);
worldToEyeClipMatrices.at( idx ) = mRift->getViewMatrix() * mRift->getModelMatrix();
worldToEyeClipMatrices.at( idx + 1 ) = mRift->getProjectionMatrix();
// non-instanced scene
gl::lineWidth( 3.0f );
gl::drawCoordinateFrame( 2 );
gl::drawSphere( vec3( mLightWorldPosition ), 0.05f, 36 );
}
{
gl::ScopedViewport port{ vec2( 0 ), mRift->getFboSize() };
gl::ScopedModelMatrix push;
gl::rotate( (float)mTime, vec3( -0.3f, -1.0f, 0.2f ) );
gl::scale( vec3( 0.5f ) );
gl::translate( 0.0f, -0.5f, 0.0f );
auto normalMatrix = glm::transpose( glm::inverse( gl::getModelMatrix() ) );
worldToEyeClipMatrices.at( 2 ) = worldToEyeClipMatrices.at( 5 ) = normalMatrix;
mShader->uniform( "uLightPosition", mLightWorldPosition );
mShader->uniform( "uWorldToEyeClipMatrices", worldToEyeClipMatrices.data(), 6 );
mTeapot->drawInstanced( 2 );
}
}
示例6: sizeof
void Choreo3DApp::draw()
{
//gl::clear( ColorA::gray( background ) );
gl::clear(ColorAf(testBK));
//THIS MAY NEED TO BE CLEANED UP
vector<std::string> dataVector = {"CCL_JOINT_CCL3_00_skip10.json"};
if( CURRENT_DATA_SET != LOADED_DATA_SET){
// paused = true;
// jointList = {};
jointList = ccl::loadMotionCaptureFromJson(getAssetPath(dataVector[CURRENT_DATA_SET]));
FRAME_COUNT = 0;
TOTAL_FRAMES = jointList[0].jointPositions.size(); //SHOULD PROBABLY PUT A TRY/CATCH HERE
std::cout << "total frames: " << TOTAL_FRAMES << ", total joints:"<< jointList.size() << std::endl;
gl::VboMeshRef body = gl::VboMesh::create( geom::Sphere().subdivisions( 16 ).radius(4) );
//CREATE A CONTAINER TO STORE THE INITIAL POSITIONS FOR INITIALISING THE JOINTS
std::vector<glm::vec3> positions;
// CREATE THE SPHERES AT THE INITIAL JOINT LOCATIONS
for ( int i = 0; i < jointList.size(); ++i ) {
glm::vec3 jointAt = jointList[i].jointPositions[i];
float instanceX = jointAt.x;
float instanceY = jointAt.y;
float instanceZ = jointAt.z;
// float instanceZ = 0;
positions.push_back( vec3( instanceX, instanceY, instanceZ));
}
//std::cout << "positions: " << positions[0] << std::endl;
// create the VBO which will contain per-instance (rather than per-vertex) data
mInstanceDataVbo = gl::Vbo::create( GL_ARRAY_BUFFER, positions.size() * sizeof(vec3), positions.data(), GL_DYNAMIC_DRAW );
// we need a geom::BufferLayout to describe this data as mapping to the CUSTOM_0 semantic, and the 1 (rather than 0) as the last param indicates per-instance (rather than per-vertex)
geom::BufferLayout instanceDataLayout;
instanceDataLayout.append( geom::Attrib::CUSTOM_0, 3, 0, 0, 1 /* per instance */ );
//NOW ADD IT TO THE VBO MESH THAT WE INITIAL CREATED FOR THE BODY / SKELETON
body->appendVbo( instanceDataLayout, mInstanceDataVbo );
//FINALLY, BUILD THE BATCH, AND MAP THE CUSTOM_0 ATTRIBUTE TO THE "vInstancePosition" GLSL VERTEX ATTRIBUTE
mSphereBatch = gl::Batch::create( body, mGlsl, { { geom::Attrib::CUSTOM_0, "vInstancePosition" } } );
LOADED_DATA_SET = CURRENT_DATA_SET;
}
gl::setMatrices( mCamera );
if (showGrid)renderScene();
Color( dancerColor[0], dancerColor[1], dancerColor[2] );
//gl::ScopedModelMatrix modelScope;
if(markersActive)mSphereBatch->drawInstanced( jointList.size() );
if(skeletonActive)skeleton.renderSkeleton();
if(ribbonsActive)drawRibbons();
if(trailsActive)handTrail.render(dancerColor);
}