3D游戏引擎开发心得(3)

3D游戏引擎系列二 笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云讲课视频网址:http://edu.youkuaiyun.com/lecturer/144 已经出版了一本《手把手教你架构3D游戏引擎》,主要目的是教会开发者如何自己封装代码,如何做游戏 阅读详情

这两天忙,没有更新进度,今天周日,要不上。

突然觉得我写的东西太自我为中心,应该把我的心得写的清楚点,让更多的人从中受益。

 

前两天遇到的问题,用四元数旋转世界矩阵的时候为什么要把四元数旋转矩阵乘在世界矩阵的前面呢?研究中…

 

未果。

 

说一下我的引擎现在能完成的功能吧。

它现在可以加载.x模型,进行输入处理,功能还不多。贴一下代码吧:

首先是D3D_Application.h 这个文件中包含ilangge类 CD3D_Settings 和

CD3D_Application。

CD3D_Settings可以根据Window Settings.ini控制屏幕分辨率、色深、是否全屏等。

CD3D_Application 是程序基础类,完成了基础D3D程序的创建,并声明了一系列虚函数,在子类CGame中实现。CGame累将在下面介绍。

代码这里不多说,有兴趣的朋友可以给我留言,我对您感兴趣的部分给出注释,并希望您提出宝贵意见。整个项目的源代码将随着进度陆续贴出。敬请关注。

 

#pragma once

#include "globle.h"

#include <d3d9.h>

#include <d3dx9.h>

 

//=====================================================================================

// 类名:CD3D_Settings

//

// 功能:d3d程序相关配置信息,如程序窗口宽高等

//=====================================================================================

class CD3D_Settings

{

private:

    bool            m_windowed;     // 是否是窗口模式

    int         m_wnd_width;        // 窗口宽度

    int         m_wnd_height;   // 窗口高度

    int         m_wnd_bpp;      // 窗口位宽

    int         m_refresh_rate; // 显示器刷新率

    TCHAR       *m_wnd_name;        // 窗口标题

    CIni        ini;                    // ini配置文件

 

private:

    //------------------------------------------------------------------

    // 私有成员函数

    //------------------------------------------------------------------

    void    Get_Settings_From_Ini(void);

    void    Set_Default(void);

 

public:

    //------------------------------------------------------------------

    // 构造函数和析构函数

    //------------------------------------------------------------------

    CD3D_Settings(void);

    ~CD3D_Settings(void);

 

public:

    //------------------------------------------------------------------

    // 自定义成员函数

    //------------------------------------------------------------------

    const   TCHAR* Get_Wnd_Name(void) const { return    m_wnd_name; }

    int     Get_Wnd_Width(void) const       { return    m_wnd_width; }

    int     Get_Wnd_Height(void) const      { return    m_wnd_height; }

    int     Get_Wnd_Bpp(void) const         { return    m_wnd_bpp; }

    int     Get_Refresh_Rate(void) const    { return    m_refresh_rate; }

    bool   Get_Windowed(void) const          { return    m_windowed; }

};

 

 

//=====================================================================================

// 类名:CD3D_Application

//

// 功能:d3d应用程序框架

//=====================================================================================

class CD3D_Application

{

public:

    //------------------------------------------------------------------

    // 构造函数和析构函数

    //------------------------------------------------------------------

    CD3D_Application();

    ~CD3D_Application();

 

public:

    //------------------------------------------------------------------

    // 公共方法

    //------------------------------------------------------------------

    bool        Init(void);

    void        Run(void);

    HRESULT     Create( HINSTANCE hinst );

   

    virtual LRESULT     Msg_Proc( HWND h_wnd, UINT msg, WPARAM wparam, LPARAM lparam );

   

 

protected:

    //------------------------------------------------------------------

    // 不需要用户重写的保护方法

    //------------------------------------------------------------------

    void        Cleanup(void);

    HRESULT     Render_3D_Environment(void);

   

 

    //------------------------------------------------------------------

    // 程序状态变量

    //------------------------------------------------------------------

    bool        m_device_lost;              // 是否丢失设备

    bool        m_minimized;                    // 是否最小化

    bool        m_maximized;                    // 是否最大化

    bool        m_active;                   // 程序是否是激活状态

    bool        m_ended;                        // 程序结束

    bool        m_pause;                        // 程序是否暂停

    int     m_fps;                      // FPS

    CD3D_Settings   m_settings;         // D3D程序配置信息

    //-------------------------------------------------------------------

    // 程序相关

    //-------------------------------------------------------------------

    HWND        m_wnd;                          // 程序窗口句柄

    HINSTANCE   m_instance;                 // 程序句柄

   

    D3DCAPS9            m_dev_caps;             // d3d device 设备能力

    LPDIRECT3D9         m_d3d;              // direct3d 对象

    LPDIRECT3DDEVICE9   m_d3d_device;       // direct3d device 对象

    D3DPRESENT_PARAMETERS   m_d3dpp;            // d3d设备描述

 

 

    //-------------------------------------------------------------------

    // 需要用户重写的虚函数

    //-------------------------------------------------------------------

    virtual HRESULT     On_Create_Normal_Objects(void)      { return S_OK; }

    virtual HRESULT     On_Create_Device_Objects(void)      { return S_OK; }

    virtual HRESULT     On_Destroy_Objects(void)                { return S_OK; }

    virtual HRESULT     On_Lost_Device(void)                    { return S_OK; }

    virtual HRESULT     On_Reset_Device(void)               { return S_OK; }

    virtual HRESULT     On_Input_Deal(void)                 { return S_OK; }

    virtual HRESULT     On_Frame_Move(void)                 { return S_OK; }

    virtual HRESULT     On_Frame_Render(void)               { return S_OK; }

    virtual HRESULT     On_Final_Cleanup(void)              { return S_OK; }

};

 

 

 

// 供DirectX用全局宏////////////////////////////////////////////////////////////////

#define SAFE_RELEASE(p)/

{/

    if( NULL != p )/

    {/

        p->Release();/

        p       = NULL;/

    }/

}

 

 
吴涛作品介绍-易语言和VOLCANO 3D游戏引擎 易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。VOLCANO是一款MMORPG(大型多人在线角色扮演)3D网络游戏的开发引擎,用作支持用户快速并简单地开发具有真实游戏环境和丰富游戏玩点的游戏。 阅读详情

相关推荐

C++游戏引擎开发

C++游戏引擎开发

qq_43747700的博客 7748

学习unity心得

通过学习Unity,我不仅掌握了一门流行的游戏开发工具,还培养了解决问题的能力和团队协作的技巧。Unity为我打开了游戏开发的大门,我将继续追求创新和进步,不断挑战自己,创造出更加引人入胜的游戏作品。掌握C#是理解和利用Unity强大功能的关键,而通过实践编写代码,我在逻辑思维和问题解决方面有了显著的提升。我学习了游戏循环、难度平衡和用户反馈等方面的知识,并通过不断优化代码和资源,使游戏在各种平台上运行更加高效。我通过掌握Unity的UI系统,设计了游戏中的菜单、按钮和提示框等元素,提升了用户体验。

z124782的博客 642

四大开源3d游戏引擎探究

XreaL项目是基于Quake 3 Arena修改版引擎的非商业多人射击游戏,目标是在渲染技术上能与当今的商业游戏一较高下,开发者声称它是当前最先进的开源游戏引擎。根据Phoronix的介绍: XreaL引擎在Quake 3 Arena基础上改变了很多,它是基于Quake引擎中唯一使用OpenGL着色语言(GLSL)渲染器的,目前支持OpenGL 2.0 ES规格,但开发者已瞄准了新的OpenGL

水上漂的专栏 3万+

【转贴】DXUT 框架入门 1

CD3DApplication 框架类已经光荣的退役了,取而代之的是DXUT*系列函数。在这篇文章中将要简单介绍DXUT框架的应用。 最近的directx 下载地址 , 这里面包含了64位操作系统库以及directx10等等,directx10 的程序例子只能运行在windows vista 上面。尽管可以编译,但缺少directx3d10 运行库. 在安装sdk之后,别忘记安装Redist...

weixin_34389926的博客 172

3D游戏引擎系列三

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云课程视频网址:http://edu.youkuaiyun.com/lecturer/144 笔者以前在游戏论坛担任过技术版主,以及在51CTO教育网,优快云教育网,泰课在线等教育网站担

海洋个人博客 5350

基于LWJGL 2.9.3的3D游戏引擎开发实战

在当今快速发展的游戏产业中,游戏引擎是开发3D游戏不可或缺的核心组件。它为开发者提供了丰富的功能,从图形渲染、物理模拟到音频处理,以及网络编程等,极大地简化了复杂游戏开发过程。LWJGL(Lightweight Java Game Library)是一个开源的Java库,它提供了一套与原生C库绑定的接口,从而让Java程序能够访问OpenGL、OpenAL和OpenCL等高性能的多媒体API。LWJGL的设计初衷是为了给游戏开发者提供一个没有多余抽象层的轻量级API,以此实现接近硬件级别的调用效率。

weixin_34392511的博客 966

游戏开发心得——书籍篇——《游戏引擎框架》-专业工具

游戏开发心得——书籍篇——《游戏引擎框架》-专业工具 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 学习《游戏引擎框架》并总结出属于自己的知识,诸君共勉之! 内容: 本章主要探讨大部分专业游戏工程师们所采用的工具,在各类软件工程中,游戏开发是要求最高、覆盖面最广之一。这本书的作者希望每个游戏开发者们不要完全忽视这些内容,可以让读者多学到一...

whl970831的博客 1178

Unity3D引擎使用心得

Unity3D引擎使用心得,讲述unity3D的整体优势和劣势

第二章Direct 3D程序的Windows程序代码

 2. Direct 3D程序的Windows程序代码Microsoft Direct3D的程序可以设计成只在全屏幕模式或窗口模式下执行-或者是在二者下皆可执行。当处于全屏幕模式下时,程序会接管整个屏幕,这也是比较普及的作法(基于许多理由)。它可以让您的程序选择切换屏幕分辨率及色板层次,以便在硬件上有最好的表现。它也可以提供使用者较好的体验,因为它也允许切换绘图页并且不需要更新其它程序的图

水上漂的专栏 1880

5-DOF机械臂课程设计(一)之正逆运动学

文章目录基本要求基本概念关节坐标系的建立正运动学求解DH参数表的建立逆运动学求解多解下解的选取源码下载后续 基本要求 ​ 开发上位机程序,要求有良好的界面,能提供关节空间下和笛卡尔坐 标下表示的目标位姿点和中间若干经过点的输入功能,进行轨迹规划, 并控制机械臂沿轨迹运动,最终完成目标抓取的任务。 基本概念 连杆长度 :2个相邻关节轴线之间的距离 连杆扭角 :2个相邻关节轴线之间的角度 连杆偏距 :2个关节坐标系的X轴之间的距离 关节角度 :关节变量 计算时需要加初始角度偏移 关节坐标系的建立 ​ 根据《机

Rosen的博客 5855

川崎机器人 AS语言基础运动指令表

    功能简介 动作方式 参考坐标系 位置特性 X,Y,Z 角度特性 O,A,T 指令格式(距离单位毫米,时间单位秒,角度单位度 示例1 示例2 运 动 指 令 JMOVE 以关节移动到目标点 关节移动方式 基础坐标系 不受控 伪随机动作 JMOVE 目标点 JMOVE #yd JMOVE put1 LMOVE 以直线移动到目标点 直线移动方式

喜欢自学并分享经验的技术宅 9350

G3N 3D游戏引擎终极入门指南:从零到3D应用开发

G3N是一个基于Go语言开发的现代化3D游戏引擎,它不仅能够创建令人惊叹的3D游戏,还能用于开发交互式3D应用和可视化工具。借助Go语言的高效性能和跨平台特性,G3N让3D开发变得前所未有的简单和高效。 ## 🚀 快速上手:构建你的第一个3D场景 ### 环境准备与项目初始化 首先确保你的系统已经安装了Go 1.8或更高版本。然后通过以下步骤开始你的G3N之旅: ```go // 克隆项

gitblog_01159的博客 807

Ubuntu单系统安装全攻略:从删除Windows到UEFI引导设置(避坑指南)

本文提供Ubuntu单系统安装的完整指南,涵盖从安全删除Windows系统到UEFI引导设置的详细步骤。通过专业工具准备、分区方案设计、引导加载器配置等关键环节,帮助用户避免常见安装问题,实现纯净高效的Ubuntu单系统环境。特别强调UEFI引导的深度配置与安装后的性能优化,适合希望彻底转向Linux的用户。

weixin_29210727的博客 409

C3DE 3D游戏引擎使用教程

C3DE 3D游戏引擎使用教程 1、项目介绍 C3DE(Cool 3D Engine)是一个基于MonoGame框架的3D游戏引擎。该项目旨在提供一个现代化的“车库游戏开发工具”所需的所有功能。C3DE支持多种渲染技术,包括前向渲染、光照预通道渲染和延迟渲染,并且还支持虚拟现实(VR)。 主要特性 组件化设计:易于扩展和定制。 3D模型支持:支持自定义网格几何。 地形生成:支持平面、随机和高度图...

gitblog_00676的博客 1368

从SAR信号到洪涝地图:基于Sentinel-1数据的水体快速提取实战

本文详细介绍了如何利用Sentinel-1 SAR数据快速提取水体信息并生成洪涝地图的实战方法。通过预处理五部曲和SDWI指数计算,结合具体案例展示了SAR技术在洪涝灾害应急监测中的高效性和准确性,为救援决策提供关键支持。

weixin_29201313的博客 461

芒果YOLO11改进44:主干Backbone篇之MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

包括YOLOv5、YOLOv7、YOLOv8等模型改进 370

Viry3D 开源游戏引擎教程

Viry3D 开源游戏引擎教程 1. 项目介绍 Viry3D 是一个跨平台的 2D 和 3D 游戏引擎,使用 C++ 编写。它支持多种平台,包括 Android、iOS、macOS、Windows、UWP(Windows 通用平台)以及 Web(基于 WebAssembly)。Viry3D 提供了丰富的功能,包括 Mesh 渲染、动画、UI、输入处理、音频等,适用于开发各种类型的游戏和应用。 2....

gitblog_00294的博客 1480

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

随着新零售概念的兴起,无人零售柜、智能零售店等新型零售模式快速发展。传统零售柜依赖于人工盘点和补货,效率低下且成本高昂。本文提出了一种基于YOLO系列目标检测算法的零售柜商品检测系统,实现了对零售柜内商品的自动识别、计数和库存管理。系统采用PySide6开发用户界面,集成了YOLOv5、YOLOv6、YOLOv7和YOLOv8等多种先进的深度学习模型,提供了完整的训练和推理流程。本文将详细介绍系统设计、算法实现、数据集构建和实际应用效果,并提供完整的代码实现。

YOLO 333

3D游戏引擎剖析

原文作者:Jake Simpson 译者: 向海 Email:GameWorldChina@myway.com  第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍   自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景

每天提高一点点 4373

005、开关电源中的基本拓扑结构简介

本文介绍了开关电源设计中常见拓扑结构的特性与选型经验。文章从实际炸机案例入手,强调深入理解拓扑的重要性,详细分析了Buck、Boost、Buck-Boost等非隔离拓扑以及反激、正激、半桥、全桥、LLC等隔离拓扑的工作原理、设计要点和典型误区,重点指出各拓扑的电压/电流应力、效率瓶颈和常见设计错误。作者根据多年经验总结出不同功率等级和输入输出条件下的拓扑选型原则,并强调细节设计对成败的决定性影响。文章通过大量工程实例说明,正确的拓扑选择和参数计算是电源设计成功的基础,而忽略基础原理将导致反复修改甚至炸机风险

Jack010169的博客 224

搞定ESD(九):静电放电之PCB设计

不同信号参考地平面应尽量保持完整,减小静电电流流过参考地平面时造成的电位差,防止电位差导致的信号传输电平错误.主芯片GPIO信号布线应保持最短化,减小与参考地平面之间的电场耦合,同时也防止因信号环路面积较大耦合静电放电噪声干扰。外部端子接地引脚顶层采用分地设计,最好是直接过孔到完整参考地平面接地,避免与顶层信号包地、其它包地相连,防止顶层串扰耦合到其它信号,造成ESD问题。

记得诚 1951

G3N Go 3D游戏引擎快速上手指南

G3N是一个功能完整的Go语言3D游戏引擎,为开发者提供了创建跨平台3D应用程序的强大工具集: - **原生Go语言支持**:完全用Go编写,无需CGO依赖,享受Go的并发优势和简洁语法 - **现代图形技术**:基于OpenGL 3+,支持着色器、光照、材质等现代图形特性 - **3D空间音频**:集成OpenAL实现真实的3D音频效果 - **内置GUI框架**:提供完整的用户界面解决方案

gitblog_00642的博客 960

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

手把手教你架构3D游戏引擎高清PDF扫描版:深入浅出掌握游戏引擎开发

手把手教你架构3D游戏引擎高清PDF扫描版:深入浅出掌握游戏引擎开发 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《手把手教你架构3D游戏引擎》高清PDF扫描版,是一本专为游戏引擎开发爱好者打造的实战教程。作者姜雪伟以浅显易懂的语言,结合丰富的实例,详细介绍了3D游戏引擎的架构和开发过程,旨在帮助读者系统地掌握游戏引擎设计的基本原理和关键技术。 项目技术分析 本项目...

gitblog_06762的博客 1286

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

3DEngineCpp:用C++打造的3D游戏引擎

3DEngineCpp:用C++打造的3D游戏引擎 项目介绍 3DEngineCpp 是一个用C++编写的3D游戏引擎,旨在为开发者提供一个高效、灵活且易于扩展的3D渲染平台。无论你是游戏开发新手还是经验丰富的老手,3DEngineCpp 都能帮助你快速构建出令人惊叹的3D场景和游戏体验。 项目技术分析 核心技术栈 C++:作为底层编程语言,C++提供了高性能和低级别的内存控制,非常适合游戏引擎...

gitblog_00371的博客 720

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python 3.x 下的 3D 游戏引擎

在 Python 3.x 中,有几个比较流行的用于开发 3D 游戏的引擎和库。虽然 Python 自身不是一个主流的游戏开发语言,但是可以通过这些库和引擎结合其它语言或者底层渲染引擎来实现复杂的游戏开发。

weixin_44617651的博客 3560
上一篇: 3D游戏引擎开发心得
下一篇: 游戏脚本开发日志1
ID_WinMain
博客等级 码龄19年 10粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值