
September 30th, 2006, 10:50 AM
|
|
Registered User
|
|
Join Date: Aug 2006
Posts: 7
Time spent in forums: 13 m 47 sec
Reputation Power: 0
|
|
|
GLUT auto-moving and rubber-bandind circle
Hi. I've been having trouble making an auto-moving circle and a rubbber-banding circle in a program I'm trying to write. This program is pretty much just to get me started in OpenGL. What I need to do is have the auto-moving circle be blue and go from the bottom left to the top right of the screen. And the rubber-banding circle should be white when i'm adjusting it and green when it's fixed. Here's my current code; any help, advice, code alterations, or links to any tutorials will be greatly appreciated. thank you
Code:
#include "stdafx.h"
#include <string>
#include "glut.h"
#include <iostream>
#include <math.h>
float globalx;
float globaly;
int displayMode;
const float DEG2RAD=3.14159/180;
float xCon(float x)
{
float xNew;
xNew=(float)x/(500.0/2.0);
xNew=xNew-1.0;
return xNew;
}
float yCon(float y)
{
float yNew;
yNew=(float)y/(500.0/2.0);
yNew=yNew-1.0;
yNew=-yNew;
return yNew;
}
void display(void)
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFlush();
}
void drawRedSquare(int x, int y)
{
globalx=xCon((float)x);
globaly=yCon((float)y);
glColor3f(1.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(globalx-0.05,globaly-0.05);
glVertex2f(globalx-0.05,globaly+0.05);
glVertex2f(globalx+0.05,globaly+0.05);
glVertex2f(globalx+0.05,globaly-0.05);
glEnd();
glFlush();
}
void drawYellowSquare(int x=-0.1, int y=0.1)
{
globalx=xCon((float)x);
globaly=yCon((float)y);
glColor3f(1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(globalx-0.05,globaly-0.05);
glVertex2f(globalx-0.05,globaly+0.05);
glVertex2f(globalx+0.05,globaly+0.05);
glVertex2f(globalx+0.05,globaly-0.05);
glEnd();
glFlush();
}
void drawCircle(float x, float y, float radius)
{
glBegin(GL_LINE_LOOP);
for (int i = 0; i < 360; i++)
{
float degInRad = i * DEG2RAD;
glVertex2f(x+cos(degInRad)*radius, y+sin(degInRad)*radius);
}
glEnd();
}
void mouseSquare(int button, int state, int x, int y)
{
if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
globalx=xCon(x);
globaly=yCon(y);
printf("%f, %f", globalx, globaly);
glutMotionFunc(drawRedSquare);
glFlush();
//glutPostRedisplay();
}
globalx=xCon(x);
globaly=yCon(y);
glutPassiveMotionFunc(drawYellowSquare);
glFlush();
//glutPostRedisplay();
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 27)
exit(0);
}
void menu(int id)
{
switch(id)
{
case 1:
//glClear(GL_COLOR_BUFFER_BIT);
glutMouseFunc(mouseSquare);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
glEnd();
break;
case 2:
glFlush();
glEnd();
glClear(GL_COLOR_BUFFER_BIT);
//glutIdleFunc();
break;
case 3: exit(0);
break;
}
glutPostRedisplay();
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("Assignment 1");
glutDisplayFunc(display);
static int menuvar;
menuvar=glutCreateMenu(menu);
glutAddMenuEntry("Rectangle With Mouse",1);
glutAddMenuEntry("Automoving Circle",2);
glutAddMenuEntry("Rubberbanding Circle",3);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutKeyboardFunc(keyboard);
//glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
|