【图形学】实验一 OpenGL基本绘制
实验一 OpenGL基本绘制
实验内容
在Windows系统下完成OpenGL的环境配置,编译并成功运行你的OpenGL程序。在其中使用现代OpenGL中的着色器,绘制多个简单的二维图形,参考下图所示:
具体内容包括:
1. OpenGL的环境配置
参考上机实验1.1的内容,完成Visual Studio 集成开发环境的安装,GLUT库与GLEW库的编译与配置,工程项目的搭建。
我用的是
Clion
,配置的CMakeLists.txt
# cmake version
cmake_minimum_required(VERSION 3.1)
# c++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# vcpkg
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "")
endif()
if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
endif()
# project
project(main)
# target
aux_source_directory("./" PROJECT_SOURCES)
add_executable(main ${PROJECT_SOURCES})
target_include_directories(main PRIVATE include)
if(APPLE)
# dependency
include_directories(/System/Library/Frameworks)
find_library(OpenGL_LIBRARY OpenGL)
find_library(GLUT_LIBRARY GLUT)
set(LIBS ${OpenGL_LIBRARY} ${GLUT_LIBRARY})
# link
target_link_libraries(main ${LIBS})
else()
# dependency
find_package(GLEW REQUIRED)
find_package(GLUT REQUIRED)
# link
target_link_libraries(main PRIVATE GLUT::GLUT)
target_link_libraries(main PRIVATE GLEW::GLEW)
endif(APPLE)
2. 绘制二维图形
参考实验1.2的内容,在此基础上,以参数化的方式绘制出不同的形状(正方形,三角形,圆形,椭圆),并与参考中图形的位置和大小有所区别。
实验步骤
在实验1.2中,修改三角形的方向:
源代码为:
vec2(cos(currentAngle), sin(currentAngle)) * scale + center
修改为:
vec2(sin(currentAngle), cos(currentAngle)) * scale + center;
如下图:
将单个空白的正方形改为多个黑白交替的正方形的组合:
-
修改窗口上方的标题名称:
glutCreateWindow("学号_姓名_实验一");
-
理解如何生成获取圆形/椭圆的点
-
理解生成圆形/椭圆的函数
首先,解读generateEllipsePoints() 函数我们可以发现,当 verticalScale = 1.0时,我们可以构造圆形,当verticalScale 不等于1.0时,则可以绘制出椭圆。
-
绘制圆形:
首先,调用generateEllipsePoints() 函数生成圆形的点的坐标和颜色;
随后在display函数中绘制圆形:
可以看到效果如下:
-
绘制椭圆:
类似的,设置verticalScale = 0.5,我们先在init()函数中创建椭圆的100个点的坐标:
然后在display()函数中绘制:
结果如下:
-
修改颜色:
嵌套的正方形修改为蓝白相间:
修改圆形的渐变色:
修改椭圆的颜色:
最终结果如下:
实验结果:
如下图所示,左图为增加了圆形和椭圆后的结果;右图为修改了颜色的结果。
程序运行后输出结果如下:(这部分信息的输出代码使用了自己添加的,使用了之前的代码)