
C++和OpenGL核心模式3D游戏编程
文章平均质量分 95
3D类RPG游戏允许玩家体验一个庞大的虚拟世界。它们通常具备丰富的游戏内容、高度自由的游戏玩法,以及与其他玩家交流的社交功能。在游戏中,玩家可以扮演各种角色,与其他玩家组队探险、竞技对战,共同书写属于他们的冒险故事。那么我们这里研究一下怎样用C++结合OpenGL去实现一个3D类RPG游戏的设计。
zhooyu
纵使疾风起,人生不言弃
展开
-
C++和OpenGL实现3D游戏编程【连载24】——父物体和子物体之间的坐标转换
前面章节我们了解了父物体与子物体的结构,它不仅能够表示物体之间的层次关系,更重要的一个作用就是展示物体之间的位置关系(Unity在Transform控件中建立父子关系可能也是这个原因),也就是说当父物体移动时,所有的子物体会随之移动,但当子物体移动时父物体无需移动,这样的功能是本节要实现的主要内容。也可以这么说,所有子物体位置都是相对于父物体空间的。而处于顶层的物体(自身的父物体为空)的位置坐标也就是世界坐标,所有子物体及子子物体都处于他们的直接父物体空间内(后期的骨骼系统的基本原理也类似于这种父子结构)。原创 2025-03-10 09:08:59 · 239 阅读 · 14 评论 -
C++和OpenGL实现3D游戏编程【目录】
我们从游戏的角度出发,用C++去了解一下游戏中的功能都是怎么实现的。这一切还是要从自己玩游戏开始说起,此前就玩过一下3D游戏,当时就被游戏里的一些画面和设置深深的吸引了,同时游戏里还有很多很有趣的设定,比如,玩家的视角是怎么移动的?崎岖不平的地图是怎样制作的?人物和物体、地面的碰撞是怎样检测的?鼠标是怎样选中眼前的物体的?魔法技能是怎样释放的?不用加载进度条的无缝世界地图是怎么实现的?带着这些疑问,我们走进了一个OpenGL世界的3D世界。原创 2024-09-17 19:31:57 · 3773 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载1】——初探3D世界(附源码)
在我学习C++的过程中,研究了一下OpenGL编程,打开了3D世界的编程世界,3D世界的效果还是相当不错。而且OpenGL能够支持跨平台兼容,是不错的学习方向,于是就自己学习了网上的很多教程,并将所有学到的知识运用到自己编程中去,现在正好有时间,就将自己编程中的一些点点滴滴汇总出来,以供大家参考。原创 2024-08-02 12:05:47 · 2377 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载2】——了解并创建3D空间模型(附源码)
试想以下,我们如果在玩游戏,出现人物如果会随着程序窗口大小的改变而不断地被拉长或压扁,那将是个多么糟糕的事情。前两个非常的好理解,第一个参数就表示的是你眼睛的位置,第二个参数就表示你要看物体的位置坐标,当然,我们第二个参数可以不确定到具体的物体位置坐标,只要你向前看,视线上的任何一点都可以。说到这里,后期当我们不停地改变眼睛的位置和视线的方向,就产生了视角移动的效果,可以产生人物移动观察世界的效果,类似第一人称射击游戏或RPG游戏人物视角的效果,是不是很有感觉,我们将在后期完善相关代码,随后再详细说。原创 2024-08-05 14:45:46 · 2594 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载3】——3D空间模型光照初步(附源码)
上一节课,我们建立了简单的坐标系,同时也显示了一个正方体,但正方体的颜色为纯红色,好像一个平面物体一样,我们这节课就可以加一些光照,并创建更多的模型,使这些物体变得更加立体一些。这里由于没有系统自带的长方体,要自定义创建一个长方体地面。当然,我们现在加的只是一个感官上的地面,后期还要添加玩家在地面上的碰撞检查,我落在地面上,可以顺着地形的不同不断改变能力的高度,遇到障碍物我无法通过,如果遇到了峡谷,人物也可以自由落体势掉落到峡谷底部,但不会掉落无尽深渊的效果。原创 2024-08-07 13:31:58 · 2775 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载4】——纹理加载常用的三种方式(附源码)
我们从游戏的角度出发,用C++去了解一下游戏中的功能都是怎么实现的。这一切还是要从自己玩游戏开始说起,此前就玩过一下3D游戏,当时就被游戏里的一些画面和设置深深的吸引了,同时游戏里还有很多很有趣的设定,比如,玩家的视角是怎么移动的?崎岖不平的地图是怎样制作的?人物和物体、地面的碰撞是怎样检测的?鼠标是怎样选中眼前的物体的?魔法技能是怎样释放的?不用加载进度条的无缝世界地图是怎么实现的?带着这些疑问,我们走进了一个OpenGL世界的3D世界。原创 2024-08-19 08:35:18 · 725 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载5】——纹理坐标、纹理贴图(附源码)
我们从游戏的角度出发,用C++去了解一下游戏中的功能都是怎么实现的。这一切还是要从自己玩游戏开始说起,此前就玩过一下3D游戏,当时就被游戏里的一些画面和设置深深的吸引了,同时游戏里还有很多很有趣的设定,比如,玩家的视角是怎么移动的?崎岖不平的地图是怎样制作的?人物和物体、地面的碰撞是怎样检测的?鼠标是怎样选中眼前的物体的?魔法技能是怎样释放的?不用加载进度条的无缝世界地图是怎么实现的?带着这些疑问,我们走进了一个OpenGL世界的3D世界。原创 2024-08-26 15:38:34 · 1053 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图(附源码)
上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图,就比如文章下图的心形纹理贴图,以及纹理的平移、旋转、放大缩小功能。原创 2024-08-27 07:16:45 · 1104 阅读 · 19 评论 -
C++和OpenGL实现3D游戏编程【连载7】——文字和汉字的显示(附源码)
上一节我们讨论了纹理在二维平面内不规则图形贴图的相关基础操作,本节我们开始了解游戏里文字以及汉字的显示方法。本节课我们将从基本的ASCII字符显示,拓展到中文字符的显示,最后再讲到纹理字符的显示,并对各种文字显示方法的优缺点和使用场景进行分析,这节课将使用到显示列表、兼容视图、屏幕图形转纹理等操作。原创 2024-09-01 06:20:24 · 1238 阅读 · 23 评论 -
C++和OpenGL实现3D游戏编程【连载8】——纹理文字实现与优化(附源码)
上一节课我们介绍了在opengl中文字的显示方法,但显示出来的文字无法旋转,在某些特定游戏要求下,文字是需要进行旋转的,那么这一节课我们介绍一下纹理文字的高级使用方法,将文字生成纹理,达到文字旋转的效果。原创 2024-09-06 15:45:46 · 698 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载9】——纹理的镂空显示(附源码)
前面的课程中,我们学会了加载纹理并显示纹理图案,但是纹理的图案都是长方形的图片,图片就会有白色或黑色背景,那么在游戏设计过程中,我们经常不需要显示图片的背景部分,那么这节课我们就来讨论一下如何实现剔除白色或黑色背景后的镂空图像,下图就是将树的图片白色背景去除后显示的效果。原创 2024-09-19 15:46:21 · 291 阅读 · 17 评论 -
C++和OpenGL实现3D游戏编程【连载10】——纹理的半透明显示(附源码)
上一节课我们讲到了图片的镂空显示,它能在显示图片时去除指定颜色的背景,那么这节课我们来说一下图片的半透明显示效果,半透明效果能给画面带来更高质量的提升,使图片显示的更自然,产生更真实的效果。下面是一个气泡向上漂浮的效果。原创 2024-09-22 19:16:57 · 739 阅读 · 8 评论 -
C++和OpenGL实现3D游戏编程【连载11】——光照效果进阶(附源码)
其次,对于有纹理的物体表面,我们需要设置纹理和光线的融合效果,简单的理解就是光照和纹理需要进行合成处理,还好再没有Shader(着色器)处理以前, 这部分内容非常的简单,系统提供了一种简单的融合方式,一行代码的就可以搞定,当然这样牺牲了融合的自由度,如果有更深层次的需求,我们将在后期Shader中详细讨论。通过以上设置,我们发现它跟光源里的很多属性是相似的,其实一个物体的环境光,漫反射,镜面反射等效果,不仅仅取决于光源设置,还取决于自身的材质设置,在他们两个的共同影响下,产生了我们眼中物体光照的效果。原创 2024-09-24 08:23:02 · 881 阅读 · 12 评论 -
C++和OpenGL实现3D游戏编程【连载12】——游戏中音效的使用
前面我们实现了图片纹理的显示功能,是不是感觉到非常的简单。那么今天我们就继续说下游戏声音的实现。音效也是游戏的灵魂,只有搭配了美妙动听的音效以后,游戏才能令人耳目一新,与玩家产生良好的效果。原创 2024-10-01 09:01:41 · 766 阅读 · 11 评论 -
C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解(附源码)
OpenGL 的纹理组合器可以控制多重纹理的片段是如何组合的,比如自定义两个纹理的显示权重,给程序员更多自定义融合的选择。纹理组合器提供了一个新的纹理环境 GL_COMBINE允许我们控制每一个纹理单元的纹理片段是如何组合的,达到自定义生成多种不同的纹理组合方式的效果。第一步, 启用文理融合模式第二步,赋值纹理融合函数参数纹理组合器是通过 glTexEnv函数来确定具体的控制方式的。我们需要设置使用哪个纹理组合器的函数。原创 2024-10-03 10:55:32 · 832 阅读 · 12 评论 -
C++和OpenGL实现3D游戏编程【连载14】——VBO、VAO和EBO应用(附源码)
我们从一开始学OpenGL到现在,OpenGL的图形绘图必须在glBegin()和glEnd()函数之间完成,在此基础之上,才能进行后续操作功能。但是我们今天要讨论一下OpenGL图形绘制的模式,从之前的立即渲染模式,开始转向核心模式,从而大幅提升显示性能。下图就是通过VBO、VAO和EBO应用画出的一个矩形,矩形虽然简单,但它的意义却不凡。原创 2024-10-11 09:00:00 · 602 阅读 · 13 评论 -
C++和OpenGL实现3D游戏编程【连载15】——着色器初步(附源码)
OpenGL着色器(Shader)是用着色器语言(OpenGL Shading Language, GLSL)写的,是一种在图形渲染管线中用于执行特定渲染计算的小程序。当今大多数显卡都有成千上万的小处理核心,我们可以简单的把这些小处理核心在进行图形渲染过程中运行的各阶段统称为一个个管线。着色器是为每一个渲染管线的各个阶段运行的独立的小程序,能在图形渲染管线中快速处理数据。那我们来深入了解一下图形渲染的基本过程和可编程渲染管线的概念。原创 2024-10-14 07:09:38 · 941 阅读 · 22 评论 -
C++和OpenGL实现3D游戏编程【连载16】——详解三维坐标转二维屏幕坐标(向量和矩阵操作实战)(附源码)
在上一课我们了解了着色器,了解了部分核心模式编程内容,从中接触到了线性代数中向量和矩阵相关知识,我们已经能够感受到向量和矩阵在OpenGL编程中的重要性。特别是后期用去了解融合、光照效果,构建自己的三维世界,都需要大量向量和矩阵的相关知识。本节会就一些线性代数的基础知识进行了解和应用,并实现三维坐标向二维屏幕坐标的转换,这是后期实现鼠标选中物体功能的铺垫。但本文并非对线性代数进行专业的介绍,而是学习计算机图形学必备知识的了解及实战应用。原创 2024-10-22 14:58:11 · 656 阅读 · 25 评论 -
C++和OpenGL实现3D游戏编程【连载17】——着色器进阶(附源码)
在前面着色器初步一节我们了解了着色器的一些初步知识,通过顶点着色器和片段着色器显示出了一个彩色的立方体。我们这节课就来了解一些在着色器中显示纹理等一系列实用操作,同时了解一些进阶的图像渲染技术,比如图像的灰度化处理,像游戏中灵魂状态下世界进行灰度化处理后的效果。使用GLSL渲染纹理是一种非常有用的技术,可以实现高效的图形处理和渲染,并且可以根据具体的应用场景和需求进行更复杂的渲染操作。原创 2024-11-04 08:08:26 · 431 阅读 · 16 评论 -
C++和OpenGL实现3D游戏编程【连载18】——加载OBJ三维模型(附源码)
以前我们加载过立方体木箱,立方体的顶点数据都是在程序运行时临时定义的。但后期如果模型数量增多,模型逐步复杂,我们就必须加载外部模型文件。这节课我们就先了解一下加载OBJ模型文件的方法,这样可以让编程和设计进行分工合作,极大丰富我们游戏效果,下边是我们通过OBJ文件加载的一个模型。原创 2024-11-16 16:08:14 · 550 阅读 · 0 评论 -
C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)
我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照下定向光(directionallight)的使用,光照包括环境光、漫反射光和镜面反射光,在下边这个例子中,我们可以直观地感受到这些光效以及最终合成的效果。原创 2024-12-31 14:57:39 · 621 阅读 · 20 评论 -
C++和OpenGL实现3D游戏编程【连载20】——游戏基类Object的构建(附源码)
前面的章节中我们已经介绍了OpenGL中的一些基本操作,但都是一些各自独立的知识或代码。我们在游戏设计时,需要设计一个游戏的框架,能够有效的管理或组织各个游戏元素,来体现我们的设计思路和游戏流程,我们就需要从Object基类开始,深入的思考并抽象出一种游戏逻辑,达到我们的需求。原创 2025-01-06 10:11:10 · 272 阅读 · 11 评论 -
C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现
上节课我们已经创建了一个基础Object类,以后所有的游戏元素都可以从这个基类中派生出来。同时为了操作方便,我们可以为任意两个Object类(及其派生类)的实例对象添加一种父子关系,后期通过父物体与子物体关系,能够轻松的实现游戏物体的操控,方便我们在游戏中对所有游戏元素的组织和管理。再比如后期加父子关系后,就可以同步控制父子物体在三维空间的位置、旋转和缩放操作。原创 2024-08-17 07:45:30 · 513 阅读 · 1 评论 -
C++和OpenGL实现3D游戏编程【连载22】——父物体和子物体的消息处理机制
上一节我们了解了父子物体结构模式,方便我们快捷、控制游戏元素。这一节我们去了解怎样通过父子模式去处理系统消息,系统消息是我们和游戏之间互动的纽带,确定了游戏的用户体验。同时我们还将添加一些预制体,比如说立方体、球体、锥体、胶囊体等,方便我们今后的操作。另外我们此前的模型加载的较为单调,而且我们将加入一些游戏的模型元素,这个视频加载了各式各样的树木,构造出一个奇幻的森林雏形。原创 2025-02-05 08:32:40 · 241 阅读 · 5 评论 -
C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过显示法线的方式找到问题的原因所在。但在后期我们游戏元素逐步增多时,每个都重新到Blender软件中去查看会增加游戏调试的复杂度和难度,我们这节课就来了解一下法线可视化问题,同时学习一下几何着色器知识。原创 2025-02-24 21:06:01 · 1402 阅读 · 17 评论 -
C++消灭星星游戏编程【目录】
欢迎来到zhooyu的专栏。特色:【保姆级教程,含每一课程源码】致力于用最简洁的语言,最简单的方式,最易懂的知识,带大家享受编程的快乐。消灭星星游戏编程演示效果消灭星星游戏编程演示效果本专栏内容:消灭星星的小游戏保姆教程(含每一课教程源码),我们要用C++编写一个消灭星星的小游戏。这里我们要说一下这个小游戏,消灭星星,大家此前肯定都玩过手机版的,这个游戏当年非常的火,大街小巷都在玩。原创 2024-10-08 09:15:51 · 1178 阅读 · 21 评论 -
消灭星星游戏程序设计【连载一】——游戏窗口的创建
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-20 15:52:28 · 1140 阅读 · 3 评论 -
消灭星星游戏程序设计【连载二】——文字和图片的显示
C++消灭星星游戏编程设计、课设、毕设。那么一个游戏创建窗口才是设计的第一步,要想让这个游戏变得吸引人,变得好玩,我们少不了要添加很多游戏因素。比如说,游戏程序中需要有直观的数字文字显示,漂亮的游戏贴图,漂亮的游戏按键,多样的游戏窗口等等。有了这些游戏要素,游戏才能与玩家产生良好的互动效果,才能让玩家感兴趣。今天我们会将上次左边的黑白窗口变成右图图文并茂的彩色效果。原创 2024-07-21 00:59:43 · 823 阅读 · 0 评论 -
消灭星星游戏程序设计【连载三】——游戏音乐的播放
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-22 11:54:58 · 969 阅读 · 1 评论 -
消灭星星游戏程序设计【连载四】——图片的移动
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-23 18:33:15 · 936 阅读 · 1 评论 -
消灭星星游戏程序设计【连载五】——添加游戏按键
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-24 14:41:42 · 1088 阅读 · 1 评论 -
消灭星星游戏程序设计【连载六】——游戏页面的切换
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-26 11:57:53 · 1065 阅读 · 0 评论 -
消灭星星游戏程序设计【连载七】——按键的动画效果
前一段时间呢,我用VC做了一个消灭星星的一个小游戏。最近正好有时间,就准备发一个关于消灭星星的游戏设计思路,帮着大家梳理一下怎样用C++去开发一个小的游戏,能够根据自己的想法去把有些游戏的内容实现出来,特别是帮助一些游戏编程感兴趣的朋友,更快的上手C++编写游戏。原创 2024-07-27 18:27:00 · 1440 阅读 · 0 评论 -
消灭星星游戏程序设计【连载八】——爆炸散开效果的小星星
由于我们已经增加了垂直向下的加速度,因此,小星星最终会向下移动落出屏幕范围,我们只需用在小星星自动运行消息处理函数OnTimer中,添加当小星星超出屏幕下边框后失效的检测,重新标记为失效状态,就可以回收小星星资源,待后期继续循环使用。这里我们要提到一个rand()的随机函数,如果直接用这个函数,产生的是一个伪随机数,我们需要给他产生一个随机的种子,这样他就可以产生一个真随机的整型变量。原创 2024-07-30 16:59:27 · 1391 阅读 · 0 评论 -
消灭星星游戏程序设计【连载九】——小星星的音效处理
消灭星星游戏程序设计【连载九】——小星星的音效处理大家每次都可以在页面中下载本节内容的实现代码,一步一步从简单开始,逐步完成游戏的各种功能,如果大家有任何问题也欢迎留言交流。原创 2024-08-01 16:26:20 · 484 阅读 · 1 评论 -
消灭星星游戏程序设计【连载十】——小星星的残影轨迹
消灭星星游戏程序设计【连载十】——小星星的残影轨迹大家每次都可以在页面中下载本节内容的实现代码,一步一步从简单开始,逐步完成游戏的各种功能,如果大家有任何问题也欢迎留言交流。原创 2024-08-04 17:25:34 · 919 阅读 · 0 评论 -
逆波兰算法详解及应用(计算数学表达式)
要用C++实现一个计算器的小程序,就要使用逆波兰算法,能够根据当前用户输入的算式表达式字符串,计算出所要的结果,算式字符串可以包括加、减、乘、除和括号。原创 2024-12-09 19:01:11 · 766 阅读 · 21 评论