• 大小: 1.79MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-19
  • 语言: 其他
  • 标签: opengl  nehe  

资源简介

关于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\GLframe.ipch
     目录           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\GLframe.obj
     文件       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个文件信息

评论

共有 条评论