games101-hw/08/CGL/examples/triangle.cpp

111 lines
1.9 KiB
C++

#include <string>
#include <iostream>
#include "viewer.h"
#include "renderer.h"
using namespace std;
using namespace CGL;
class TriangleDrawer : public Renderer {
public:
~TriangleDrawer() { }
string name() {
return "Triangle Renderer";
}
string info() {
return "I just draw a blue triangle";
}
void init() {
return;
}
void render() {
if (shoud_draw) {
glBegin(GL_TRIANGLES);
glColor3f( 0.1, 0.2, 0.3);
glVertex3f(0.0, 0.5, 0.0);
glVertex3f(-.5, -.5, 0.0);
glVertex3f(0.5, -.5, 0.0);
glEnd();
}
}
void resize(size_t w, size_t h) {
this->w = w;
this->h = h;
return;
}
void key_event(char key) {
if (key == 'R') shoud_draw = !shoud_draw;
return;
}
void cursor_event(float x, float y, unsigned char keys) {
// translate when left mouse button is held down
if (keys & (1 << 2)) {
float dx = x - cursor_x;
float dy = y - cursor_y;
glTranslatef(0.5 * dx / w, - 0.5 * dy / h, 0);
}
// update
cursor_x = x;
cursor_y = y;
}
void scroll_event(float offset_x, float offset_y) {
float scale = 1 + 0.1 * offset_x - 0.1 * offset_y;
glScalef(scale, scale, 1);
}
void mouse_button_event(int button, int event) {
switch (event) {
case MOUSE_BUTTON_PRESS:
cerr << "You clicked button " << button << endl;
break;
case MOUSE_BUTTON_RELEASE:
cerr << "You released button " << button << endl;
break;
}
}
private:
// show draw triangle
bool shoud_draw;
// frame buffer size
size_t w, h;
// cursor position
float cursor_x, cursor_y;
};
int main( int argc, char** argv ) {
// create viewer
Viewer viewer = Viewer();
// defined a user space renderer
Renderer* renderer = new TriangleDrawer();
// set user space renderer
viewer.set_renderer(renderer);
// start the viewer
viewer.init();
viewer.start();
return 0;
}