OpenGL仿作橡皮筋技术
算是精仿吧,毕竟不一样,少了第二次点鼠标左键确认绘图,这个可以加上的:
#include <iostream>
#include <windows.h>
#include <GL/glut.h>using namespace std ;
#pragma comment(lib, "glut32.lib")
int flag =0;
int flagagain=0;
POINT start,down;
void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0) ;glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0) ;
}void display(void)
{glClear(GL_COLOR_BUFFER_BIT) ;if(flag){glColor3f(1.0, 1.0, 1.0) ;glBegin(GL_LINES);GLfloat oldx = start.x*1.00/400;GLfloat oldy = start.y*1.00/400;GLfloat newx = down.x*1.00/400;GLfloat newy = down.y*1.00/400;glVertex2f(oldx,oldy);glVertex2f(newx,newy);glutSwapBuffers(); }glEnd() ;glFlush() ;
}
void motion(int x, int y)
{if(!flag){start.x = x;start.y = 400-y;}down.x = x;down.y = 400-y;
}
void mouse(int button, int state, int x, int y)
{ if (button == GLUT_LEFT_BUTTON) { if (state == GLUT_DOWN) { glutMotionFunc(motion);//获得startflag=1;} }
}
int main(int argc, char **argv)
{glutInit(&argc, argv) ;glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400, 400) ;glutCreateWindow("I love OpenGl") ;init() ;glutDisplayFunc(display) ;glutMouseFunc(mouse);glutPassiveMotionFunc(motion);glutIdleFunc(display); glutMainLoop(); return 0 ;
}
//喏 空心圆
#include <iostream>
#include <windows.h>
#include <GL/glut.h>
#include<math.h>
using namespace std ;
#define pi 3.1415926535843721
#pragma comment(lib, "glut32.lib")
int flag =0;
int flagagain=0;
int n;
POINT start,down;
float GetLength(POINT start,POINT down)
{return sqrt((start.x*1.00/400-down.x*1.00/400)*(start.x*1.00/400-down.x*1.00/400)+(start.y*1.00/400-down.y*1.00/400)*(start.y*1.00/400-down.y*1.00/400));
}
void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0) ;glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0) ;
}
void display(void)
{glClear(GL_COLOR_BUFFER_BIT) ;if(flag){glColor3f(1.0, 1.0, 1.0) ;glBegin(GL_LINES);GLfloat oldx = start.x*1.00/400;GLfloat oldy = start.y*1.00/400;GLfloat newx = down.x*1.00/400;GLfloat newy = down.y*1.00/400;glVertex2f(oldx,oldy);glVertex2f(newx,newy);glEnd();glBegin(GL_LINE_STRIP); glColor3f(1.0, 1.0, 1.0) ;n = 100;float R = GetLength(start,down);//半径cout<<R<<endl;//输出半径for (int i = 0; i < n; i++){glVertex2f(R*sin(2 * pi / n*i)+oldx, R*cos(2 * pi / n*i)+oldy);//平移到 以原来鼠标 左 键 为原点}glEnd();glutSwapBuffers(); }glEnd() ;glFlush() ;
}
void motion(int x, int y)
{if(!flag){start.x = x;start.y = 400-y;}down.x = x;down.y = 400-y;
}
void mouse(int button, int state, int x, int y)
{ if (button == GLUT_LEFT_BUTTON) { if (state == GLUT_DOWN) { glutMotionFunc(motion);//获得startflag=1;} }
}
int main(int argc, char **argv)
{glutInit(&argc, argv) ;glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400, 400) ;glutCreateWindow("I love OpenGl") ;init() ;glutDisplayFunc(display) ;glutMouseFunc(mouse);glutPassiveMotionFunc(motion);glutIdleFunc(display); glutMainLoop(); return 0 ;
}
OpenGL仿作橡皮筋技术相关推荐
- OpenGL利用橡皮筋技术绘制简单图形(直线、圆、矩形、三角形)
总结出以下经验: 想清空屏幕时,要用双缓冲模式,因为单缓冲模式清空时没反应,只会在下一次绘制时清空原来的图形.双缓冲模式可以立即清空屏幕. glutMotionFunc() 函数和 glutPassi ...
- OpenGL程序之用鼠标实现橡皮筋技术
OpenGL程序之用鼠标实现橡皮筋技术 前言 一.用鼠标实现橡皮筋技术的实现思路 如何感知鼠标的点击和移动 如何解决坐标对应的问题并使之显示在界面上 整体的逻辑 二.用鼠标实现橡皮筋技术的实现框架 1 ...
- OpenGL 橡皮筋技术
后天图形学考试,整理了下实验课上的OpenGL关于橡皮筋实验的代码. 简单实现了如下功能: 1.右键菜单功能响应 2.右键选择画折线或矩形,可保存(书上例子演变) 3.可选取画线或画矩形的颜色,线宽, ...
- OpenGL利用鼠标、键盘分别实现那些绘图软件中的橡皮筋技术
橡皮筋技术: 如果大家用绘图软件画过直线,你就会发现选中那些直线.椭圆.矩形画图工具后,在画布上单击拖动就能画出我们所需尺寸的对应图形,十分方便,这就是所谓的橡皮筋技术. 实现橡皮筋技术的关键函数: ...
- 【计算机图形学】OpenGL橡皮筋技术
文章目录 鼠标响应函数 鼠标橡皮筋技术 MousePlot MoseMove 双缓存技术 交互设备的输入主要由GLUT库实现 鼠标响应函数 鼠标橡皮筋技术 技术关键:控制图形随着鼠标移动不断变化(擦除 ...
- C#结合GDI+实现橡皮筋技术
橡皮筋技术问题描述: 画线时: 在我放开鼠标左键确定之前会有一条虚线显示将来要 "画 "的那条线的情况.此时随着鼠标自由移动,虚线也跟着变长变短.就好像在拉橡皮筋. 当放开左键后. ...
- VC++ MFC橡皮筋技术
在MFC下绘制直线,使用橡皮筋技术,可以使直线效果跟随鼠标移动 //OnLButtionDown m_ptOrigin = m_ptEnd = point; //OnMouseMove ...
- 橡皮筋技术画移动直线
void CPicOneDlg::MoveLine(CPoint pt) {CDC *pDc = GetDC();pDc->SelectStockObject(NULL_BRUSH);CPen ...
- canvas之橡皮筋技术
目录 一.使用橡皮筋技术绘制线段 二.使用橡皮筋技术绘制圆 三.使用橡皮筋技术绘制多边形 橡皮筋的特点是可以拉长与缩短,那么如何在canvas的绘图当中模仿这一特点呢?就是如何产生以下的这种类似橡皮筋 ...
最新文章
- portal认证 php,配置外置Portal认证示例(命令行)
- 一个android记事本的学习过程记录! (一)
- Linux内核网络数据包发送(一)
- mysql触发器和存储过程_MySql的存储过程和触发器
- jboss调jvm参数_在同一台机器上启动多个JBoss A-MQ JVM
- 从一个点云里面创建一个深度图
- I/O(输入/输出)---序列化与反序列化
- IIS服务器多站点 的 https证书使用443端口 解决方案
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
- python中斜杠_Python中的正斜杠/与反斜杠\
- html表单导入图片,from 表单上传图片
- Android Espresso(一)——环境建立
- 利用Java的JavaMail发送邮件:企业邮箱版和个人邮箱客端版
- 集成Euraka的SpringBoot工程禁止输出日志:ConfigClusterResolver : Resolving eureka endpoints via configuration的方法
- 算法提高 盾神与积木游戏
- tortoisegit push 时提示 git did not exit cleanly (exit code 1)
- cacti 监控mysql 无数据_cacti无图无数据等常见问题排查
- maven上传Jar包到私服及从私服下载jar包相关配置
- Redis geo计算距离
- CF、MF、FM、FFM浅析