91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 576KB
    文件類型: .7z
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-05-07
  • 語言: 其他
  • 標簽: 3DS??OpenGL??

資源簡介

學習了Blender之后,很想將自己設計的模型載入自己編寫的程序中,因此考慮了比較常見的3DS文件格式。這回嘗試著將3DS文件載入自己寫的OpenGL程序并且顯示出來。 首先查找了許多現(xiàn)成載入3DS格式的例子,發(fā)現(xiàn)只有一個程序是可以運行的,于是就拿這個程序的源代碼進行研究。同時查看了一些國外的格式說明文檔,結合Blender中Outliner中數(shù)據(jù)的組織,我開始了解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提供的函數(shù)會更快。
????//?不過為了學習有關矩陣的知識,還是使用自己的變換吧
????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

評論

共有 條評論