<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"><meta name="generator" content="pdf2htmlEX"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/css/base.min.css"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/css/fancy.min.css"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/8556339/raw.css"><script src="https://csdnimg.cn/release/download_crawler_static/js/compatibility.min.js"></script><script src="https://csdnimg.cn/release/download_crawler_static/js/pdf2htmlEX.min.js"></script><script>try{pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});}catch(e){}</script><title></title></head><body><div id="sidebar" style="display: none"><div id="outline"></div></div><div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/8556339/bg1.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x1 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">Fantasy <span class="ff2">报告</span></div><div class="t m0 x2 h4 y3 ff2 fs1 fc0 sc0 ls0 ws0">题目:基于<span class="_ _0"> </span><span class="ff1">OpenGL<span class="_ _0"> </span></span>的<span class="_ _0"> </span><span class="ff1">Demoscene</span></div><div class="t m0 x3 h5 y4 ff2 fs2 fc0 sc0 ls0 ws0">一、参与人员</div><div class="t m0 x4 h6 y5 ff2 fs3 fc0 sc0 ls0 ws0">学号:<span class="ff1">200531500261</span></div><div class="t m0 x4 h6 y6 ff2 fs3 fc0 sc0 ls0 ws0">分工:独立完成</div><div class="t m0 x3 h5 y7 ff2 fs2 fc0 sc0 ls0 ws0">二、问题定义</div><div class="t m0 x4 h6 y8 ff2 fs3 fc0 sc0 ls0 ws0">用<span class="_ _1"> </span><span class="ff1">OpenGL<span class="_ _1"> </span></span>结合计算机图形学做一个三维动画演示。</div><div class="t m0 x3 h5 y9 ff2 fs2 fc0 sc0 ls0 ws0">三、开发工具</div><div class="t m0 x4 h6 ya ff2 fs3 fc0 sc0 ls0 ws0">平台:<span class="ff1">V<span class="_ _2"></span>isual Studio .NET 2003</span></div><div class="t m0 x4 h6 yb ff1 fs3 fc0 sc0 ls0 ws0">OpenGL<span class="_ _1"> </span><span class="ff2">版本:</span>MS OpenGL<span class="_ _2"></span> <span class="_ _3"></span>1.1 on XP<span class="_ _2"></span> Sp2</div><div class="t m0 x4 h6 yc ff1 fs3 fc0 sc0 ls0 ws0">W<span class="_ _2"></span>indows<span class="_ _4"> </span><span class="ff2">应用程序库:</span>W<span class="_ _2"></span>in32 <span class="_ _2"></span>API</div><div class="t m0 x4 h6 yd ff2 fs3 fc0 sc0 ls0 ws0">语言:<span class="ff1">C/C++</span></div><div class="t m0 x3 h5 ye ff2 fs2 fc0 sc0 ls0 ws0">四、功能实现</div><div class="t m0 x4 h6 yf ff2 fs3 fc0 sc0 ls0 ws0">全屏模式</div><div class="t m0 x4 h6 y10 ff2 fs3 fc0 sc0 ls0 ws0">窗口模式</div><div class="t m0 x4 h6 y11 ff2 fs3 fc0 sc0 ls0 ws0">按<span class="_ _1"> </span><span class="ff1">ESC<span class="_ _1"> </span></span>结束放映</div><div class="t m0 x3 h5 y12 ff2 fs2 fc0 sc0 ls0 ws0">五、程序结构</div><div class="t m0 x4 h6 y13 ff2 fs3 fc0 sc0 ls0 ws0">程序由三大部分组成,<span class="ff1">Demo<span class="_ _1"> </span></span>引擎、场景和公共工具包。</div><div class="t m0 x4 h6 y14 ff2 fs3 fc0 sc0 ls0 ws0">下图为各个部分的具体组成结构图:</div></div><div class="t m0 x5 h7 y15 ff1 fs3 fc0 sc0 ls0 ws0">class W<span class="_ _2"></span>indowLayer;</div><div class="t m0 x5 h7 y16 ff1 fs3 fc0 sc0 ls0 ws0">class DemoEngine;</div><div class="t m0 x5 h7 y17 ff1 fs3 fc0 sc0 ls0 ws0">class SceneBase;</div><div class="t m0 x6 h8 y18 ff1 fs4 fc0 sc0 ls0 ws0">Demo<span class="_ _0"> </span><span class="ff2">引擎</span></div><div class="c x0 y1 w2 h2"><div class="t m0 x7 h9 y19 ff1 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x8 h5 y1a ff2 fs2 fc0 sc0 ls0 ws0">程序结构图</div><div class="t m0 x4 h5 y1b ff3 fs2 fc0 sc0 ls0 ws0">1<span class="ff2">、<span class="ff1">Demo<span class="_ _0"> </span></span>引擎</span></div><div class="t m0 x9 h7 y1c ff1 fs3 fc0 sc0 ls0 ws0">class W<span class="_ _2"></span>indowLayer;</div></div><div class="t m0 xa h7 y1d ff1 fs3 fc0 sc0 ls0 ws0">class Scene1;</div><div class="t m0 xa h7 y1e ff1 fs3 fc0 sc0 ls0 ws0">class Scene2;</div><div class="t m0 xa h7 y1f ff1 fs3 fc0 sc0 ls0 ws0">class Scene3;</div><div class="t m0 xb h8 y20 ff2 fs4 fc0 sc0 ls0 ws0">场景</div><div class="t m0 xc h7 y1d ff1 fs3 fc0 sc0 ls0 ws0">class Common;</div><div class="t m0 xc h7 y1e ff1 fs3 fc0 sc0 ls0 ws0">class Font;</div><div class="t m0 xc h7 y1f ff1 fs3 fc0 sc0 ls0 ws0">class Perlin;</div><div class="t m0 xc h7 y21 ff1 fs3 fc0 sc0 ls0 ws0">class V<span class="_ _5"></span>ector;</div><div class="t m0 xc h7 y22 ff1 fs3 fc0 sc0 ls0 ws0">class Camera;</div><div class="t m0 xc h7 y23 ff1 fs3 fc0 sc0 ls0 ws0">class TGAM<span class="_ _6"></span>anager;</div><div class="t m0 xd h8 y24 ff2 fs4 fc0 sc0 ls0 ws0">公共工具包</div></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div></body></html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/8556339/bg2.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 xe h6 y25 ff2 fs3 fc0 sc0 ls0 ws0">管理普通的窗口创建和为<span class="_ _1"> </span><span class="ff1">OpenGL<span class="_ _1"> </span></span>分配缓冲区。</div><div class="t m0 x9 h7 y26 ff1 fs3 fc0 sc0 ls0 ws0">class DemoEngine;</div><div class="t m0 xe h6 y27 ff2 fs3 fc0 sc0 ls0 ws0">管理场景的加载和场景与场景的切换。</div><div class="t m0 x9 h7 y28 ff1 fs3 fc0 sc0 ls0 ws0">class SceneBase;</div><div class="t m0 xe h6 y29 ff2 fs3 fc0 sc0 ls0 ws0">所有场景的基类,提供了一些与场景相关的通用函数,比如窗口的大小、</div><div class="t m0 xe h6 y2a ff2 fs3 fc0 sc0 ls0 ws0">定时器的管理等。</div><div class="t m0 x4 h5 y2b ff1 fs2 fc0 sc0 ls0 ws0">2<span class="ff2">、场景</span></div><div class="t m0 x9 h7 y2c ff1 fs3 fc0 sc0 ls0 ws0">class Scene1;</div><div class="t m0 x9 h7 y2d ff1 fs3 fc0 sc0 ls0 ws0">class Scene2;</div><div class="t m0 x9 h7 y2e ff1 fs3 fc0 sc0 ls0 ws0">class Scene3;</div><div class="t m0 xe h6 y8 ff2 fs3 fc0 sc0 ls0 ws0">三个场景。</div><div class="t m0 x4 h5 y2f ff1 fs2 fc0 sc0 ls0 ws0">3<span class="ff2">、公共工具包</span></div><div class="t m0 x9 h7 y30 ff1 fs3 fc0 sc0 ls0 ws0">class Common;</div><div class="t m0 xe h6 ya ff2 fs3 fc0 sc0 ls0 ws0">提供<span class="_ _3"></span>了<span class="_ _3"></span>绘制<span class="_ _3"></span>球<span class="_ _3"></span>体、<span class="_ _3"></span>圆<span class="_ _3"></span>柱<span class="_ _3"></span>体和<span class="_ _3"></span>一<span class="_ _3"></span>些用<span class="_ _7"> </span><span class="ff1">Procedural T<span class="_ _2"></span>exture<span class="_ _1"> </span><span class="ff2">的<span class="_ _3"></span>方<span class="_ _3"></span>法生<span class="_ _3"></span>成<span class="_ _3"></span>的一<span class="_ _3"></span>些</span></span></div><div class="t m0 xe h6 yb ff2 fs3 fc0 sc0 ls0 ws0">常用纹理。</div><div class="t m0 x9 h7 y31 ff1 fs3 fc0 sc0 ls0 ws0">class Font;</div><div class="t m0 xe h6 yd ff2 fs3 fc0 sc0 ls0 ws0">字体管理,用于显示字。</div><div class="t m0 x9 h7 y32 ff1 fs3 fc0 sc0 ls0 ws0">class Perlin;</div><div class="t m0 xe h6 y33 ff1 fs3 fc0 sc0 ls0 ws0">Perlin Noise<span class="_ _1"> </span><span class="ff2">生成器。</span></div><div class="t m0 x9 h7 y34 ff1 fs3 fc0 sc0 ls0 ws0">class V<span class="_ _5"></span>ector;</div><div class="t m0 xe h6 yf ff2 fs3 fc0 sc0 ls0 ws0">向量类。</div><div class="t m0 x9 h7 y35 ff1 fs3 fc0 sc0 ls0 ws0">class Camera;</div><div class="t m0 xe h6 y11 ff2 fs3 fc0 sc0 ls0 ws0">照相机类,用于管理视点坐标变换。</div><div class="t m0 x9 h7 y36 ff1 fs3 fc0 sc0 ls0 ws0">class TGAM<span class="_ _6"></span>anager;</div><div class="t m0 xe h6 y37 ff1 fs3 fc0 sc0 ls0 ws0">TGA<span class="_ _1"> </span><span class="ff2">格式图象文件管理器。</span></div><div class="t m0 x3 h5 y38 ff2 fs2 fc0 sc0 ls0 ws0">六、数据结构</div><div class="t m0 x4 h6 y39 ff1 fs3 fc0 sc0 ls0 ws0">1<span class="ff2">、纹理的数据结构:</span></div><div class="t m0 x9 h6 y3a ff1 fs3 fc0 sc0 ls0 ws0">RGB<span class="_ _1"> </span><span class="ff2">格式的纹理:<span class="_ _8"> </span><span class="ff4">Textur<span class="_ _2"></span>e_na<span class="_"> </span>me<span class="ff1">[ <span class="_ _3"></span>64 ][ 64 ][ 3 ]</span></span></span></div><div class="t m0 x9 h6 y3b ff1 fs3 fc0 sc0 ls0 ws0">RGBA<span class="_ _1"> </span><span class="ff2">格式的纹理:<span class="_ _9"> </span><span class="ff4">T<span class="_ _a"></span>extur<span class="_ _2"></span>e_name<span class="ff1">[ <span class="_ _3"></span>64 ][ 64 ][ 4 ]</span></span></span></div><div class="t m0 x9 h6 y3c ff2 fs3 fc0 sc0 ls0 ws0">所有纹理都<span class="_ _3"></span>使用<span class="_ _1"> </span><span class="ff1">64*64<span class="_"> </span></span>的结构存储。大部分纹理使<span class="_ _3"></span>用了<span class="_ _4"> </span><span class="ff1">RGB<span class="_ _1"> </span></span>三<span class="_ _3"></span>个颜色通道,<span class="_ _3"></span>个别</div><div class="t m0 x9 h6 y3d ff2 fs3 fc0 sc0 ls0 ws0">使用<span class="_ _1"> </span><span class="ff1">Alpha<span class="_ _1"> </span></span>混合或<span class="_ _1"> </span><span class="ff1">Alpha<span class="_ _1"> </span></span>测试的纹理使用了<span class="_ _1"> </span><span class="ff1">RGBA<span class="_ _1"> </span></span>四个通道。</div><div class="t m0 x4 h6 y3e ff1 fs3 fc0 sc0 ls0 ws0">2<span class="ff2">、向量</span></div><div class="t m0 x9 h7 y3f ff1 fs3 fc0 sc0 ls0 ws0">class V<span class="_ _5"></span>ector {</div><div class="t m0 xf h7 y40 ff1 fs3 fc0 sc0 ls0 ws0">public:</div><div class="t m0 xe h7 y41 ff1 fs3 fc0 sc0 ls0 ws0">float x, y<span class="_ _2"></span>, z;</div><div class="t m0 x9 h7 y42 ff1 fs3 fc0 sc0 ls0 ws0">};</div><div class="t m0 x9 h6 y43 ff1 fs3 fc0 sc0 ls0 ws0">V<span class="_ _a"></span>ect<span class="_ _6"></span>or<span class="_ _1"> </span><span class="ff2">是<span class="_ _3"></span>向<span class="_ _3"></span>量<span class="_ _3"></span>类,<span class="_ _3"></span>所<span class="_ _3"></span>有数<span class="_ _3"></span>据<span class="_ _3"></span>成员<span class="_ _3"></span>和<span class="_ _3"></span>成<span class="_ _3"></span>员函<span class="_ _3"></span>数<span class="_ _3"></span>都是<span class="_ _3"></span>公<span class="_ _3"></span>有的<span class="_ _3"></span>。<span class="_ _3"></span>成<span class="_ _3"></span>员函<span class="_ _3"></span>数<span class="_ _3"></span>提供<span class="_ _3"></span>了<span class="_ _3"></span>一些<span class="_ _3"></span>和</span></div></div></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div>