资源简介
关于OpenGL天空盒和地面的代码,可以运行。
代码片段和文件信息
//========================================================
/**
* @file Camera.cpp
*
* 项目描述: 构造天空和地面
* 文件描述: 摄像机类
* 适用平台: Windows98/2000/NT/XP
*
* 作者: WWBOSS
* 电子邮件: wwboss123@gmail.com
* 创建日期: 2006-12-06
* 修改日期: 2006-12-07
*
*/
//========================================================
#include “stdafx.h“
#include “Camera.h“ /**< 包含摄像机头文件 */
#include “Vector.h“ /**< 包含向量类 */
#include “GLframe.h“
Camera* Camera::m_pCamera = NULL;
/** 构造函数 */
Camera::Camera()
{
/** 初始化向量值 */
Vector3 zero = Vector3(0.0 0.0 0.0);
Vector3 view = Vector3(0.0 1.0 0.5);
Vector3 up = Vector3(0.0 0.0 1.0);
/** 初始化摄像机 */
m_Position = zero;
m_View = view;
m_UpVector = up;
m_Speed = 0.1f;
m_pCamera = this;
}
Camera::~Camera()
{
}
/** 设置摄像机的位置朝向和向上向量 */
void Camera::setCamera( float positionX float positionY float positionZ
float viewX float viewY float viewZ
float upVectorX float upVectorY float upVectorZ)
{
/** 构造向量 */
Vector3 Position = Vector3(positionX positionY positionZ);
Vector3 View = Vector3(viewX viewY viewZ);
Vector3 UpVector = Vector3(upVectorX upVectorY upVectorZ);
/** 设置摄像机 */
m_Position = Position;
m_View = View;
m_UpVector = UpVector;
}
/** 旋转摄像机方向 */
void Camera::rotateView(float angle float x float y float z)
{
Vector3 newView;
/** 计算方向向量 */
Vector3 view = m_View - m_Position;
/** 计算 sin 和cos值 */
float cosTheta = (float)cos(angle);
float sinTheta = (float)sin(angle);
/** 计算旋转向量的x值 */
newView.x = (cosTheta + (1 - cosTheta) * x * x) * view.x;
newView.x += ((1 - cosTheta) * x * y - z * sinTheta) * view.y;
newView.x += ((1 - cosTheta) * x * z + y * sinTheta) * view.z;
/** 计算旋转向量的y值 */
newView.y = ((1 - cosTheta) * x * y + z * sinTheta) * view.x;
newView.y += (cosTheta + (1 - cosTheta) * y * y) * view.y;
newView.y += ((1 - cosTheta) * y * z - x * sinTheta) * view.z;
/** 计算旋转向量的z值 */
newView.z = ((1 - cosTheta) * x * z - y * sinTheta) * view.x;
newView.z += ((1 - cosTheta) * y * z + x * sinTheta) * view.y;
newView.z += (cosTheta + (1 - cosTheta) * z * z) * view.z;
/** 更新摄像机的方向 */
m_View = m_Position + newView;
}
/** 用鼠标旋转摄像机 */
void Camera::setViewByMouse()
{
POINT mousePos; /**< 保存当前鼠标位置 */
int middleX = GetSystemMetrics(SM_CXSCREEN) >> 1; /**< 得到屏幕宽度的一半 */
int middleY = GetSystemMetrics(SM_CYSCREEN) >> 1; /**< 得到屏幕高度的一半 */
float angleY = 0.0f; /**< 摄像机左右旋转角度 */
float angleZ = 0.0f; /**< 摄像机上下旋转角度 */
static float currentRotX = 0.0f;
/** 得到当前鼠标位置 */
GetCursorPos(&mousePos);
ShowCursor(TRUE);
/** 如果鼠标没有移动则不用更新 */
if( (mousePos.x == middleX) && (mousePos.y == middleY) )
return;
/** 设置鼠标位置在屏幕中心 */
SetCursorPos(middleX middleY);
/**< 得到鼠标移动方向 */
angleY = (float)( (
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-26 08:48 SkyAndTerrain\
目录 0 2018-10-26 08:48 SkyAndTerrain\.vs\
目录 0 2018-10-26 08:48 SkyAndTerrain\.vs\SkyAndTerrain\
目录 0 2018-10-26 09:07 SkyAndTerrain\.vs\SkyAndTerrain\v15\
文件 21504 2018-10-26 09:07 SkyAndTerrain\.vs\SkyAndTerrain\v15\.suo
文件 327680 2018-10-26 09:07 SkyAndTerrain\.vs\SkyAndTerrain\v15\Browse.VC.db
目录 0 2018-10-26 08:49 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\
目录 0 2018-10-26 08:49 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\AutoPCH\
目录 0 2018-10-26 08:49 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\AutoPCH\cbad7973147ffb9b\
文件 458752 2018-10-26 09:07 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\AutoPCH\cbad7973147ffb9b\GLfr
目录 0 2018-10-26 08:49 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\AutoPCH\e43f215285514a34\
文件 458752 2018-10-26 08:49 SkyAndTerrain\.vs\SkyAndTerrain\v15\ipch\AutoPCH\e43f215285514a34\CAMERA.ipch
目录 0 2018-10-26 08:48 SkyAndTerrain\Backup\
文件 915 2007-11-13 11:05 SkyAndTerrain\Backup\SkyAndTerrain.sln
文件 2663 2007-11-13 11:05 SkyAndTerrain\CBMPLoader.cpp
文件 1058 2007-11-13 11:05 SkyAndTerrain\CBMPLoader.h
文件 6372 2007-11-13 11:05 SkyAndTerrain\Camera.cpp
文件 1906 2007-11-13 11:05 SkyAndTerrain\Camera.h
目录 0 2018-10-26 09:07 SkyAndTerrain\Debug\
文件 2434 2007-11-13 11:05 SkyAndTerrain\Debug\BuildLog.htm
文件 13325 2007-11-13 11:05 SkyAndTerrain\Debug\CBMPLoader.obj
文件 27107 2007-11-13 11:05 SkyAndTerrain\Debug\Camera.obj
文件 15963 2007-11-13 11:05 SkyAndTerrain\Debug\Font.obj
文件 29346 2007-11-13 11:05 SkyAndTerrain\Debug\GLfr
文件 23206 2007-11-13 11:05 SkyAndTerrain\Debug\GLWindow.obj
文件 192512 2007-11-13 11:05 SkyAndTerrain\Debug\SkyAndTerrain.exe
文件 749352 2007-11-13 11:05 SkyAndTerrain\Debug\SkyAndTerrain.ilk
文件 302 2018-10-26 09:07 SkyAndTerrain\Debug\SkyAndTerrain.log
文件 34998 2007-11-13 11:05 SkyAndTerrain\Debug\SkyAndTerrain.obj
文件 764928 2007-11-13 11:05 SkyAndTerrain\Debug\SkyAndTerrain.pdb
文件 24767 2007-11-13 11:05 SkyAndTerrain\Debug\SkyBox.obj
............此处省略42个文件信息
- 上一篇:UML软件建模大作业.rar
- 下一篇:Kettle在Linux的安装使用
相关资源
- 三维场景漫游.zip
- openGL实现的正方体六面贴图
- opengl简易翻牌游戏
- Qt Openglwidget 显示图片纹理贴图
- OpenGL实现三维物体旋转,缩放
- MD5GPU.rar
- OpenGL立方体在世界坐标系中缩放_旋转
- OpenGL ES 2.0 编程指南 中文版.pdf
- openGL实现三维点云显示
- opengl写的趣味3D骰子
- 计算机图形学实验 opengl实现太阳系运
- opengl实现地球围绕太阳转动
- opnegl 太阳 月亮 地球 天体旋转
- glut库glew库glfw库glaux库
- OpenGL小车三维模型源码.zip
- 虚拟环境漫游系统
- 基于OpenGL实现俄罗斯方块
- OpenGL简单场景编程
- glui for opengl(glui.h glui32.lib)
- myRay_Tracer.zip
- opengl画三角形
- opengl绘制树
- qt opengl(after ver2.1) 渲染 nv12
- 3D Helicopter
- 计算机图形大作业opengl-物联网.rar
- OpenGL安装包.zip
- OpenGl读取obj格式文件
- OpenGL Shading Language (3rd Edition)
- VC实现OpenGL三维绘图
- OpenGL_Nehe(NeHe中文教程)pdf+源码
评论
共有 条评论