资源简介
学习了Blender之后,很想将自己设计的模型载入自己编写的程序中,因此考虑了比较常见的3DS文件格式。这回尝试着将3DS文件载入自己写的OpenGL程序并且显示出来。
首先查找了许多现成载入3DS格式的例子,发现只有一个程序是可以运行的,于是就拿这个程序的源代码进行研究。同时查看了一些国外的格式说明文档,结合Blender中Outliner中数据的组织,我开始了解3DS格式的组织方式。
代码片段和文件信息
#include
#include “Camera.h“
//-----------------------------------------------------------------------------
Camera::Camera( void )
{
m_Pos.Set( 0.0f 0.0f 0.0f ); // 我默认在原点
m_Forward.Set( 0.0f 0.0f -1.0f ); // 我向Z轴负半轴看
m_Upward.Set( 0.0f 1.0f 0.0f ); // Y轴正半轴是上
}
//-----------------------------------------------------------------------------
void Camera::SetPos( const Point3F& pos )
{
m_Pos = pos;
}
//-----------------------------------------------------------------------------
void Camera::SetForward(const Vector3F& forward )
{
m_Forward = forward;
}
//-----------------------------------------------------------------------------
void Camera::SetUpward( const Vector3F& upward )
{
m_Upward = upward;
}
//-----------------------------------------------------------------------------
void Camera::MoveForward( const float step )
{
m_Pos += m_Forward * step;
}
//-----------------------------------------------------------------------------
void Camera::Apply( void )
{
// 默认是自己建立一个矩阵并且设置的,但是glu提供的函数会更快。
// 不过为了学习有关矩阵的知识,还是使用自己的变换吧
float matrix[16];
// 首先获取照相机观察和向上向量生成的矩阵
Vector3F x &y = m_Upward z;
z = -m_Forward;
CrossProduct( &x y z );
#define MATRIX( row col ) matrix[ row * 4 + col ]// 临时定义的宏
MATRIX( 0 0 ) = x.m[0];
MATRIX( 1 0 ) = x.m[1];
MATRIX( 2 0 ) = x.m[2];
MATRIX( 3 0 ) = 0.0f;
MATRIX( 0 1 ) = y.m[0];
MATRIX( 1 1 ) = y.m[1];
MATRIX( 2 1 ) = y.m[2];
MATRIX( 3 1 ) = 0.0f;
MATRIX( 0 2 ) = z.m[0];
MATRIX( 1 2 ) = z.m[1];
MATRIX( 2 2 ) = z.m[2];
MATRIX( 3 2 ) = 0.0f;
MATRIX( 0 3 ) = 0.0f;
MATRIX( 1 3 ) = 0.0f;
MATRIX( 2 3 ) = 0.0f;
MATRIX( 3 3 ) = 1.0f;
#undef MATRIX
// 设置矩阵
glMultMatrixf( matrix );
// 移动模型视图矩阵
glTranslatef( -m_Pos.x -m_Pos.y -m_Pos.z );
}
//-----------------------------------------------------------------------------
void Camera::RotateX( float angleInRadius )
{
// X轴(所谓的)是由向上向量(Y轴)和向前向量(Z轴)叉积得到的
Vector3F vecX;
CrossProduct( &vecX m_Upward m_Forward );
float rotMatrix[16];
RotationMatrix( rotMatrix vecX angleInRadius );// 计算旋转矩阵
// 更新向前的向量和向上的向量,将矩阵的3x3部分和向前和向上的向量相乘
Vector3F tmpVec;
tmpVec.Set( rotMatrix[0] * m_Forward.x + rotMatrix[4] * m_Forward.y + rotMatrix[8] * m_Forward.z
rotMatrix[1] * m_Forward.x + rotMatrix[5] * m_Forward.y + rotMatrix[9] * m_Forward.z
rotMatrix[2] * m_Forward.x + rotMatrix[6] * m_Forward.y + rotMatrix[10] * m_Forward.z );
m_Forward = tmpVec;
tmpVec.Set( rotMatrix[0] * m_Upward.x + rotMatrix[4] * m_Upward.y + rotMatrix[8] * m_Upward.z
rotMatrix[1] * m_Upward.x + rotMatrix[5] * m_Upward.y + rotMatrix[9] * m_Upward.z
rotMatrix[2] * m_Upward.x + rotMatrix[6] * m_Upward.y + rotMatrix[10] * m_Upward.z );
m_Upward = tmpVec;
}
//-----------------------------------------------------------------------------
void Camera::RotateY( floa
- 上一篇:Landsat8数据处理
- 下一篇:使用Qt实现的阴影映射源代码
相关资源
- 使用Qt实现的阴影映射源代码
- 计算机图形学.pdf
- glaux系列包
- 基于openGL开发的射击小游戏
- lighthouse3d GLSL的英文教程,很适合入门
- 一个用OpenGL完成的下雨模拟程序
- 利用OpenGL绘制一个简单场景:比如球
- 基于OpenGL的三维旋转算法及其在计算
- OpenGL入门教程pdf(最基础)
- opengl实现三维图形变换
- 采用VC及Opengl基于四叉树及LOD算法的室
- 基于OpenGL和LOD技术的三维地形及洪水
- 实战OpenGL三维可视化系统开发与源码
- Breakout.zip
- OpenGL安装包最完全
- OpenGL ES 2.0编程指南中文版
- opengl es 2.0 programming guide
- opengl实现的简单三维场景漫游
- 基于openGL的3D教室场景
- OpenGL安装包全
- OpenGL中32位和64位的GlAux.lib和GlAux.h文件
- OpenGL所需头文件和库文件.rar
- OpenGL glad
- OpenGL ES2.0开发库
- GLSL教程 pdf版
- GLSL在OPENGL中使用的
- opengl编程glsl-着色器
- 光照太阳系.zip
- 3ds max 2014 导出 .X 插件 64位版本
- labview的Opengl实现
评论
共有 条评论