openGL漫游功能简单实现
最近弄openGL漫游功能的时候,在网上找了好多源码都没有达到预期效果,然后就自己写了一个算法分享一下。
上下键实现位移,左右键实现转动。
算法思想:由于改变观察点函数原型为:
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
所以R的作用就是和角度s_angle算出转动之后眼睛应该看向的位置。
#define PI 3.141592653
#define R 100
static GLfloat s_eye[] = { 0, 0.0, 1 }; // 观察点的位置
static GLfloat s_at[] = { 0.0, 0.0, 0.0 }; //观察点的观察方向
static GLfloat s_angle = 0.0; //转动角度
tatic float rad = 0; //根据转动的角度算出弧值
float speed = 0.1; //移动的速度
.........
s_at[0] = float(s_eye[0] + R * sin(rad)); // 根据转动角度算出眼睛看的物体的位置的x坐标
s_at[2] = float(s_eye[2] - 100 * cos(rad)); //根据转动角度算出眼睛看的物体的位置的y坐标
s_at[1] = s_eye[1]; //z坐标不变
gluLookAt(s_eye[0], s_eye[1], s_eye[2], s_at[0], s_at[1], s_at[2], 0.0, 1.0, 0.0);
..............
if (g_keys->keyDown[VK_UP])
{
rad = float(PI*s_angle / 180.0f);
s_eye[2] -= (float)cos(rad) * speed;
s_eye[0] += (float)sin(rad) * speed;
//如果按上方向键,沿着转换角度后的方向前进,speed为每次前进的步长,通过sin和cos函数实现沿着现
//有角度方向前进。
}
if (g_keys->keyDown[VK_DOWN])
{
rad = float(PI*s_angle / 180.0f);
s_eye[2] += (float)cos(rad) * speed;
s_eye[0] -= (float)sin(rad) * speed;
//如果按下方向键,沿着转换角度后的方向后退,speed为每次前进的步长,通过sin和cos函数实现沿着现
//有角度方向前进。
}
if (g_keys->keyDown[VK_LEFT])
{
s_angle -= 0.1;
rad = float(PI*s_angle / 180.0f); //每次转动0.1度并算出相应的弧度制
}
if (g_keys->keyDown[VK_RIGHT])
{
s_angle += 0.1;
rad = float(PI*s_angle / 180.0f);
}
openGL漫游功能简单实现的更多相关文章
- php对文本文件进行分页功能简单实现
php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...
- HTML-003-模拟IDE代码展开收起功能简单示例
当先我们在日常的编程开发工作中使用编程工具(例如 Eclipse.Sublime 等等)都有相应的代码折叠展开功能,如下图所示,极大的方便了我们的编码工作.
- R语言的帮助使用和图形功能简单介绍
R语言的帮助使用和图形功能简单介绍 R语言帮助,在Windows桌面下,有很多种.最长使用的是在命令行下help() > help.start() 会在浏览器中,打开帮助的主页 watermar ...
- 轩辕展览-VR虚拟展厅设计如何实现全景漫游功能
什么是在线3d漫游?如何在VR虚拟展厅设计之中实现3d漫游功能?让我们来分享3dVR虚拟展厅的在线漫游. 实际上,在线3d漫游就是通过3d仿真场景,使用鼠标和键盘在虚拟空间之中自由漫游,它可以从高空俯 ...
- OpenGL学习-------绘制简单的几何图形
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...
- OpenGL学习 (一) - 简单窗口绘制
一.OpenGL 简介 OpenGL 本质: OpenGL(Open Graphics Library),通常可以认为是API,其包含了一系列可以操作图形.图像的函数.但深究下来,它是由Khronos ...
- IOS微信分享功能简单实现
PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方 ...
- python网络编程--socketserver 和 ftp功能简单说明
1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...
- cesium 实现路径漫游功能
功能:路径漫游. 详细:绘制多个路径,删除路径,漫游路径选择,路径漫游. ①绘制路径 ②保存路径 ③路径切换 ④路径漫游 ⑤路径删除 ⑥删除完成
随机推荐
- css 一些灵动性的小方法
CSS: 1.当鼠标放到一个图片上的时候,他会给你显示一些图片的信息或者是一些其他的信息. <!DOCTYPE html> <html lang="en"> ...
- ArcMap 10.3 AddIN找不到插件
现象:VS 2012写的AddIn插件,编译通过,安装成功 ArcGIS 10.3的AddIN Manager中,可以看到该插件 可是在自定义中却找不到.检索不到该插件. 解决方法:.net Fram ...
- python字符串前面加r
在Python的string前面加上'r', 是为了告诉编译器这个string是个raw string,不要转意backslash '\' . 例如,\n 在raw string中,是两个字符,\和n ...
- 关于linux开机进入grub问题的解决方法
用还是用ls (hd0,X)/grub命令查看每个盘里面的内容, 情况一 :如果你是在/boot/grub这个目录下找到的 grub rescue>root=(hd0,9) gr ...
- 通过iTop Webservice接口丰富OQL的功能
通过Python调用iTop的Webservice接口: #!/usr/bin/env python #coding: utf-8 import requests import json itopur ...
- Java实现Oracle数据库备份
今天将很早就实现的一个Oracle数据库备份功能粘贴出来,这个功能是在大学做阶段设计时写的: import java.io.File; import java.io.IOException; /** ...
- Symmetric Multiprocessor Organization
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序 good(从VS2012 update1开始支持xp和c++11)
一.直接使用VS2012/VS2013/VS2015生成XP兼容的可执行程序 Visual Studio刚发布时没打补丁,称为RTM版,之后会陆续发布补丁,进行bug修复和功能增强.VS2010及之前 ...
- ASP.NET MVC 项目中 一般处理程序ashx 获取Session
1-在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString( ...
- notepad++快捷键大全
Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+Z 撤消 Ctrl+Y 恢复 Ctrl+A 全选 Ctrl+F 键查找对话框启动 Ctrl+H 查找/替换对话框 Ctrl+D 复 ...