【图形学】实验一 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()函数中绘制:

结果如下:

  • 修改颜色:

嵌套的正方形修改为蓝白相间:

修改圆形的渐变色:

修改椭圆的颜色:

最终结果如下:

实验结果:

如下图所示,左图为增加了圆形和椭圆后的结果;右图为修改了颜色的结果。

程序运行后输出结果如下:(这部分信息的输出代码使用了自己添加的,使用了之前的代码)