3D游戏引擎〇 開始
游戏循环:
初始化:运行一些主要的初始化操作,如内存分配,资源获取。从磁盘载入数据等。
进入游戏循环:进入主游戏循环。用户不断地运行动作,知道退出主循环为止。
读取玩家输入:处理玩家输入,或将其存储到缓存区中,供AI和游戏逻辑使用。
运行AI和游戏逻辑:这部分为游戏代码的主体部分。将运行AI,物理系统,和通用系统逻辑。并依据结果在屏幕上绘制下一帧。
渲染下一帧:首先游戏绘制的下一帧图像在离频offscreen缓存中绘制,然后进行一系列的渲染。在基于3D软件的引擎中,由一个很复杂的3D图形流水线来进行渲染构成世界的无数多边形。而在基于OpenGL或Direct3D的3D硬件加速引擎中。大部分工作有硬件来承担。
同步显示:控制固定帧率,30帧为可接收的最小值,60帧为最大值。一般通过一些定时函数或等待函数来同步游戏到某个最大帧频。
循环。
大型游戏是一种超高性能计算机程序,为了效率。关键代码部分不会去使用高级API。一般来说,必须编写与游戏代码内部循环有关的一切内容,否则游戏达不到须要的速度和性能。
如使用memset()函数。这个函数相当快。但事实上进行单字节填充,而一般使用的都是4字节或8字节的基础数据类型组成内存结构。所以通常会使用四字节填充或者很多其它。效率也会提高非常多,如以下实现的一次写入4字节的函数,为内联汇编语言函数,进一步提高效率:
inline void Memset_QUAD(void *dest,UINT data,int count){
//每次填充4字节 32位
_asm
{
mov edi,dest;
mov ecx,count;
mov eax,data;
rep stosd;
}//汇编代码使一些时间关键代码部分和内存关键代码部分的效率大幅提升,以后有空还是要研究一下汇编的。 }
这段代码是32位的汇编代码。如今CPU都是64位的为了效率应该使用64位的汇编代码。
而对于DirectX中的API还是值得信任的,DirectX是作为一种高性能API编写的。其效率是有保证的,一般要避免Win32 API的高级函数的使用。
一些技巧须要注意的地方:
对所做工作进行备份。编写游戏代码非常easy让系统锁死。进行辈备份是必要的。
開始游戏项目时。须要进行良好的组织。项目中使用合理的文件名和文件夹名称。使用一致的变量命名规则。尽可能使用单独的文件夹存储图形和声音数据。而不是将全部内容放到一个文件夹中。
使用内联函数。使用inline来避免函数调用,加快程序速度。这会将程序变大。但对于游戏来说速度更重要。
尽可能使用32位变量而不是8位或16位,如今是尽量使用64位变量,由于如今的CPU都是64位而不是32位。而对于小于64位的数据,会由快速缓存和其它相关的内存寻址操作。导致速度变慢。
不要害怕使用全局变量:很多游戏在对于时间有严格要求的函数中都不使用參数,而是简单地使用全局參数。參数的出栈入栈会造成较高的消耗。而全局变量一定要使用较好的命名规则。且注意安全。
以RISC精简指令集计算机方式进行编程。(精简指令集通过精简指令使计算机系统的复杂操作由硬件交给软件实现,而实现系统的更加高效)而这样做的详细做法就是 不要写复杂的语句,因为CPU中处理这些复杂语句耗费很多其它,而使用多句简单语句来取代复杂语句。
多使用位运算来替代乘除。以及熟练使用异或。
编写高效的算法,尽管汇编能够提高O(n)的算法的速度,但对于O(n*n)没有效果。最重要的还是从算法入手,来提高效率。
不要在编写代码过程中优化代码。代码编写中,忍不住想去优化之前的代码,但这是浪费时间。与其分心与与当前任务无关的代码。不如更快的将如今的任务完毕。然后再进行细致的优化。
慎用C++。
尤其是C++中的多继承。
假设你发现当前採取的路线非常困难。立即停止,进行备份。然后想办法绕过困难。犯一个错误,并又一次编写1000行代码,要比採用一个不好的编码结构强得多。
代码的可扩展性。可维护性和结构美丽是非常重要的一件事。
对于简单对象,不要编写复杂的数据结构。游戏编程中90%的工作是数据操作。要使数据操作更简单高效是极其重要的。
3D游戏引擎〇 開始的更多相关文章
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
- 排名前10的H5、Js 3D游戏引擎和框架
由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...
- 棒!使用.NET Core构建3D游戏引擎
原文地址:https://mellinoe.wordpress.com/2017/01/18/net-core-game-engine/ 作者:ERIC MELLINO 翻译:杨晓东(Savorboa ...
- Java 3D游戏引擎——JME(java Monkey Engine)
转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...
- 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!
喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课,让您度过一个充实的暑假~ 參与本次公开课,即有机会获得50C币! 答疑公开课时间:7月18日 晚7:30-9 ...
- 【直播预告】7月25日3D游戏引擎免费公开课答疑第三期,有奖问答!
喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课.让您度过一个充实的暑假~ 參与本次公开课,进行有奖问答.即有机会获奖. 答疑公开课时间:7月25日 晚7:3 ...
- 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录
3D游戏引擎设计 实时计算机图形学的应用方法 第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...
- 3D游戏引擎一 win32编程
Windows程序一般都等待用户进行一些操作,然后响应并採取行动. 一般来说.对win32的程序的操作都会转换为系统事件队列中的消息,如按键消息WM_KEYDOWN,WM_MOUSECLICK等传递键 ...
- 基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...
随机推荐
- 【OpenGL基础篇】——使用面向对象方法封装OpenGL函数(二)
今天封装了一个Line类.负责在昨天写的窗体上绘制线条. OpenGL画图是通过给glBegin函数设置參数达成的,绘制线条有三个不同的參数: GL_LINES : 绘制连接两个点的线段(绘制的端点位 ...
- 学会Git玩转Github笔记(三)—— Github Pages 搭建个人网站
https://help.github.com/categories/github-pages-basics/ 一.个人站点 访问 https://用户名.github.io 搭建步骤 1) 创建个人 ...
- @Resource或者@Autowired作用/Spring中@Autowired注解、@Resource注解的区别
@Resource或者@Autowired作用不用写set get就能注入,当然,前提是你已经开启了注解功能. spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...
- sql server删除数据时如何进行级联删除
可以在创建外键约束时直接设置级联删除
- apache设置头
Apache 及开启压缩及Header信息隐藏:http://centilinux.blog.51cto.com/1454781/792820
- 关于Tomcat 开启不了的几点解释
这段时间基本熟悉java语言基本语法包,类(内部,外部),整体结构跟c#还是有点差异,在接口,多态,抽象等几乎一致,唯一差异仅存在于关键字上. 在用了几天记事本熟悉代码上,昨天晚上就准备转想myEcl ...
- 配置taglib的uri的2种方法
推荐方法1 1.把uri写在tld文件中,tld放在WEB-INF文件夹下,例如: <short-name>就对应了你在jsp中引用的时候<%@ taglib prefix=&quo ...
- 跟着百度学PHP[15]-session回收机制
gc(Garbage Collection 垃圾回收) 在用户访问的时候会生成许多的临时session文件,顾名思义session回收机制就是用来删除这些临时文件的. session.gc_maxli ...
- go context 讲解
控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context,今天我就谈谈Context. 什么是WaitGroup WaitGroup以前我们在并发的时候介绍过,它是一种控制并发的 ...
- oozie搭建手册
环境准备 mave安装 1.下载并上传maven,然后解压 tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /home 2.配置环境变量 vi /etc/prof ...