图形学实验1-绘制人脸

使用OpenGL,通过直线和多边形绘制算法,创建了一个可以鼠标交互的卡通人脸模型。该模型支持颜色填充、反走样技术,并允许用户通过鼠标左键拖拽移动人脸。同时,按下上箭头键能实现人脸绕原点旋转。此外,选择一个多边形区域,点击鼠标右键可弹出菜单,为选定区域更换不同颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#include <GL/glut.h>  
#include <stdlib.h> 
#include <stdio.h>
#include<iostream>  
#include<fstream>  
#include <iostream>  
#include <string>
#include<math.h>
using namespace std;  


float xc;//鼠标左键按下时的x坐标
float yc;//鼠标左键按下时的y坐标
float dx;//移动距离
float dy;
float hair[7][2]={
  
  {12,43},{-12,40},{-30,20},{-6,32},{4,25},{15,37},{30,32}};
float leftbrow[4][2]={
  
  {-15,20},{-11,24},{-4,25},{0,22}};
float rightbrow[4][2]={
  
  {7,22},{12,26},{17,27},{22,22}};
float face[5][2]={
  
  {-22,24},{-18,-9},{2,-23},{22,-5},{27,33}};
float eyes[2][2]={
  
  {-6,19},{14,20}};
float nose[3][2]={
  
  {4,19},{-8,-1},{8,-1}};
float mouth[4][2]={
  
  {-14,-7},{17,-4},{10,-11},{-1,-13}};


float box_hair[4]={-30,30,20,43};//包围盒,分别为Xmin,Xmax,Ymin,Ymax
float box_nose[4]={-8,8,-1,19};
float box_mouth[4]={-14,17,-13,-4};
bool moving = false;         //是否处于移动人脸的状态
bool change_color=false;
int color[6]={1,2,3,4,5,6};//hair,nose,mouth,face,brow,eye


int in_polygon;
float  theta=0;
GLfloat colors[7][3] = { {1.0, 1.0, 1.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值