Compare commits
No commits in common. "ac1ed354ce44bbc25392e871e2cede8385922f9e" and "75cc8da7ee8abdcb41b5b62395d71ce069b8a8d0" have entirely different histories.
ac1ed354ce
...
75cc8da7ee
2 changed files with 14 additions and 56 deletions
61
mmn_17.c
61
mmn_17.c
|
@ -6,19 +6,11 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
// close enough
|
|
||||||
#define PI 3.14
|
|
||||||
|
|
||||||
|
int lastMouseButton = GLUT_LEFT_BUTTON;
|
||||||
// Camera rotation and stuff
|
ui_slider* draggedSlider = NULL;
|
||||||
float camRadius = 10.0;
|
|
||||||
vec3 camCenter = { 0.0, 0.0, 0.0 };
|
|
||||||
vec3 camRot = { PI * 0.125, 0.0, 0.0 };
|
|
||||||
|
|
||||||
// Ui stuff
|
// Ui stuff
|
||||||
int lastMouseButton = GLUT_LEFT_BUTTON;
|
|
||||||
int lastMouseX = 0, lastMouseY = 0;
|
|
||||||
ui_slider* draggedSlider = NULL;
|
|
||||||
void testButtonClick();
|
void testButtonClick();
|
||||||
ui_button buttons[] = {
|
ui_button buttons[] = {
|
||||||
{
|
{
|
||||||
|
@ -32,7 +24,7 @@ ui_button buttons[] = {
|
||||||
ui_slider sliders[] = {
|
ui_slider sliders[] = {
|
||||||
{
|
{
|
||||||
/* pos */ { { 0.5, 0.7, 0.0 }, {-50.0, -5.0, 0.0 } },
|
/* pos */ { { 0.5, 0.7, 0.0 }, {-50.0, -5.0, 0.0 } },
|
||||||
/* size */ { 100.0, 10.0, 8.0 },
|
/* size */ { 100.0, 10.0, 10.0 },
|
||||||
0.1
|
0.1
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -40,7 +32,6 @@ ui_slider sliders[] = {
|
||||||
void testButtonClick() {
|
void testButtonClick() {
|
||||||
printf("Clicked!\n");
|
printf("Clicked!\n");
|
||||||
sliders[0].value = 0.5;
|
sliders[0].value = 0.5;
|
||||||
camCenter = vec3_new(0.0, 1.0, 0.0);
|
|
||||||
glutPostRedisplay();
|
glutPostRedisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,27 +65,15 @@ void drawWorld(void) {
|
||||||
// set perspective camera
|
// set perspective camera
|
||||||
GLdouble wWidth = (GLdouble) glutGet(GLUT_WINDOW_WIDTH);
|
GLdouble wWidth = (GLdouble) glutGet(GLUT_WINDOW_WIDTH);
|
||||||
GLdouble wHeight = (GLdouble) glutGet(GLUT_WINDOW_HEIGHT);
|
GLdouble wHeight = (GLdouble) glutGet(GLUT_WINDOW_HEIGHT);
|
||||||
// Calculate current camera position from rotation
|
|
||||||
vec3 cp = vec3_new(0.0, 0.0, 0.0);
|
|
||||||
// rotate along the x axis(yz plane)
|
|
||||||
cp.z = cosf(camRot.x);
|
|
||||||
cp.y = sinf(camRot.x);
|
|
||||||
// rotate along the y axis(xy plane)
|
|
||||||
cp.x = cp.z * sinf(camRot.y);
|
|
||||||
cp.z *= cosf(camRot.y);
|
|
||||||
cp = vec3_mult(cp, camRadius);
|
|
||||||
cp = vec3_add(cp, camCenter);
|
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
gluLookAt(cp.x, cp.y, cp.z, camCenter.x, camCenter.y, camCenter.z, 0.0, 1.0, 0.0);
|
gluLookAt(0.0, 10.0, 20.0, (0.5 - sliders[0].value) * 10.0, 0.0, 0.0, 0.0, 1.0, 0.0);
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
gluPerspective(90, wWidth / wHeight , 1.0, 100.0);
|
gluPerspective(90, wWidth / wHeight , 1.0, 100.0);
|
||||||
// Lights
|
// Lights
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glEnable(GL_LIGHT0);
|
glEnable(GL_LIGHT0);
|
||||||
// Directional light - aka light
|
|
||||||
GLfloat light1[] = { 0.0, 1.0, 0.0, 0.0 };
|
GLfloat light1[] = { 0.0, 1.0, 0.0, 0.0 };
|
||||||
glLightfv(GL_LIGHT0, GL_POSITION, light1);
|
glLightfv(GL_LIGHT0, GL_POSITION, light1);
|
||||||
// World
|
// World
|
||||||
|
@ -121,7 +100,6 @@ void display(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseEvent(int button, int state, int x, int y) {
|
void mouseEvent(int button, int state, int x, int y) {
|
||||||
lastMouseX = x; lastMouseY = y;
|
|
||||||
if(state == 0) lastMouseButton = button;
|
if(state == 0) lastMouseButton = button;
|
||||||
if(state == 0 && button == GLUT_LEFT_BUTTON) {
|
if(state == 0 && button == GLUT_LEFT_BUTTON) {
|
||||||
for(ui_button* b = buttons; b < buttons + sizeof buttons / sizeof(ui_button); b += 1) {
|
for(ui_button* b = buttons; b < buttons + sizeof buttons / sizeof(ui_button); b += 1) {
|
||||||
|
@ -156,44 +134,18 @@ void mouseMotionEvent(int x, int y) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: replace with wasd/space/ctrl movement instead
|
|
||||||
else if(lastMouseButton == GLUT_MIDDLE_BUTTON) {
|
|
||||||
// get xz plane rotation
|
|
||||||
float mx = cosf(camRot.y);
|
|
||||||
float mz = -sinf(camRot.y);
|
|
||||||
float m = (x - lastMouseX);
|
|
||||||
|
|
||||||
camCenter.y += (y - lastMouseY) * 0.5;
|
|
||||||
camCenter.x -= m * mx;
|
|
||||||
camCenter.z -= m * mz;
|
|
||||||
printf("new cam center %f %f %f\n", camCenter.x, camCenter.y, camCenter.z);
|
|
||||||
}
|
|
||||||
else if(lastMouseButton == GLUT_RIGHT_BUTTON) {
|
|
||||||
// rotate the camera
|
|
||||||
camRot.y -= (x - lastMouseX) * PI * 0.01;
|
|
||||||
if(camRot.y > 2 * PI) camRot.y -= 2 * PI;
|
|
||||||
else if(camRot.y < 0.0) camRot.y += 2 * PI;
|
|
||||||
|
|
||||||
camRot.x = fmin(PI * 0.5, fmax(-PI * 0.5, camRot.x + (y - lastMouseY) * 0.01 * PI));
|
|
||||||
}
|
|
||||||
lastMouseX = x; lastMouseY = y;
|
|
||||||
glutPostRedisplay();
|
glutPostRedisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseWheelEvent(int wheel, int dir, int x, int y) {
|
void mouseWheelEvent(int wheel, int dir, int x, int y) {
|
||||||
char slided = 0;
|
|
||||||
for(ui_slider* s = sliders; s < sliders + sizeof sliders / sizeof(ui_slider); s += 1) {
|
for(ui_slider* s = sliders; s < sliders + sizeof sliders / sizeof(ui_slider); s += 1) {
|
||||||
if(ui_slider_mouse_over(s, x, y)) {
|
if(ui_slider_mouse_over(s, x, y)) {
|
||||||
s->value += dir * 0.05;
|
s->value += dir * 0.05;
|
||||||
if(s->value < 0.0) s->value = 0.0;
|
if(s->value < 0.0) s->value = 0.0;
|
||||||
if(s->value > 1.0) s->value = 1.0;
|
if(s->value > 1.0) s->value = 1.0;
|
||||||
printf("Updated %p value to %f\n", s, s->value);
|
printf("Updated %p value to %f\n", s, s->value);
|
||||||
slided = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!slided) {
|
|
||||||
camRadius *= 1.0 + (dir * 0.1);
|
|
||||||
}
|
|
||||||
glutPostRedisplay();
|
glutPostRedisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,6 +173,11 @@ int main(int argc, char** argv) {
|
||||||
glutMouseWheelFunc(mouseWheelEvent);
|
glutMouseWheelFunc(mouseWheelEvent);
|
||||||
glutMotionFunc(mouseMotionEvent);
|
glutMotionFunc(mouseMotionEvent);
|
||||||
|
|
||||||
|
/* set projection and camera */
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluOrtho2D(0.0, 800.0, 0.0, 500.0);
|
||||||
|
|
||||||
glutMainLoop();
|
glutMainLoop();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
9
ui.c
9
ui.c
|
@ -72,10 +72,11 @@ void ui_slider_draw(ui_slider* s) {
|
||||||
glVertex3f(pos.x, pos.y + ext.y, pos.z);
|
glVertex3f(pos.x, pos.y + ext.y, pos.z);
|
||||||
// Draw slider button thing
|
// Draw slider button thing
|
||||||
glColor3f(1.0, 1.0, 1.0);
|
glColor3f(1.0, 1.0, 1.0);
|
||||||
glVertex3f(slider.x - ext.z, slider.y - ext.z, 0.0);
|
glVertex3f(slider.x - ext.z, slider.y - ext.y, 0.0);
|
||||||
glVertex3f(slider.x + ext.z, slider.y - ext.z, 0.0);
|
glVertex3f(slider.x + ext.z, slider.y - ext.y, 0.0);
|
||||||
glVertex3f(slider.x + ext.z, slider.y + ext.z, 0.0);
|
glVertex3f(slider.x + ext.z, slider.y + ext.y, 0.0);
|
||||||
glVertex3f(slider.x - ext.z, slider.y + ext.z, 0.0);
|
glVertex3f(slider.x - ext.z, slider.y + ext.y, 0.0);
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue