Back to openGL!
#include <iostream>
#include <windows.h>
#include <gl/glut.h>
#include <math.h>
#include <gl/gl.h>
/* back to openGL 2016/9/19 magic */
//thanks to: http://blog.csdn.net/bill_ming/article/details/7662809
using namespace std; #define pi 3.1415926
#define GLUT_WHEEL_UP 3 //定义滚轮操作
#define GLUT_WHEEL_DOWN 4 int mx,my;
int ry=;int rx=; //turnning angle around X/Y axis following right-hand rule
int i=;
GLdouble a=0.2; //size of teapot
bool mouseisdown=false;
bool loopr=false; void timer(int p)
{
ry-=;
glutPostRedisplay(); //marks the current window as needing to be redisplayed.
if (loopr)
glutTimerFunc(,timer,);
} void motion(int x, int y)
{
if(mouseisdown==true)
{
// cout<<mx<<" "<<my<<" "<<i<<endl;
ry+=x-mx;
rx+=y-my;
mx=x;my=y;
glutPostRedisplay();
}
} void mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON)
{
// cout<<"left click!"<<endl;
mx=x;my=y; //Initialize mx my 9/20 if(state == GLUT_DOWN)
{ mouseisdown=true; loopr=false;}
else
mouseisdown=false;
}
if (button== GLUT_RIGHT_BUTTON)
if(state == GLUT_DOWN)
{loopr=true; glutTimerFunc(,timer,);}
if (button== GLUT_MIDDLE_BUTTON)
{
// cout<<"wheel"<<endl;
if(state == GLUT_DOWN){
a+=0.1;
glutPostRedisplay();
}
}
} void special(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
ry-=;
glutPostRedisplay();
break; case GLUT_KEY_RIGHT:
ry+=;
glutPostRedisplay();
break; case GLUT_KEY_UP:
rx+=;
glutPostRedisplay();
break; case GLUT_KEY_DOWN:
rx-=;
glutPostRedisplay();
break; }
} void special_1(unsigned char key, int x, int y){ switch(key){
case 'a':
a+=0.1;
glutPostRedisplay();
break;
case 'z':
a-=0.1;
glutPostRedisplay();
break;
}
} void display0(void)
{
float red[]={,,};
float blue[]={,,};
float green[]={,,};
float yellow[]={,,}; glClearColor(,,,);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glRotatef(ry,,,);
glRotatef(rx,,,);
glColor3fv(green); glutWireTeapot(a); glFlush();
} int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE| GLUT_RGBA);
glutInitWindowSize (, );
glutInitWindowPosition(,);
glutCreateWindow ("A TEAPOT"); //window initializing glutDisplayFunc (display0);
glutMouseFunc(mouse); //message processing function
glutMotionFunc(motion);
glutSpecialFunc(special);
glutKeyboardFunc(special_1);
glutMainLoop(); return ;
}
back to openGL
这是一个初级的openGL编程例子,实现了程序对键鼠操作消息的处理:
1.鼠标拖拽使模型跟随光标旋转;
2.按'A'或双击鼠标中键放大,按'Z'缩小;
3.单击鼠标右键使模型旋转;
4.方向键(上下左右)使模型旋转
Back to openGL!的更多相关文章
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- [OpenGL超级宝典]专栏前言
我小时候的梦想呢,是做宇航员或者科学家或者是做一款属于自己的游戏,后来前面两个梦想都没有实现,于是我就来实现我的第三个梦想了,,,我呢,也算是零基础,因为我的专业是物联网工程,这个专业覆盖面之广,简直 ...
- OpenGL超级宝典笔记----渲染管线
在OpenGL中任何事物都在3D空间中,但是屏幕和窗口是一个2D像素阵列,所以OpenGL的大部分工作都是关于如何把3D坐标转变为适应你屏幕的2D像素.3D坐标转为2D坐标的处理过程是由OpenGL的 ...
- OpenGL超级宝典笔记----框架搭建
自从工作后,总是或多或少的会接触到客户端3d图形渲染,正好自己对于3d图形的渲染也很感兴趣,所以最近打算从学习OpenGL的图形API出发,进而了解3d图形的渲染技术.到网上查了一些资料,OpenGL ...
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- OpenGL: 纹理采样 texture sample
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...
- OpenGL ES 3.0: 图元重启(Primitive restart)
[TOC] 背景概述 在OpenGL绘制图形时,可能需要绘制多个并不相连的图形.这样的情况下这几个图形没法被当做一个图形来处理.也就需要多次调用 DrawArrays 或 DrawElements. ...
- opengl 笔记(2)
/*- * Opengl Demo Test * * Fredric : 2016-7-10 */ #include <GLUT/GLUT.h> #include <stdlib.h ...
- opengl 笔记(1)
参考<opengl入门教程>.<OpenGL之坐标转换>.<OpenGL绘制管线操作细节>等资料. 复习下留个备忘:) /*- * Opengl Demo Test ...
随机推荐
- RHEL 6.0服务器安装Oracle 11G R2 最终版
RHEL6安装Oracle 11g R2最终版 结合网上教程 服务器实战所得 1.使用DVD做yum源新建dvd挂载目录[root@fxq-dp ~]# mkdir /media/iso进入到DVD挂 ...
- 解决VS2015安装Android SDK 后文件不全及更新问题
近日安装VS2015专业版后.想进行Android开发,就新建了一个Blank app 结果报[值不能为空 null 参数名:path1] 1:首先检查工具 xamarin 工具那设置的SDK路径对不 ...
- SQL SERVER 2008
sql server 2008 r2 下载安装教程 sql server 2008 是微软公司开发的一套数据库管理系统.是目前大型数据库中常用数据库之一.性能稳定,功能强大,是面向中大型企业的一款数据 ...
- css属性的书写
书写顺序: 注释方式: /* 块状注释文字 * 块状注释文字 * 块状注释文字 */ .m-list{width:500px;} .m-list li{height:20px;line-height: ...
- NoSQL生态系统——一致性RWN协议,向量时钟,gossip协议监测故障
13.5 一致性 在NoSQL中,通常有两个层次的一致性:第一种是强一致性,既集群中的所有机器状态同步保持一致.第二种是最终一致性,既可以允许短暂的数据不一致,但数据最终会保持一致.我们先来讲一下,在 ...
- 通过pip安装模块
环境:ubuntu,python2/3 命令: pip3 install ipy # 通过pip3给python3.x安装ipypip3 install --upgrade pip # 升级pippi ...
- CALayer 4 详解 -----转自李明杰
CALayer4-自定义层 本文目录 一.自定义层的方法1 二.自定义层的方法2 三.其他 自定义层,其实就是在层上绘图,一共有2种方法,下面详细介绍一下. 回到顶部 一.自定义层的方法1 方法描 ...
- hdoj 5139Formula
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5139 展开后的:1!*2!*3!*..*n! 后面就好办了- -
- Android中的Context
Context用来访问全局信息的接口,比如影城程序的资源.一些常用的组件都是继承自Context,目的就是方便的访问资源,比如Activity, Service.... 从Context访问本组件的资 ...
- Java如何解决脆弱基类(基类被冻结)问题
概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用 ...