02-OpenGL菜单及橡皮筋技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
iPointNum=0;
glutPostRedisplay();
}
}*/
void Key(unsigned key,int x,int y){
switch(key){
case 'p':
if(iPointNum==0||iPointNum==2){
iPointNum=1;
x1=x;y1=winHeight-y; //确定直线的第一个端点
glVertex2i(x1,y1);
glVertex2i(x1,y2);
glVertex2i(x2,y2);
glVertex2i(x2,y1);
glEnd();
}else{
glBegin(GL_LINES); //绘制直线段
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd();
iPointNum=1;
x1=xMouse;y1=winHeight-yMouse; //确定直线的第一个端点
}
else{
iPointNum=2;
x2=xMouse;y2=winHeight-yMouse;
glutPostRedisplay(); //指定窗口重新绘制
}
}
if(button==GLUT_RIGHT_BUTTON&&action==GLUT_DOWN){
glutAddMenuEntry("折线",1);
glutAddMenuEntry("矩形",2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
int mainMenu=glutCreateMenu(ProcessMenu);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
glutKeyboardFunc(Key);
glutPassiveMotionFunc(PassiveMouseMove);
Initial();
glutMainLoop();
return 0;阅读使人快乐,成长需要时间
}
x2=xMouse;
y2=winHeight-yMouse;
glutPostRedisplay();
}
}
void ProcessMenu(int value){
change=value;
glutPostRedisplay();
}
int main(int argc,char *argv[]){
glutInit(&argc,argv);
}
}
glutSwapBuffers(); //交换缓冲区
}
/*
void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse){
if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN){
if(iPoinБайду номын сангаасNum==0||iPointNum==2){
}
else{
iPointNum=2;
x2=x;y2=winHeight-y;
glutPostRedisplay(); //指定窗口重新绘制
}
break;
default:break;
}
}
void PassiveMouseMove(GLint xMouse,GLint yMouse){
if(iPointNum==1){
}
void Display(void){
glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口
glColor3f(1.0f,0.0f,1.0f); //指定当前的绘图模式
if(iPointNum>=1){
if(change==2){
glBegin(GL_LINE_LOOP); //绘制矩形
winWidth = w; winHeight=h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION); //指定设置投影参数
glLoadIdentity(); //调用单位矩阵,去掉以前的投影参数
gluOrtho2D(0.0,winWidth,1.0,winHeight); //设置投影参数
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(400,300);
glutInitWindowPosition(100,100);
glutCreateWindow("橡皮筋技术");
glutCreateMenu(ProcessMenu);
第二次作业:用键盘实现技术橡皮筋已经绘制矩形,菜单选择
说明:用键盘实现橡皮筋技术绘制矩形或直线,通过鼠标右键菜单进行选择。
运行截图:
附代码:
#include <windows.h>
#include <glut.h>
#include <gl.h>
int iPointNum=0; //已确定点的数目
int x1=0,x2=0,y1=0,y2=0; //确定的坐标
int winWidth=400,winHeight=300; //窗口的宽度和高度
int change=1;
void Initial(void){ //设置窗口的背景颜色
glClearColor(1.0f,1.0f,1.0f,1.0f);
}
void ChangeSize(int w,int h){
glutPostRedisplay();
}
}*/
void Key(unsigned key,int x,int y){
switch(key){
case 'p':
if(iPointNum==0||iPointNum==2){
iPointNum=1;
x1=x;y1=winHeight-y; //确定直线的第一个端点
glVertex2i(x1,y1);
glVertex2i(x1,y2);
glVertex2i(x2,y2);
glVertex2i(x2,y1);
glEnd();
}else{
glBegin(GL_LINES); //绘制直线段
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd();
iPointNum=1;
x1=xMouse;y1=winHeight-yMouse; //确定直线的第一个端点
}
else{
iPointNum=2;
x2=xMouse;y2=winHeight-yMouse;
glutPostRedisplay(); //指定窗口重新绘制
}
}
if(button==GLUT_RIGHT_BUTTON&&action==GLUT_DOWN){
glutAddMenuEntry("折线",1);
glutAddMenuEntry("矩形",2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
int mainMenu=glutCreateMenu(ProcessMenu);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
glutKeyboardFunc(Key);
glutPassiveMotionFunc(PassiveMouseMove);
Initial();
glutMainLoop();
return 0;阅读使人快乐,成长需要时间
}
x2=xMouse;
y2=winHeight-yMouse;
glutPostRedisplay();
}
}
void ProcessMenu(int value){
change=value;
glutPostRedisplay();
}
int main(int argc,char *argv[]){
glutInit(&argc,argv);
}
}
glutSwapBuffers(); //交换缓冲区
}
/*
void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse){
if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN){
if(iPoinБайду номын сангаасNum==0||iPointNum==2){
}
else{
iPointNum=2;
x2=x;y2=winHeight-y;
glutPostRedisplay(); //指定窗口重新绘制
}
break;
default:break;
}
}
void PassiveMouseMove(GLint xMouse,GLint yMouse){
if(iPointNum==1){
}
void Display(void){
glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口
glColor3f(1.0f,0.0f,1.0f); //指定当前的绘图模式
if(iPointNum>=1){
if(change==2){
glBegin(GL_LINE_LOOP); //绘制矩形
winWidth = w; winHeight=h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION); //指定设置投影参数
glLoadIdentity(); //调用单位矩阵,去掉以前的投影参数
gluOrtho2D(0.0,winWidth,1.0,winHeight); //设置投影参数
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(400,300);
glutInitWindowPosition(100,100);
glutCreateWindow("橡皮筋技术");
glutCreateMenu(ProcessMenu);
第二次作业:用键盘实现技术橡皮筋已经绘制矩形,菜单选择
说明:用键盘实现橡皮筋技术绘制矩形或直线,通过鼠标右键菜单进行选择。
运行截图:
附代码:
#include <windows.h>
#include <glut.h>
#include <gl.h>
int iPointNum=0; //已确定点的数目
int x1=0,x2=0,y1=0,y2=0; //确定的坐标
int winWidth=400,winHeight=300; //窗口的宽度和高度
int change=1;
void Initial(void){ //设置窗口的背景颜色
glClearColor(1.0f,1.0f,1.0f,1.0f);
}
void ChangeSize(int w,int h){