[OpenGL]图形学课程设计:二维卡通人脸交互设计与控制

实验名称:二维卡通人脸交互设计与控制

实验要求:

  1. 根据OpenGL提供的直线,多边形绘制算法,实现基于鼠标交互的卡通人物设计与绘制。
  2. 使用颜色填充与反走样技术对人脸进行绘制。
  3. 实现对卡通人脸的交互控制,点击鼠标左键可以对人脸进行拖拽移动。
  4. 按“↑”按键能够实现卡通人脸绕坐标原点进行旋转。
  5. 附加要求:选中其中的一个多边形区域,点击鼠标右键,弹出一个菜单,可以对该区域进行不同颜色的选择。

实验步骤:左击选择对象,右击染色。按住向上箭头逆时针旋转,按住向下箭头顺时针旋转。


实验截图:


实验源码:


#include <Windows.h>
#include <gl\glut.h>
#include <stdio.h>  
#include<math.h>


#define PI 3.14
#define SIZE 512  

#define FACE 1
#define NOSE 2
#define MOUTH 3
#define HAIR 4
#define BROW 5
#define EYES 6

static int FACE_COLOR = 7;
static int NOSE_COLOR = 6;
static int MOUTH_COLOR = 1;
static int HAIR_COLOR = 4;
static int BROW_COLOR = 5;
static int EYES_COLOR = 0;

static GLfloat theta = 0;  
static GLfloat t_x = 0;
static GLfloat t_y = 0;

int select_part = 0;

static int o_x = 0;
static int o_y = 0;

#define WIN_WIDTH 500
#define WIN_HEIGHT 500
#define VIEW_WIDTH 2.2
#define VIEW_HEIGHT 2.2

static GLfloat colors[8][3] = { 
	{ 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 },  { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, 
	{ 0.0, 1.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 0.0 }, { 1.0, 1.0, 1.0 } };  


//画眼睛
void drawEyes(){
	glBegin(GL_POLYGON); 
	glVertex2f( -0.27, 0.12);
	glVertex2f( -0.27, 0.18);
	glVertex2f( -0.33,
  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个使用Visual Studio编写的OpenGL图形学设计示例,该示例使用OpenGL库和GLEW库: ```c++ #include <GL/glew.h> #include <GL/glut.h> // 回调函数,用于绘制图形 void display() { // 清空颜色缓冲区 glClear(GL_COLOR_BUFFER_BIT); // 绘制一个三角形 glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0.0f, 0.5f, 0.0f); glEnd(); // 刷新窗口 glutSwapBuffers(); } // 初始化函数,用于初始化OpenGL环境 void init() { // 设置清空颜色 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 启用深度测试 glEnable(GL_DEPTH_TEST); // 初始化GLEW库 GLenum err = glewInit(); if (GLEW_OK != err) { // 初始化失败 fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); } fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION)); } int main(int argc, char *argv[]) { // 初始化GLUT库 glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(640, 480); glutCreateWindow("OpenGL Demo"); // 注册回调函数 glutDisplayFunc(display); glutIdleFunc(display); // 初始化OpenGL环境 init(); // 进入主循环 glutMainLoop(); return 0; } ``` 这个程序会创建一个窗口,并在窗口中绘制一个彩色的三角形。程序使用了GLUT库来创建窗口,并使用了OpenGL库和GLEW库来绘制图形。在display函数中,首先使用glClear函数清空颜色缓冲区,然后使用glBegin和glEnd函数来绘制三角形。程序还启用了深度测试,以保证绘制的图形正确显示在屏幕上。在init函数中,使用glClearColor函数设置了清空颜色,并使用glewInit函数初始化GLEW库。主函数中,使用glutInit函数初始化GLUT库,并注册回调函数和初始化OpenGL环境。最后,程序进入主循环,等待用户操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值