您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 南邮计算机图形学实验报告一绘制立方体
《计算机图形学程序设计》题目:绘制立方体学生姓名班级学号学生学院学生专业联系电话电子邮件指导教师黄睿指导单位计算机学院日期成绩批阅人日期1一、课题名称使用OpenGL3.3以上的版本绘制一个立方体。二、课题内容和要求内容:初步学习计算机图形学的基础知识,初步学会使用OpenGL,学会编写顶点着色器和片段着色器以及编译和链接,熟悉在三维空间下绘制图形的流程。要求:使用OpenGL3.3以上的版本绘制图形。三、课题分析本课题要求绘制一个立方体,本人绘制了一个不同的面呈现红、绿、蓝三色的正方体,绘制的步骤如下。首先,在主函数开始前,以字符串的形式编写顶点着色器和片段着色器的代码。其次,在主函数中,设置OpenGL的版本号为3.3,创建一个窗口对象,获取实际像素,并将该窗口对象设置为当前窗口,调用glViewport函数来设置窗口的维度,调用glEnable(GL_DEPTH_TEST)函数开启深度测试。接着,调用glShaderSource函数获取编写的两个着色器的代码,调用glCompileShader函数编译两个着色器,并调用glGetShaderiv函数检验是否成功编译,两个着色器编译完毕后调用glAttachShader函数和glLinkProgram函数实现链接,同时也要检验是否连接成功,最后把这两个着色器对象删除。然后,定义顶点数组和颜色数组(本人将其放在一个数组中),创建并绑定VAO和VBO,调用glBufferData函数,把定义的数组中的数据复制到缓冲的内存中,调用glVertexAttribPointer函数设置顶点属性指针和颜色属性指针。最后,在while循环中,设置模型矩阵Model、观察矩阵View和投影矩阵Projection,调用glDrawArrays函数画12个三角形。四、详细设计1、流程图2图1OpenGL绘制立方体流程图2、详细代码3#includeiostream#defineGLEW_STATIC#includeGL/glew.h#includeGLFW/glfw3.h#includeglm/glm.hpp#includeglm/gtc/matrix_transform.hpp#includeglm/gtc/type_ptr.hpp#defineSTB_IMAGE_IMPLEMENTATION#includestb_image.husingnamespaceglm;voidframebuffer_size_callback(GLFWwindow*window,intwidth,intheight){//makesuretheviewportmatchesthenewwindowdimensions;notethatwidthand//heightwillbesignificantlylargerthanspecifiedonretinadisplays.glViewport(0,0,width,height);}voidprocessInput(GLFWwindow*window){if(glfwGetKey(window,GLFW_KEY_ESCAPE)==GLFW_PRESS)glfwSetWindowShouldClose(window,true);}constGLintWIDTH=800,HEIGHT=600;//顶点着色器代码constGLchar*vertexShaderSource=#version330core\nlayout(location=0)invec3position;\nlayout(location=1)invec3color;\noutvec3Color;\nuniformmat4MVP;\nvoidmain(){gl_Position=MVP*vec4(position,1.0f);\nColor=color;};//片段着色器代码constGLchar*fragmentShaderSource=#version330core\noutvec4FragmentColor;\ninvec3Color;\n//uniformsampler2Dtexture1;\nvoidmain(){4FragmentColor=vec4(Color,1.0f);\n};intmain(){glfwInit();//设置版本glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);glfwWindowHint(GLFW_RESIZABLE,GL_FALSE);//创建一个窗口对象GLFWwindow*window=glfwCreateWindow(WIDTH,HEIGHT,openglTest1,nullptr,nullptr);if(window==nullptr){std::coutFailedtocreateGLFWwindowstd::endl;glfwTerminate();return-1;}//获取实际像素intscreenWidth,screenHeight;glfwGetFramebufferSize(window,&screenWidth,&screenHeight);//设为当前glfwMakeContextCurrent(window);glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);//InitializeGLEWglewExperimental=GL_TRUE;if(glewInit()!=GLEW_OK){std::coutFailedtoinitializeGLEWstd::endl;return-1;}//调用glViewport函数来设置窗口的维度glViewport(0,0,screenWidth,screenHeight);//开启深度测试glEnable(GL_DEPTH_TEST);//编译连接两个着色器GLintsuccess;5GLcharinfoLog[512];GLuintvertexShader=glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader,1,&vertexShaderSource,nullptr);glCompileShader(vertexShader);glGetShaderiv(vertexShader,GL_COMPILE_STATUS,&success);if(!success){glGetShaderInfoLog(vertexShader,512,nullptr,infoLog);std::cerrERROR::SHADER::VERTEX::COMPILATION_FAILED\ninfoLogstd::endl;}GLuintfragmentShader=glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader,1,&fragmentShaderSource,nullptr);glCompileShader(fragmentShader);glGetShaderiv(fragmentShader,GL_COMPILE_STATUS,&success);if(!success){glGetShaderInfoLog(fragmentShader,512,nullptr,infoLog);std::cerrERROR::SHADER::FRAGMENT::COMPILATION_FAILED\ninfoLogstd::endl;}GLuintshaderProgram=glCreateProgram();glAttachShader(shaderProgram,vertexShader);glAttachShader(shaderProgram,fragmentShader);glLinkProgram(shaderProgram);glGetProgramiv(shaderProgram,GL_LINK_STATUS,&success);if(!success){glGetProgramInfoLog(fragmentShader,512,nullptr,infoLog);std::cerrERROR::SHADER::PROGRAM::LINKING_FAILED\ninfoLogstd::endl;}glDetachShader(shaderProgram,vertexShader);glDetachShader(shaderProgram,fragmentShader);glDeleteShader(vertexShader);glDeleteShader(fragmentShader);//定义一个数组存储顶点信息和颜色信息floatvertices[]={-0.5f,-0.5f,-0.5f,0.0f,1.0f,0.0f,0.5f,-0.5f,-0.5f,0.0f,1.0f,0.0f,60.5f,0.5f,-0.5f,0.0f,1.0f,0.0f,0.5f,0.5f,-0.5f,0.0f,1.0f,0.0f,-0.5f,0.5f,-0.5f,0.0f,1.0f,0.0f,-0.5f,-0.5f,-0.5f,0.0f,1.0f,0.0f,-0.5f,-0.5f,0.5f,0.0f,1.0f,0.0f,0.5f,-0.5f,0.5f,0.0f,1.0f,0.0f,0.5f,0.5f,0.5f,0.0f,1.0f,0.0f,0.5f,0.5f,0.5f,0.0f,1.0f,0.0f,-0.5f,0.5f,0.5f,0.0f,1.0f,0.0f,-0.5f,-0.5f,0.5f,0.0f,1.0f,0.0f,-0.5f,0.5f,0.5f,1.0f,0.0f,0.0f,-0.5f,0.5f,-0.5f,1.0f,0.0f,0.0f,-0.5f,-0.5f,-0.5f,1.0f,0.0f,0.0f,-0.5f,-0.5f,-0.5f,1.0f,0.0f,0.0f,-0.5f,-0.5f,0.5f,1.0f,0.0f,0.0f,-0.5f,0.5f,0.5f,1.0f,0.0f,0.0f,0.5f,0.5f,0.5f,1.0f,0.0f,0.0f,0.5f,0.5f,-0.5f,1.0f,0.0f,0.0f,0.5f,-0.5f,-0.5f,1.0f,0.0f,0.0f,0.5f,-0.5f,-0.5f,1.0f,0.0f,0.0f,0.5f,-0.5f,0.5f,1.0f,0.0f,0.0f,0.5f,0.5f,0.5f,1.0f,0.0f,0.0f,-0.5f,-0.5f,-0.5f,0.0f,0.0f,1.0f,0.5f,-0.5f,-0.5f,0.0f,0.0f,1.0f,0.5f,-0.5f,0.5f,0.0f,0.0f,1.0f,0.5f,-0.5f,0.5f,0.0f,0.0f,1.0f,-0.5f,-0.5f,0.5f,0.0f,0.0f,1.0f,-0.5f,-0.5f,-0.5f,0.0f,0.0f,1.0f,-0.5f,0.5f,-0.5f,0.0f,0.0f,1.0f,0.5f,0.5f,-0.5f,0.0f,0.0f,1.0f,0.5f,0.5f,0.5f,0.0f,0.0f,1.0f,0.5f,0.5f,0.5f,0.0
本文标题:南邮计算机图形学实验报告一绘制立方体
链接地址:https://www.777doc.com/doc-2955337 .html