精华内容
下载资源
问答
  • SDL+OpenGL实验报告1.zip

    2021-10-05 22:42:12
    SDL+OpenGL实验报告1.zip
  • 计算机图形学OpenGL实验实验报告学院(系)名称:姓名学号专业班级实验项目实验四:场景漫游课程名称计算机图形学课程代码实验时间实验地点批改意见成绩教师签字:实验环境(软、硬件环境)实验目的掌握透视投影与平行...

    计算机图形学OpenGL实验四

    实验报告

    学院(系)名称:

    姓名学号专业班级实验项目实验四:场景漫游课程名称计算机图形学课程代码实验时间实验地点批改意见成绩教师签字:实验环境(软、硬件环境)

    实验目的

    掌握透视投影与平行投影的基本原理。

    掌握OpenGL投影变换的操作方法。

    实验内容

    构建港口场景。

    交互式方式浏览港口场景各部分

    设计视点运动轨迹

    实验过程:

    #include

    float fsunangle; //绕太阳旋转的角度

    float fearthangle; //绕地球旋转的角度

    void Initial()

    {

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

    GLfloat diffuse[]= { 1.0f, 1.0f, 0.0f, 1.0f };

    GLfloat position[] = { 0.0f, 0.0f,-250.0f, 1.0f };

    glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); //指定漫反射光分量

    glLightfv(GL_LIGHT1, GL_POSITION,position); //指定光源坐标位置

    glEnable(GL_LIGHTING); //启用光照

    glEnable(GL_LIGHT1); //黄色光

    glEnable(GL_DEPTH_TEST);

    }

    void Display(void)

    {

    GLfloat position[] = { 0.0f, 0.0f, 1.0f, 2.0f };

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色和深度缓冲区

    glMatrixMode(GL_MODELVIEW); //指定当前操作模型视图矩阵堆栈

    glLoadIdentity(); //重置模型视图矩阵

    glTranslatef(0.0f,0.0f,-250.0f); //将图形沿z轴负向移动

    GLfloat mat_diffuse1[]= { 0.2f, 0.8f, 1.0f, 1.0f };

    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse1);

    GLfloat mat_emission1[]={0.98,0.25,0.12,1.0};

    glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission1);//设置太阳颜色为红色

    glutSolidSphere(30.0f,40,50); //画太阳

    glEnable (GL_LIGHTING);

    //设置材质属性

    GLfloat mat_diffuse2[]={0.8,0.8,0.8,1.0};

    glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse2);

    GLfloat mat_emission2[]={0.0,0.0,1.0,1.0};

    glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission2); //地球颜色设置为蓝色

    glPushMatrix(); //保存当前的模型视图矩阵

    glRotatef(fsunangle,0.0f,1.0f,0.0f); glTranslatef(100.f,0.0f,0.0f); //平移一段距离

    glutSolidSphere(8.0f,40,50); //画地球

    GLfloat mat_diffuse3[]= { 0.4f, 0.4f, 0.4f, 1.0f };

    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse3);

    GLfloat mat_emission3[]={0.25,0.25,0.25,1.0};

    glMa

    展开全文
  • OpenGL实验

    2012-05-24 16:02:54
    OpenGL实验报告加代码,有时钟演示,圆椎体,可以自由旋转,给新手参考,大神不要批
  • #include int SCREEN_HEIGHT = 480;//屏幕高度// 跟踪鼠标点击次数,达到3次后绘制...//点class Point {public:float x, y;void setxy(float x2, float y2) { x = x2; y = y2; }const Point & operator=(cons...

    #include int SCREEN_HEIGHT = 480;//屏幕高度

    // 跟踪鼠标点击次数,达到3次后绘制Bezier曲线

    int NUMPOINTS = 0;

    //点

    class Point {

    public:

    float x, y;

    void setxy(float x2, float y2) { x = x2; y = y2; }

    const Point & operator=(const Point &rPoint) {

    x = rPoint.x;

    y = rPoint.y;

    return *this;

    }

    };

    Point abc[3];

    void myInit() {

    glClearColor(0.0,0.0,0.0,0.0);

    glColor3f(1.0,0.0,0.0);

    glPointSize(4.0);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluOrtho2D(0.0,640.0,0.0,480.0);

    }

    void drawDot(int x, int y) {

    glBegin(GL_POINTS);

    glVertex2i(x,y);

    glEnd();

    glFlush();

    }

    void drawLine(Point p1, Point p2) {

    glBegin(GL_LINES);

    glVertex2f(p1.x, p1.y);

    glVertex2f(p2.x, p2.y);

    glEnd();

    glFlush();

    }

    // 计算下一个Bezier曲线上的点

    Point drawBezier(Point A, Point B, Point C, double t) {

    Point P;

    P.x = pow((1 - t), 2) * A.x + 2 * t * (1 -t) * B.x + pow(t, 2) * C.x;

    P.y = pow((1 - t), 2) * A.y + 2 * t * (1 -t) * B.y + pow(t, 2) * C.y;

    return P;

    }

    void myMouse(int button, int state, int x, int y) {

    //左键按下

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

    //存储鼠标点击的点

    abc[NUMPOINTS].setxy((float)x,(float)(SCREEN_HEIGHT - y));

    NUMPOINTS++;

    // 绘制红点

    drawDot(x, SCREEN_HEIGHT - y);

    // 绘制Bezier曲线

    if(NUMPOINTS == 3) {

    glColor3f(1.0,1.0,1.0);

    // 绘制控制多边形

    drawLine(abc[0], abc[1]);

    drawLine(abc[1], abc[2]);

    Point POld = abc[0];

    //绘制Bezier曲线段,控制t的增量可以控制曲线精度

    for(double t = 0.0;t <= 1.0; t += 0.1) {

    Point P = drawBezier(abc[0], abc[1], abc[2], t);

    drawLine(POld, P);

    POld = P;

    }

    glColor3f(1.0,0.0,0.0);

    NUMPOINTS = 0;

    }

    }

    }

    void myDisplay() {

    glClear(GL_COLOR_BUFFER_BIT);

    glFlush();

    }

    int main(int argc, char *argv[]) {

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

    glutInitWindowSize(640,480);

    glutInitWindowPosition(100,150);

    glutCreateWindow("Bezier Curve");

    glutMouseFunc(myMouse);

    glutDisplayFunc(myDisplay);

    myInit();

    glutMainLoop();

    return 0;

    }

    展开全文
  • opengl计算机图形学实验报告之3D漫游世界.doc北师大珠海分校信息技术学院计算机图形学实验报告实验报告文件命名方式学号姓名_实验序号_实验名称.doc姓名学号1001010092专业计算机任课教师黄静实验教师黄静评阅教师...

    opengl计算机图形学实验报告之3D漫游世界.doc

    北师大珠海分校信息技术学院计算机图形学实验报告实验报告文件命名方式学号姓名_实验序号_实验名称.doc姓名学号1001010092专业计算机任课教师黄静实验教师黄静评阅教师黄静实验地点丽泽C304-1书写日期2012.11.27实验课时间2012.11.26实验得分实验序号与名称实验10交互的3D漫游世界实验目的1 进一步掌握3D编程概念 2)主要掌握视点和目标的改变对场景生成的影响 3)掌握3D漫游场景的基本技巧实验开发环境硬件要求PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境操作系统Windows XP。语言开发工具Microsoft Visual studio 2008,Visual C。 并安装OpenGL图形函数库实验要求1.当场检查,计现场分2.实验所有步骤所生成的效果截图拷贝到实验报告文档里备查,并附上相应的代码。 WORD文档命名方式学号姓名-实验序号-实验名称。实验内容与步骤小结、主要截图、核心代码实现比例50附属程序rotating_torus.cpp为一视点保持不变的3D旋转程序,3D场景为一个圆环、一个小球和一个以四边形为基本单位的方块墙包围盒,且小球和圆环在“方块墙”的包围盒中。视点设在正前方观察物体,小球绕着环心某处不停旋转,并和圆环一起绕着环心不停旋转。添加键盘响应函数,使得 1、按键盘的”W”,”S”键,可实现视点前后移动(直走前进倒退);(此时应该视点与目标点的距离保持不变,且视线方向保持不变)2、按键盘的”A”,”D”键,可实现视点左右旋转左看右看;(此时应该视点固定,目标点围绕视点旋转,视点与目标点的距离仍然保持不变)3. 视点左右旋转一定角度后,再按键盘的”W”,”S”键仍可实现视线直走,即沿着旋转后的视线方向行走。4. 程序修改后观看效果,并用键盘验证。在实验报告中写出 前后直走 和左转右转的关键点和核心代码。向前走和后退时此时应该视点与目标点的距离保持不变,且视线方向保持不变)视点左右旋转左看右看时,此时应该视点固定,目标点围绕视点旋转,视点与目标点的距离仍然保持不变void mykeyboardunsigned char key, int x, int y重点在于视点和目标点的变化Y坐标不变化 switchkey case Wcase w 向前直走your code Hereeyexeyex-step*sinangle*PI/180.0;eyezeyez-step*cosangle*PI/180.0;atxatx-step*sinangle*PI/180.0;atzatz-step*cosangle*PI/180.0;break;case Scase s向后退your code Hereeyexeyexstep*sinangle*PI/180.0;eyezeyezstep*cosangle*PI/180.0;atxatxstep*sinangle*PI/180.0;atzatzstep*cosangle*PI/180.0;break;case Acase a左看your code Hereangle1;atxeyex-r*sinangle*PI/180.0;atzeyez-r*cosangle*PI/180.0;break;case Dcase d右看your code Hereangle-1;atxeyex-r*sinangle*PI/180.0;atzeyez-r*cosangle*PI/180.0;break; glutPostRedisplay;参数修改后调用重画函数,屏幕图形将发生改变5. 如果圆环中心要加一个不断自转的茶壶,代码如何如何实现效果截图,核心代码贴到实验报告中。 glPushMatrix;glColor3f0,0,1;glTranslatef0,0,0;glRotateftheta,1,0,0;glTranslatef0,0,0; glutWireTeapot30; 线框模式glPopMatrix;添加在void drawsphere中的最后6 修改场景,在场景既定的位置增加自己想要的3D物体,效果截图,核心代码贴到实验报告中。 void drawspherefloat tr;trouter3*inner;glRotateftheta,0,1,0;glPushMatrix;glPushMatrix;glColor3f1.0,0,0; glRotatef90,1,0,0;glutWireTorusinner,outer,30,50; glPopMatrix;glPushMatrix;glColor3f1.0,1,0; glRotatef45,1,0,0;glutWireTorusinner,outer-40,30,50; glPopMatrix;glPushMatrix;glColor3f0,1,0.5; glRotatef-45,1,0,0;glutWireTorusinner,outer-60,30,50; glPopMatrix;glPushMatrix;glColor3f1.0,0,1.0;glutWireTorusinner-20,outer-20,30,50; glPopMatrix;glPushMatrix; 小球绕outer点转,其实是xouter这条相对于Y的轴glTranslatefouter,0,0;glRotateftheta,0,1,0;glTranslatef-outer,0,0;glPushMatrix; 画小球,绕x轴转 glTranslateftr,0,0;glRotatef-45,1,0,0;glColor3f0.0,1.0,0;glutSolidIcosahedron;glPopMatrix;glPopMatrix;glPopMatrix; glPushMatrix;glColor3f0,0,1;glTranslatef0,0,0;glRotateftheta,1,0,0;glTranslatef0,0,0; glutWireTeapot30; 线框模式glPopMatrix;glPushMatrix;glColor3f0,0,1;glTranslatef0,0,0;glRotateftheta,1,0,0;glTranslatef0,0,0;glScalef10,10,10;glutWireSphereinner,20,20;glPopMatrix;四、思考题1、透视投影函数中远裁剪平面离相机的距离在本例中为何设为2*outer8*inner250 有何依据gluPerspective90,w/h,10,2*outer8*inner250;远裁剪平面离相机视点的距离为2*outer8*inner250,而souter4*inner50; 远裁剪平面到视点的距离,至少比眼睛到目标点的距离2倍大,这样才能使物体在旋转过程中都在整个窗口中显示。2 如果用鼠标移动(鼠标坐标为二维坐标)来进行左右上下拖拽整个场景(三维世界坐标),程序又如何修改如果这个场景是二维的,将z轴有关j的设定都改为y轴。3 在此基础上再实现镜头的放大缩小,俯视等,程序应该如何修改不会做实验课完成程度与表现自我评价比例20这次实验内容不是很多,内容也不是很难,很有趣,尤其是按a或d绕一个方向不停地转,到出现空白,再出现。其实还可以设置如按1键自上从下看,按2键自前向后看,按3键自右向右看。都是可以通过改变视点的值来设定。实验的体会、收获与建议(结论)比例30这次实验完成的也很快,学会了3D场景的设置,这样就可以做3D游戏了。虽然简单的做场景学会了,但是有难度的在后面。就如附加题添加一个机器人,可以随着按键向前向后走,向左向右看,我就想是不是应该添加眼睛。2D作业刚刚结束,3D大作业又来了,任务不轻呀。评阅教师特殊评语评阅教师 日 期

    展开全文
  • 通过opengl画出一个自行车,可以通过键盘控制自行车的移动;另一个实验是绘制三角形,通过键盘对三角形进行缩放、平移、旋转等操作。
  • 大学计算机专业,OpenGL实验报告,几何图形变换实验
  • 大学计算机专业,OpenGL实验报告,圆的扫描转换
  • 大学计算机专业,OpenGL实验报告,直线段的扫描转换
  • 实验报告,C++OpenGL的框架,利用C++OpenGL的框架实现射线旋转块的三维视觉效果。
  • 关于OPengl绘制点线面实验报告,完整试验程序,包扩程序运行结果。
  • 很用心的写的实验报告,包括实验详细步骤、实验过程中遇到的问题以及解决方法、含部分实验代码
  • 杭州电子科技大学《实时三维图形绘制》OpenGL大作业实验报告
  • opengl编写的3D跳跳球,可运行,附代码,附实验报告,附PPT
  • OpenGL开发环境及扫描转换算法实验报告 实验目的与要求 通过实验掌握OpenGL中编程环境的设置,了解相关函数用途及设置步骤; 通过实验掌握基本图形元素的生成,给出相关代码和运行结果; 用WINDOWS GDI函数编写...
  • C/C++基于openGl的画直线和三角形光栅化源码加实验报告 实现鼠标选点操作 完整源码 加 完整实验报告
  • 计算机图形学实验报告实验一 第一个OpenGL程序一、实验目的和要求二、实验内容(一)学习OpenGL前的准备工作:第一步,第二步,安装GLUT工具包第三步,建立一个OpenGL项目(二)第一个OpenGL程序(三)对各行语句...

    实验一 第一个OpenGL程序

    一、实验目的和要求

    1. 了解OpenGL基本原理,功能;
    2. 熟悉OpenGL的基本程序结构、编程环境(OpenGL+GLUT);
    3. 安装GLUT工具包,建立并运行一个简单的OpenGL程序;了解程序代码中各函数的作用。

    二、实验内容

    (一)学习OpenGL前的准备工作:

    第一步,

    选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual Studio 2017作为学习OpenGL的环境。

    第二步,安装GLUT工具包

    GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
    Windows环境下的GLUT下载地址:(大小约为150k)
    http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
    无法从以上地址下载的话请使用下面的连接:
    http://upload.programfan.com/upfile/200607311626279.zip
    Windows环境下安装GLUT的步骤:
    1、打开文件夹“GLUT工具包”,得到5个文件glut.dll, glut32.dll, glut.lib, glut32.lib, glut.h。
    2、找到安装目录…\VC\Tools…\include\gl (没有的话就建立一个)。 将glut.h放到里面。
    3、找到安装目录…\VC\Tools…\lib\x86,将glut.lib,glut32.lib放到里面。
    4、最后把glut.dll和glut32.dll放到C:\Windows\system32文件夹内(32位系统)或‪C:\Windows\SysWOW64(64位系统)。‬‬‬‬‬‬‬‬‬‬‬‬
    第二种安装方法:‬使用VS的插件
    打开vs创建一个C++项目(Win32控制台-空白项目)
    然后点击 项目—管理Nuget程序包
    然后点击浏览—在搜索栏输入NupenGL
    然后安装(如果有两个就安装两个)

    第三步,建立一个OpenGL项目

    新建—项目—Visual C++ Windows控制台应用程序

    (二)第一个OpenGL程序

    #include <GL/glut.h>
    void myDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
        glFlush();
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(100, 100);
        glutInitWindowSize(400, 400);
        glutCreateWindow("第一个OpenGL程序");
        glutDisplayFunc(&myDisplay);
        glutMainLoop();
        return 0;
    }
    

    该程序的作用是在一个黑色的窗口中央画一个白色的矩形。

    (三)对各行语句进行说明

    首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。
    本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。
    注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
    1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。
    2、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
    3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
    4、glutInitWindowSize,这个也简单,设置窗口的大小。
    5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
    6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
    7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)
    在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
    1、glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
    2、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
    3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。

    三、实验结果

    在这里插入图片描述

    感谢:HUE

    展开全文
  • OpenGL实验一 OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制...
  • OpenGL实验八犹他茶壶光照、阴影、纹理,光照效果源码、阴影效果源码、纹理效果源码,及实验截图、实验报告
  • } · 网格间距分别为0.1f和0.01f的抛物线的光栅化: 实验中遇到的问题: ①画圆时opengl库不全,无法调用pixiel相关函数; ②画抛物线时paracurve_midpoint_bresenham算法中的if (y )函数在if (d_pre >= 0) else前...
  • 图形学实验参考 林楠 2001-6 说明:以下按每次作业的内容和要求给出设计和实现方面的提示、建议和参考,完成作业时只要完成要求,不必完全按照下述内容来实现。 1. 第2次作业 1.1. 选择合适的数据结构来表示三维物体...
  • 中点线,圆,椭圆】(OpenGL)├── 图形学实验│ ├── Bresenham直线.cpp│ ├── Bresenham直线.dsp│ ├── Bresenham直线.dsw│ ├── Bresenham直线.ncb│ ├── Bresenham直线.opt│ ├...
  • OpenGL入门实验

    2010-12-08 21:22:40
    本周做了很多的实验,其中关于OpenGL的实验还是比较有意思的,最近也是很忙,没时间细细品味了,实验报告贴这里供大家参考(实验要求和目的以及内容都是我原创的哦~~哈哈!) 实验一:实现折线和矩形的橡皮筋 一...
  • 关于大四上学期的计算机图形学实验报告123——opengl建模、载入OBJ文件、纹理贴图、光照、交互。 实验123详细代码文件见: 计算机图形学实验123对应代码详见: 个人github ...
  • 文档介绍:《计算机图形学课内实验》实验报告班级:计算机22班 姓名:顾佳烽学号:2120505034日期:2014.11.08一、实验目的及要求了解OpenGL图形软件包绘制图形的基本过程及其程序框架,并在已有的程序框架中添加代码实现...
  • 计算机图形学实验报告姓名:___ __________学号:_____ ________班级:______ _______时间:_____2016年12月_________实验一 OpenGL编程与图形绘制实验目的了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本...
  • 石河子大学计算机图形学相关实验源代码,OpenGL C++源码,并附实验报告,能帮助对于图形学不太感兴趣想要快速完成作业,或是想要认真学习但是不能入门需要源码知道的同学。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,593
精华内容 637
关键字:

opengl实验报告