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 ...
随机推荐
- JS添加父节点的方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript 实现页面加载完再显示页面
document.onreadystatechange = function () { if (document.readyState == "complete") { docum ...
- NAND flash sub-pages
http://www.linux-mtd.infradead.org/doc/ubi.html#L_subpage NAND flash sub-pages As it is said here, a ...
- ecshop后台新功能及权限的添加
1.在后台"推荐管理"里添加"推荐人分成"."会员分成"两个操作功能以及权限 index.php?act=menu incluedes/in ...
- C# 自动生成代码API文档
暂时没学会正规的转载style临时记录一下 NET中的规范标准注释(一) -- XML注释标签讲解 http://www.cnblogs.com/mq0036/p/3544264.html NET中的 ...
- C++调用约定和名字约定
C++调用约定和名字约定 转自http://www.cppblog.com/mzty/archive/2007/04/20/22349.html 调用约定:__cdecl __fastcall与 __ ...
- [CentOS Server] Bug when calling matlab in bash
尝试了好几遍,仍然不能用简写命令调用matlab,这里把过程记录如下. (1). 登录 server [She@She ~]$ ssh shecl@xx.xx.xx.xx Last :: from x ...
- sql 多级内查询
最近在开发一个外包的项目,其中有个需求,一直困扰我好几天,今天终于找到了解决方案.大致需求如下:公司总部发货给经销商,其中经销商包含四种级别,钻石.金牌.银牌和铜牌,等级依次下发,钻石包含金牌,金牌包 ...
- ubuntu 下安装mysql,以及配置远程登录
安装MysQL 在Ubuntu14.04下安装MySQL比较简单,只需下面这条命令就行了: 1.输入 sudo apt-get install mysql-server 2.继续执行后,需要设定MyS ...
- Android中的颜色设置
1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...