第10课 OpenGL 3D世界】的更多相关文章

加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelgeuse)所写的.在本课中我们只对增加的代码做解释.当然只添加课程中所写的代码,程序是不会运行的.如果您有兴趣知道下面的每一行代码是如何运行的话,请下载完整的源码,并在浏览这一课的同时,对源码进行跟踪.好了现在欢迎来到名不见经传的第十课.到现在为止,您应该有能力创建一个旋转的立方体或一群星星了,对3D…
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十课:3D世界 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelgeuse)所写的…
3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象.我们给三角形增加一个左侧面,一个右侧面,一个后侧面来生成一个金字塔(四棱锥).给正方形增加左.右.上.下及背面生成一个立方体. 我们混合金字塔上的颜色,创建一个平滑着色的对象.给立方体的每一面则来个不同的颜色. int DrawGLScene(GLvoid) // 此过程中包括所有…
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十四课:3D光晕 3D 光晕 当镜头对准太阳的时候就会出现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了.好好看看吧.   大家好,欢迎来到新的一课,在这一课中我们将扩展glCamera类,来实现镜头光晕的效果.在日常生活…
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. 第五课:3D空间 3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象.我们给三角形增加一…
原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ------------------------------------------------------------第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍 自Doom游戏时代以来我们已经走了很远. DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎". 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新…
http://wiki.ubuntu-tw.org/index.php?title=Howto_Install_OpenGL_Development_Environment 前言 OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上.OpenGL 让程式开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬体由 OpenGL 核心去沟通,因此只要显示卡支援 OpenGL,那么程式就不需要重新再移植,而程式开发人员也不需要重新…
前言 OpenGL 的学习资料很多,一个是比较著名的 OpenGL 红宝书<OpenGL 编程指南>,可以在这里 http://opengl-redbook.com/ 下载该书配套的源代码:另一个是网络上的在线教程LearnOpenGL.所以,我这里就不再啰啰嗦嗦地介绍 OpenGL 的基础知识和计算机图形学的基础知识了,主要是简单阐述一些我自己的理解,以及写一些能跑起来.能看到效果的体验性的小程序. 通过前一篇阐述,可以看到在 Linux 系统中学习 OpenGL 是多么的方便.使用 GLE…
这就是书上的最终效果了,一个完整的空间大战游戏: 点击查看源码 这里并没有太多的新知识,所涉及的东西更多的是游戏开发方面的优化和技巧,下面我们大家一起来看看: 飞船: 类似粒子效果中的粒子创建方法,我们的游戏飞船也需要一样的创建机制进行创建,大家可以点击查看源码: GameActor GameActorPool 需要额外说明的是,添加了进行碰撞检测的机制,代码里写了基于球形的距离的碰撞检测(简单高效)和基于AABB盒的碰撞检测,但AABB盒的碰撞检测在实际的游戏中并没有使用. 另外添加了一点优化…
虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告别直接使用代码编写顶点数据的时代了,想想上一节,平面的四边形手写顶点或许还过得去,但是如果手写一个立方体的8个顶点数据就有点难了吧,如果是显示更加复杂的形状呢? 要显示一个3D模型,就需要一个特定格式的3D模型文件,3D模型文件一般使用3D建模工具创建,美术完成建模后会将模型导出为特定格式的3D模型…
如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上真3D,但是正是由于有了之前的学习我们实现真3D世界的学习才会更加轻松,下面的笔记就让我们真正的进入3D世界吧! 补充一下,我们的这部分学习笔记是基于<Adobe Flash 11 Stage3D(Molehill) 游戏编程初学者指南>一书的学习而来的. 赶快进入我们的主题,是否还记得之前的2D…
程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上. 而自己呢?是个程序员呢还是个业余玩家!…
要把一个3d物体呈现在屏幕上,要经过一系列的步骤. 描述3d世界 把3d世界绘制在二维屏幕上 如何描述一个3D世界? 数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线性空间). 在空间中分为两类对象:静态的物体,物体的运动 静态的对象用 向量 表示,运动用 矩阵 表示 齐次坐标 欧几里得空间并不能充分的描述3d世界,数学家扩展了一下,出来个仿射空间.仿射空间里面的坐标叫做 齐次坐标 物体对象的运动-[模型矩阵] 一个正方体,我们知道8个顶点的信息就可以描述(即8…
在 Windows 10 上安装 3D Stuido Max 2016 报错,无法正常安装,查看日志是 VC 运行时安装错误,经过分析发现在 Windows 10 上已经有这些运行时并且版本比安装包中自带的还要高,所以安装总是失败,分析安装程序配套的 setup.ini 文件,发现里面有运行时安装的配置信息,并且可以忽略错误,因此修改 setup.ini 文件,然后就可以顺利进行安装了,修改后的 setup.ini 文件如所示 #============= VCREDIST Begin ====…
参考文章 深入探索3D拾取技术 OpenGL 3D拾取 射线和三角形的相交检测(ray triangle intersection test) 3D拾取的方法有两种 1.基于几何计算的射线-三角形相交法 2.使用OpenGL本身的拾取机制 这里主要使用第二种,理解起来相对简单一点. 借用大佬的通俗易懂的说法,这种方法的本质就是: 把每个三角形的id作为材质渲染到屏幕上,很容易就能找到鼠标对应的颜色值.这样多少三角形都能正确得到. 完全不用进行数学计算. 优点在于减少了大量不必要的计算开销——只对…
有没有想过把身边的物件儿转成 3D 动画,在网页上实现一把?本期特推的项目 Three.js 就是帮你创建 3D 页面的知名开源项目,好玩的 3D 世界在向你招手.除了打开浏览器 3D 世界的钥匙外,还有担心你吃不好的 HowToCook 手把手带你摆脱吃泡面过上煮饭.烹饪居家生活. 说到吃饭的家伙,B站开源了他们用百万动漫素材训练而成的图像清晰化利器--ailab,你可以来实地感受一下 B站硬核的图像技术. 以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 H…
3D空间中移动图像: 你想知道如何在3D空间中移动物体,你想知道如何在屏幕上绘制一个图像,而让图像的背景色变为透明,你希望有一个简单的动画.这一课将教会你所有的一切.前面的课程涵盖了基础的OpenGL,每一课都是在前一课的基础上创建的.这一课是前面几课知识的综合,当你学习这课时,请确保你已经掌握了前面几课的知识. 欢迎进入第九课.到现在为止,您应该很好的理解OpenGL了.『CKER:如果没有的话,一定是我翻译的罪过......』.您已经学会了设置一个OpenGL窗口的每个细节.学会在旋转的物体…
学习自: https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/#3d 0,首先添加glm库文件 相关方法可以参照我指定的那篇随便 1,顶点着色器shader.vs #version core layout (location = ) in vec3 aPos; layout (location = ) in vec2 aTexCoord; out vec2 TexCoord; unif…
Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]     一说到 Linux,就不得不提目前最红火的 Ubuntu 发行版了!它拥有绚丽的界面,甚至跟以时尚为卖点的 Mac OSX 相比也有过之而无不及,相信当你试过这款操作系统之后,你会对 Linux 的印象产生翻天覆地的改变! 在 Ubuntu 的 Linux 世界里,已经不再只是简陋的界面+命令行,而是一款华丽时尚且无比实用的操…
一直弄不清3D场景中scaleOrientation的作用,还有scale.orientation(roation).translation的顺序问题,以往都是试图查一下,关于前者网上几乎找不到什么清晰的说明,想了一想SDK中应当有专业清晰的说明,于是翻了SDK,果然讲得很清楚. 一.关于scaleorientation sdk上指明了this property rotate the coordination before the scale property is applied.刚一看没怎么…
显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表,显示列表将加快程序的速度,而且可以减少代码的长度. 当你在制作游戏里的小行星场景时,每一层上至少需要两个行星,你可以用OpenGL中的多边形来构造每一个行星.聪明点的做法是做一个循环,每个循环画出行星的一个面,最终你用几十条语句画出了一个行星.每次把行星画到屏幕上都是很困难的.当你面临更复杂的物体…
飘动的旗帜: 这一课从第六课的代码开始,创建一个飘动的旗帜.我相信在这课结束的时候,你可以掌握纹理映射和混合操作. 大家好!对那些想知道我在这里作了些什么的朋友,您可以先按文章的末尾所列出的链接,下载我那毫无意义的演示(Demo)看看先!我是bosco,我将尽我所能教您来实现一个以正弦波方式运动的图象.这一课基于NeHe的教程第六课,当然您至少也应该学会了一至六课的知识.您需要下载源码压缩包,并将压缩包内带的data目录连其下的位图一起释放至您的代码目录下.或者使用您自己的位图,当然它的尺寸必须…
混合: 在这一课里,我们在纹理的基础上加上了混合,它看起具有透明的效果,当然解释它不是那么容易,当希望你喜欢它. 简单的透明OpenGL中的绝大多数特效都与某些类型的(色彩)混合有关.混色的定义为,将某个象素的颜色和已绘制在屏幕上与其对应的象素颜色相互结合.至于如何结合这两个颜色则依赖于颜色的alpha通道的分量值,以及/或者所使用的混色函数.Alpha通常是位于颜色值末尾的第4个颜色组成分量.前面这些课我们都是用GL_RGB来指定颜色的三个分量.相应的GL_RGBA可以指定alpha分量的值.…
下一段代码绘制贴图立方体.我只对新增的代码进行注解.如果您对没有注解的代码有疑问,回头看看第六课. int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 下三行代码放置并旋转贴图立方体.glTranslatef(0.0f,0.0f,z)将立方体沿着Z轴移动Z单位.glRot…
光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的光照.这一课包含了很多内容,如果您对前面的课程有疑问的话,先回头复习一下.进入后面的代码之前,很好的理解基础知识十分重要.我们还是在第一课的代码上加以修改.跟以前不一样的是,只要有任何大的改动,我都会写出整段代码.程序开始,我们先加上几个新的变量. 下面几行是新的.我们增加三个布尔变量. light…
纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多个多边形来构建导弹的轮廓并加上有趣的颜色.使用纹理映射,您可以使用真实的导弹图像并让它飞过屏幕.您觉得哪个更好看?照片还是一大堆三角形和四边形?使用纹理映射的好处还不止是更好看,而且您的程序运行会更快.导弹贴图可能只是一个飞过窗口的四边形.一个由多边形构建而来的导弹却很可能包括成百上千的多边形.很显…
旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 上一课中我教给您三角形和四边形的着色.这一课我将教您如何将这些彩色对象绕着坐标轴旋转.其实只需在上节课的代码上增加几行就可以了.下面我将整个例程重写一遍.方便您知道增加了什么,修改了什么.我们增加两个变量来控制这两个对象的旋转.这两个变量加在程序的开始处其他变量的后面( bool fullscreen=TRUE;下面的两行).它们是浮点类型的变量,使得我们能够非常精确地旋转对象.浮点数包含小数位…
添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在下图中,三角形用的是光滑着色,四边形用的是平面着色 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边形添加2种不同类型的着色方法.使用Flat coloring(单调着色)给四边形涂上固定的一种颜色.使用Smooth coloring(平滑着色)将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合. 继续在上节课的DrawGLScene例程上修改.下面将整个例程重写了一遍.如果您计划修改上节课…
你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形.也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形.读完了这一课,你会学到如何在空间放置模型,并且会知道深度缓存的概念. 第一课中,我教您如何创建一个OpenGL窗口.这一课中,我将教您如何创建三角形和四边形.我们讲使用来创建GL_TRIANGLES一个三角形,GL_QUADS来创建一个四边形. 在第一课代码的基础上,我们只需在DrawGLScene()过程中增加代…
下面的代码处理所有的窗口消息.当我们注册好窗口类之后,程序跳转到这部分代码处理窗口消息. LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄 UINT uMsg, // 窗口的消息 WPARAM wParam, // 附加的消息内容 LPARAM lParam) // 附加的消息内容 { 下面的代码比对uMsg的值,然后转入case处理,uMsg 中保存了我们要处理的消息名字. switch (uMsg) // 检查Windows消息 { 如果uMsg等于…