游戏循环:

初始化:运行一些主要的初始化操作,如内存分配,资源获取。从磁盘载入数据等。

进入游戏循环:进入主游戏循环。用户不断地运行动作,知道退出主循环为止。

读取玩家输入:处理玩家输入,或将其存储到缓存区中,供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游戏引擎〇 開始的更多相关文章

  1. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  2. 排名前10的H5、Js 3D游戏引擎和框架

    由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...

  3. 棒!使用.NET Core构建3D游戏引擎

    原文地址:https://mellinoe.wordpress.com/2017/01/18/net-core-game-engine/ 作者:ERIC MELLINO 翻译:杨晓东(Savorboa ...

  4. Java 3D游戏引擎——JME(java Monkey Engine)

    转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...

  5. 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!

    喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课,让您度过一个充实的暑假~ 參与本次公开课,即有机会获得50C币! 答疑公开课时间:7月18日 晚7:30-9 ...

  6. 【直播预告】7月25日3D游戏引擎免费公开课答疑第三期,有奖问答!

    喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课.让您度过一个充实的暑假~ 參与本次公开课,进行有奖问答.即有机会获奖. 答疑公开课时间:7月25日 晚7:3 ...

  7. 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录

    3D游戏引擎设计  实时计算机图形学的应用方法  第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...

  8. 3D游戏引擎一 win32编程

    Windows程序一般都等待用户进行一些操作,然后响应并採取行动. 一般来说.对win32的程序的操作都会转换为系统事件队列中的消息,如按键消息WM_KEYDOWN,WM_MOUSECLICK等传递键 ...

  9. 基于Java的开源3D游戏引擎jMonkeyEngine

    jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...

随机推荐

  1. 经常使用的 WEB server

    对于刚開始学习的人来说,或许自己能够写出一些简单的演示样例DEMO,但却纠结于不知道应该怎样才干訪问自己的页面,这里进行了一些简单的WEBserver总结.便于新朋友配置使用 静态HTML页面 对于静 ...

  2. 操作系统CPU调度知识点

    1.进程基本概念:进程是程序的一次运行. 是系统进程资源分配和调度的基本单位. 2.进程三态:运行状态.就绪状态.堵塞状态.三态转换规则,就绪状态的进程因为调度进程运行状态,运行状态因为时间片用完而进 ...

  3. HTML-HTML5+CSS3权威指南阅读(四、媒体查询)

    1.媒体类型 HTML 4和CSS 2目前支持为不同的媒体类型设定专有的样式表, 比如, 一个页面在屏幕上显示时使用无衬线字体, 而在打印时则使用衬线字体, screen 和 print 是两种已定义 ...

  4. CentOS7关闭默认防火墙启用iptables防火墙

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤. 1.关闭firewall: systemctl stop firewalld.service #停止f ...

  5. python ---用户输入

    范例1:我们希望整数(整数),这就是为什么我们使用int()函数. x = int(raw_input("Enter x:")) y = int(raw_input("E ...

  6. ANSI实现动态 sql

    /* 包含C头文件 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* 包含SQLCA ...

  7. Java并发编程(三):并发模拟(工具和Java代码介绍)

    并发模拟工具介绍 ① Postman : Http请求模拟工具 从图上我们可以看出,Postman模拟并发其实是分两步进行操作的.第一步:左边的窗口,在窗口中设置相关接口以及参数,点击运行进行第二步. ...

  8. HDU 1978 How many ways DP问题

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. strncmp----c++库函数

    某天,蒜头君和花椰妹在公园里散步,走着走着,我的天!他们各自都捡到了一串漂亮的字符串,然而蒜头君好奇心比较重,他想知道自己的字符串在花椰妹的字符串中出现了多少次,例如花椰妹的字符串为abababa,蒜 ...

  10. libubox-blob/blobmsg

    大部分内容来自libubox [3] - BLOB BLOGMSG,推荐阅读原文. blob提供二进制数据处理能力.有几种支持的数据类型,并可以创建块数据在socket上发送.整型数字会在libubo ...