Created
May 19, 2016 21:13
-
-
Save ryanbartley/4d1b6f61d85c6d0eea23a9ff055bf19e to your computer and use it in GitHub Desktop.
Helper files getting into OpenGL and Cinder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "cinder/app/App.h" | |
#include "cinder/app/RendererGl.h" | |
#include "cinder/gl/gl.h" | |
using namespace ci; | |
using namespace ci::app; | |
using namespace std; | |
class HelloTriangleApp : public App { | |
public: | |
void setup() override; | |
void mouseDown( MouseEvent event ) override; | |
void update() override; | |
void draw() override; | |
gl::BatchRef mCube; | |
ci::CameraPersp mCam; | |
ci::mat4 mModelMatrix; | |
}; | |
void HelloTriangleApp::setup() | |
{ | |
mCube = gl::Batch::create( geom::Cube(), gl::getStockShader( gl::ShaderDef().color().lambert() ) ); | |
mCam.setPerspective( 60.0f, getWindowAspectRatio(), .01, 10000.0f ); | |
mCam.lookAt( ci::vec3( 0, 0, 5 ), ci::vec3( 0 ) ); | |
} | |
void HelloTriangleApp::mouseDown( MouseEvent event ) | |
{ | |
} | |
void HelloTriangleApp::update() | |
{ | |
static float rotation = 0.0; | |
mModelMatrix = glm::rotate( rotation += 0.01, vec3( 0, 1, 0 ) ); | |
} | |
void HelloTriangleApp::draw() | |
{ | |
gl::clear( Color( 0, 0, 0 ) ); | |
gl::ScopedDepth depth( true ); | |
gl::ScopedMatrices mat; | |
gl::setMatrices( mCam ); | |
gl::color( 1, 0, 0 ); | |
gl::ScopedModelMatrix model; | |
gl::setModelMatrix( mModelMatrix ); | |
mCube->draw(); | |
} | |
CINDER_APP( HelloTriangleApp, RendererGl ) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "cinder/app/App.h" | |
#include "cinder/app/RendererGl.h" | |
#include "cinder/gl/gl.h" | |
using namespace ci; | |
using namespace ci::app; | |
using namespace std; | |
class HelloTriangleApp : public App { | |
public: | |
void setup() override; | |
void mouseDown( MouseEvent event ) override; | |
void update() override; | |
void draw() override; | |
gl::VboRef vbo; | |
gl::VaoRef vao; | |
gl::GlslProgRef glsl; | |
gl::BatchRef batch; | |
}; | |
void HelloTriangleApp::setup() | |
{ | |
struct Vertex { | |
ci::vec3 pos, color; | |
}; | |
std::array<Vertex, 3> vertices{ | |
Vertex{ vec3( 0,.5,0 ), vec3( 1,0,0 ) }, | |
Vertex{ vec3( -.5,-.5,0 ), vec3( 0,1,0 ) }, | |
Vertex{ vec3( .5,-.5,0 ), vec3( 0,0,1 ) } | |
}; | |
vbo = gl::Vbo::create( GL_ARRAY_BUFFER, sizeof( Vertex ) * vertices.size(), vertices.data(), GL_STATIC_DRAW ); | |
vao = gl::Vao::create(); | |
//gl::ScopedVao vao( vao ); | |
const uint32_t POSITION_INDEX = 0, COLOR_INDEX = 1; | |
vao->bind(); | |
{ | |
auto ptr0 = offsetof( Vertex, pos ); | |
auto ptr1 = offsetof( Vertex, color ); | |
console() << ptr0 << " " << ptr1 << " " << sizeof( Vertex ) << endl; | |
//gl::ScopedBuffer vbo( vbo ) | |
vbo->bind(); | |
gl::enableVertexAttribArray( POSITION_INDEX ); | |
gl::vertexAttribPointer( POSITION_INDEX, 3, GL_FLOAT, GL_FALSE, sizeof( Vertex ), ( const GLvoid* ) ptr0 ); | |
gl::enableVertexAttribArray( COLOR_INDEX ); | |
gl::vertexAttribPointer( COLOR_INDEX, 3, GL_FLOAT, GL_FALSE, sizeof( Vertex ), ( const GLvoid* ) ptr1 ); | |
} | |
std::string vs = "#version 330\n" | |
"in vec3 position;\n" | |
"in vec3 color;\n" | |
"out vec3 vColor;\n" | |
"uniform float time;" | |
"void main(){\n" | |
" gl_Position = vec4(position, 1.0);\n" | |
" vColor = color * ((sin(time + (gl_VertexID * 100)) + 1) * .5);\n }"; | |
std::string fs = "#version 330\n" | |
"in vec3 vColor;\n" | |
"out vec4 oColor;\n" | |
"void main(){ oColor = vec4(vColor, 1.0); }"; | |
glsl = gl::GlslProg::create( gl::GlslProg::Format().vertex( vs ).fragment( fs ) | |
.attribLocation( "position", POSITION_INDEX ) | |
.attribLocation( "color", COLOR_INDEX ) ); | |
} | |
void HelloTriangleApp::mouseDown( MouseEvent event ) | |
{ | |
} | |
void HelloTriangleApp::update() | |
{ | |
} | |
void HelloTriangleApp::draw() | |
{ | |
gl::clear( Color( 0, 0, 0 ) ); | |
gl::ScopedVao scopeVao( vao ); | |
gl::ScopedGlslProg scopeGlsl( glsl ); | |
glsl->uniform( "time", (float)getElapsedSeconds() ); | |
gl::drawArrays( GL_TRIANGLES, 0, 3 ); | |
} | |
CINDER_APP( HelloTriangleApp, RendererGl ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment