图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx

上传人:b****5 文档编号:21143755 上传时间:2023-01-27 格式:DOCX 页数:11 大小:97.08KB
下载 相关 举报
图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx_第1页
第1页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx_第2页
第2页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx_第3页
第3页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx_第4页
第4页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx

《图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx》由会员分享,可在线阅读,更多相关《图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

图形学实验报告 OpenGL实现橡皮筋技术文档格式.docx

3、实现拾取操作的例子结果:

五、程序代码

1、利用鼠标实现橡皮筋技术

#include<

gl/glut.h>

intiPointNum=0;

//已确定点的数目

intx1=0,x2=0,y1=0,y2=0;

//确定的点坐标

intwinWidth=400,winHeight=300;

//窗口的宽度和高度

voidInitial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f);

}

voidChangeSize(intw,inth)

winWidth=w;

winHeight=h;

glViewport(0,0,w,h);

//指定窗口显示区域

glMatrixMode(GL_PROJECTION);

//设置投影参数

glLoadIdentity();

gluOrtho2D(0.0,winWidth,0.0,winHeight);

voidDisplay(void)

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f,0.0f,0.0f);

if(iPointNum>

=1){

glBegin(GL_LINES);

//绘制直线段

glVertex2i(x1,y1);

glVertex2i(x2,y2);

glEnd();

}

glutSwapBuffers();

//交换缓冲区

voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse)

if(button==GLUT_LEFT_BUTTON&

&

action==GLUT_DOWN){

if(iPointNum==0||iPointNum==2){

iPointNum=1;

x1=xMouse;

y1=winHeight-yMouse;

}

else{

iPointNum=2;

x2=xMouse;

y2=winHeight-yMouse;

glutPostRedisplay();

//指定窗口重新绘制

if(button==GLUT_RIGHT_BUTTON&

action==GLUT_DOWN){

iPointNum=0;

glutPostRedisplay();

voidPassiveMouseMove(GLintxMouse,GLintyMouse)

if(iPointNum==1){

x2=xMouse;

}

intmain(intargc,char*argv[])

glutInit(&

argc,argv);

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);

//使用双缓存及RGB模型

glutInitWindowSize(400,300);

glutInitWindowPosition(100,100);

glutCreateWindow("

橡皮筋技术"

);

glutDisplayFunc(Display);

glutReshapeFunc(ChangeSize);

//指定窗口在整形回调函数

glutMouseFunc(MousePlot);

//指定鼠标响应函数

glutPassiveMotionFunc(PassiveMouseMove);

//指定鼠标移动响应函数

Initial();

glutMainLoop();

return0;

2、利于键盘实现橡皮筋技术

voidKey(unsignedcharkey,intx,inty)

switch(key){

case'

p'

:

if(iPointNum==0||iPointNum==2){

iPointNum=1;

x1=x;

y1=winHeight-y;

}

else{

iPointNum=2;

x2=x;

y2=winHeight-y;

glutPostRedisplay();

break;

default:

break;

glutKeyboardFunc(Key);

//指定键盘响应函数

3、实现拾取操作的例子

#include"

stdio.h"

constGLintpickSize=32;

voidDrawRect(GLenummode)

if(mode==GL_SELECT)glPushName

(1);

//压入堆栈

glColor3f(1.0f,0.0f,0.0f);

glRectf(60.0f,50.0f,150.0f,150.0f);

if(mode==GL_SELECT)glPushName

(2);

glColor3f(0.0f,1.0f,0.0f);

glRectf(230.0f,50.0f,330.0f,150.0f);

if(mode==GL_SELECT)glPushName(3);

glColor3f(0.0f,0.0f,1.0f);

glRectf(140.0f,140.0f,240.0f,240.0f);

voidProcessPicks(GLintnPicks,GLuintpickBuffer[])

GLinti;

GLuintname,*ptr;

printf("

选中的数目为%d个\n"

nPicks);

ptr=pickBuffer;

for(i=0;

i<

nPicks;

i++){

name=*ptr;

//选中图元在堆栈中的位置

ptr+=3;

//跳过名字和深度信息

ptr+=name-1;

//根据位置信息获得选中的图元名字

if(*ptr==1)printf("

你选择了红色图元\n"

if(*ptr==2)printf("

你选择了绿色图元\n"

if(*ptr==3)printf("

你选择了蓝色图元\n"

ptr++;

printf("

\n\n"

winWidth=w;

winHeight=h;

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0.0,winWidth,0.0,winHeight);

glClear(GL_COLOR_BUFFER_BIT);

DrawRect(GL_RENDER);

glFlush();

GLuintpickBuffer[pickSize];

GLintnPicks,vp[4];

if(button==GLUT_LEFT_BUTTON&

action==GLUT_DOWN){

glSelectBuffer(pickSize,pickBuffer);

//设置选择缓冲区

glRenderMode(GL_SELECT);

//激活选择模式

glInitNames();

//初始化名字堆栈

glPushMatrix();

glGetIntegerv(GL_VIEWPORT,vp);

//定义一个10×

10的选择区域

gluPickMatrix(GLdouble(xMouse),GLdouble(vp[3]-yMouse),10.0,10.0,vp);

DrawRect(GL_SELECT);

//恢复投影变换

glPopMatrix();

//获得选择集并输出

nPicks=glRenderMode(GL_RENDER);

ProcessPicks(nPicks,pickBuffer);

glutPostRedisplay();

glutInit(&

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(400,300);

glutInitWindowPosition(100,100);

glutCreateWindow("

拾取操作"

glutDisplayFunc(Display);

glutReshapeFunc(ChangeSize);

glutMouseFunc(MousePlot);

Initial();

glutMainLoop();

return0;

6、心得体会

通常在实验过程中,可以加入自己喜欢的其他东西,不过要保证原本的基本东西没有错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1