opengl实验报告

时间:2024.4.1

总评成绩:_________________________

实验类型: 交互

实验名称: 实验2.3草拟

姓名: __肖祥炜____________

学号: ____201158501103______ 班级: ___计111-1_______

电子文档提交:   按时提交____              延时提交____                     未提交____

格式正确____                     基本正确____                     不正确____                 

实验报告:          完    整____           合    格____                     不合格____

实验成绩:____________________

验收记录:时间________________          顺序________________

?           

?           

?           

?           

?           

?           

?           

?          

?          

?          

?          

?          

?          

?          

?          

?          

?          

?          

?          

?          


一、原创性声明

程序参考了drawFreeCurve.c程序自由画线部分,其余的都是自己原创的

二、实验要求

1.单击左键移动鼠标开始自由绘图。

2.单击鼠标右键绘制随机曲线:

(1)单击键盘a放大图形

(2)单击键盘b缩小图形

三、完成情况

l  功能1 : 基本内容

²  功能描述:

²  完成情况: 基本完成实验要求,但是在绘制随机线条时,图案总是显示在左下角,如果图案调到中间左键自由绘制的时候点不在鼠标点上,不知道怎么改!!

²  Bug:暂时没有找到

²  备注:图形放大会放大到窗口外面。

四、实现方案

1.用鼠标响应函数控制左右键,在左键条件下用一个参数记录鼠标单击几次,只有当参数为1 时才响应鼠标移动函数绘制点,所以只要鼠标移动速度比较慢就能自由绘制图形。

2.自由绘制随机曲线:绘制bezier曲线,把他的四个点用随机数代替就行,设置八个随机数分别控制4个点,单击右键,响应一次随机函数给4个点赋值。

3.放大缩小:放大与减少随机函数。

五、创新和亮点

六、运行结果

给出尽可能完备的测试用例及测试结果(截图)

-    合法的测试用例至少两个

-    1:左键单击移动鼠标形成的图案

2.右键单击形成的随机曲线

3.放大随机曲线

- 非法的测试用例至少两个

七、源码

#include <GL/glut.h>

#include <stdlib.h>

#include<iostream.h>

/* globals */

int iPointNum = 0; //定义一个鼠标记录单击几次的参数

int w[7];

int c,d,f,h,g,j,k; //七个随机数

GLsizei wh = 800, ww = 600;

int num[7]={0};

/* initial window size */

GLfloat size = 3.0;   /* half side length of square */

//红色部分引用drawFreeCurve.c程序的画点部分

void drawSquare(int x, int y)//画点函数颜色随机

{

      y=wh-y;

   

  glColor3ub( (char) rand()%256, (char) rand()%256, (char) rand()%256);

   

  glBegin(GL_POLYGON);

           

glVertex2f(x+size, y+size);

   

        glVertex2f(x-size, y+size);

   

        glVertex2f(x-size, y-size);

        glVertex2f(x+size, y-size);

  glEnd();

   

  glFlush();

}

void myReshape(GLsizei w, GLsizei h)//初始化窗体点部分的

{

/* adjust clipping box */

  

glMatrixMode(GL_PROJECTION);

 

    glLoadIdentity();

  

    glOrtho(10.0, (GLdouble)w, 0.0, (GLdouble)h, -10.0, 10.0);

 

    glMatrixMode(GL_MODELVIEW);

   glLoadIdentity();

glViewport(0,0,w,h);

    glClearColor (1.0, 1.0, 1.0, 1.0);

    glClear(GL_COLOR_BUFFER_BIT);

    glLineWidth(4.0);

    glFlush();

   

ww = w;

    wh = h;

}

/* display callback required by GLUT 3.0 */

void display(void)

{       glViewport(0,0,ww,wh);

}

void  random()//随机数产生函数

{   int i;

   

    for( i=0;i<7;i++)

        w[i]=(int) rand()%100;

for(i=0;i<7;i++)

num[i]=w[i];

   

}

void mouse()/画随机曲线函数

{

c=w[0]+num[0];

d=w[1]+num[1];

f=w[2]+num[2];

h=w[3]+num[3];

g=w[4]+num[4];

j=w[5]+num[5];

k=w[6]+num[6];

    GLfloat ControlP[4][3]={{c,c,0.0},  {d,f,0.0},

    {h,g,0.0},  {j,k,0.0}};

    glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,*ControlP);

    glEnable(GL_MAP1_VERTEX_3);

    glFlush();

        glutPostRedisplay();

        glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0, 0.0, 0.0);

    glMapGrid1f(100,0.0,1.0);

    glEvalMesh1(GL_LINE, 0, 100);

    glFlush();

}

void MousePlot(GLint button, GLint action, GLint xMouse, GLint yMouse)// 右键鼠标响应函数

{

    if(button == GLUT_LEFT_BUTTON && action == GLUT_DOWN)   {

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

            iPointNum = 1;

        GLint   x = xMouse;   GLint y = wh- yMouse;

           

        }

        else {

            iPointNum = 2;

            GLint   x = xMouse;     GLint   y = wh - yMouse;

           

        }

   

    }

    if(button == GLUT_RIGHT_BUTTON && action == GLUT_DOWN){

        iPointNum = 0;

random();

 mouse();

   

    }

}

void PassiveMouseMove (GLint xMouse, GLint yMouse)//鼠标移动函数

{

    if(iPointNum == 1)  {

    GLint   x = xMouse;

    GLint   y =  yMouse;   

    drawSquare(x, y);  

    }  

}

void keyboard(unsigned char key, int x, int y)//键盘响应

{int i;

   switch (key) {

      case 'a':

for(i=0;i<7;i++)

num[i] *=2;

mouse();

   

 break      

     case 'b':

for(i=0;i<7;i++)

num[i] /=-2;

mouse();

 break;

       

      default:

            break;

   }

}

void main(int argc, char** argv)

glutInit(&argc,argv);

   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

    glutCreateWindow("草拟一");

   glutInitWindowSize(400, 400);

   glutInitWindowPosition (100, 100);

    glutDisplayFunc(display);                    //回调函数

   glutReshapeFunc (myReshape);

    glutMouseFunc(MousePlot);                  //指定鼠标响应函数

    glutPassiveMotionFunc(PassiveMouseMove);    //指定鼠标移动响应函数

    glutKeyboardFunc (keyboard);          //键盘响应函数

    glutMainLoop();

}


第二篇:opengl计算机图形学实验报告之3D漫游世界


北师大珠海分校信息技术学院

计算机图形学实验报告

实验报告文件命名方式:学号姓名_实验序号_实验名称.doc

更多相关推荐:
opengl实验报告

贵州大学实验报告学院计算计科学与信息学院专业班级贵州大学实验报告学院计算计科学与信息学院专业数字媒体技术班级数媒091贵州大学实验报告学院计算计科学与信息学院专业数字媒体技术班级数媒091

图形学实验报告 OpenGL中的变换

计算机图形学基础实验6OpenGL中的变换一实验目的及要求1理解OpenGL中的各种变换的实现原理2掌握OpenGL中模型视图矩阵的操作方法3掌握OpenGL中投影变换的实现方法二实验环境主要是软件开发环境VC...

opengl学习指导实验 计算机图形学上机

计算机图形学实验指导书计算机科学与信息工程学院目录实验一OpenGL程序设计3实验二二维基本图元的生成7实验三二维图元的填充13实验四二维图形的几何变换18实验五裁剪23实验六自由曲线26实验七造型技术27实验...

opengl项目一实验报告

Opengl项目一一题目分析利用OpenGL绘制一个简单的场景包含球正方形网格数据交互操作平移缩放旋转可以使用不同的灯光项目1作业上交内容项目作交内容代码报告简要介绍项目的开发情况场景介绍不同的场景要有不同的图...

opengl实验报告

本科实验报告课程名称:计算机图形学实验类型:上机实验项目名称:实现五边形的扫描转换算法学生姓名:**专业:软件工程学号:**指导老师:**实验地点:院系专用教室实验日期:_20**-04-03_一、实验目的编程…

实验一 基于opengl的基本编程-有配套实验报告已上传

高级图形图像处理实验一基于opengl的二维图形编程实验目的通过配置opengl编程环境绘制基本图形和二维变换掌握opengl的函数调用深入理解opengl的框架和二维观察流水线的流程实验内容1opengl编程...

OpenGL实验报告_学号_姓名

实验5OpenGL姓名学号目标了解OpenGL图形标准了解其基本的编程方法要求详见课件报告3个工程选做不少于2个OpenGL1改变的代码及分析最终运行效果图OpenGL2改变的代码及分析最终运行效果图OpenG...

图形学实验报告 OpenGL实现橡皮筋技术

计算机图形学基础2OpenGL实现橡皮筋技术实验一实验目的及要求1掌握橡皮筋技术的实现原理和方法2掌握OpenGL的双缓存技术3掌握OpenGL中鼠标的使用方法4掌握OpenGL中键盘的使用方法二实验环境主要是...

广工OpenGL图形学实验报告

计算机科学与技术4班31120xx901柏石先OpenGL考试作品极光下旋转的地球includeltstdlibhgtincludeltGLgluthgtincludeltGLglauxhgtdefineMAX...

使用opengl程序绘制实线、虚线和点划线

GIS专业实验报告计算机图形学实验5使用opengl程序绘制实线虚线和点划线一实验目的及要求使用opengl程序绘制实线虚线和点划线二理论基础1显示列表显示列表是一组OpenGL函数调用它被存储起来供以后执行这...

实验报告8(用OpenGL生成曲线)

实验八用OpenGL生成曲线实验目的一理解Bzier曲线和B样条曲线的定义性质及绘制算法二理解OpenGL中窗口坐标与世界坐标的映射关系三掌握OpenGL的Bzier曲线和NURBS曲线的绘制方法实验内容文件一...

openGL虚线,点划线,KOCK曲线实验报告

实验四实验报告1实验目的和要求利用OpenGL实现实线虚线点划线的绘制及kock曲线2实验内容1用OpenGL程序绘制实现虚线和点划线2用OpenGL程序分别以直线和正三角形为初始生成员实现迭代次数在6次以内的...

opengl实验报告(15篇)