2013年9月22日星期日(准备工作:分离ddraw的math和interface)

2023-11-13

在之前,要进行下封装。

好吧,先加个类,ddraw_math类吧。顺便把ddraw引擎中的几个矩阵弄到ddraw_math类中来,让接口和数学相分离开。

 

头文件有这些

 

#pragma once

 

 

// a 2D vertex

typedef struct VERTEX2DI_TYP

        {

        int x,y; // the vertex

        } VERTEX2DI, *VERTEX2DI_PTR;

typedef struct VERTEX2DF_TYP

        {

        float x,y; // the vertex

        } VERTEX2DF, *VERTEX2DF_PTR;

 

// a 2D polygon

typedef struct POLYGON2D_TYP

        {

        int state;        // state of polygon

        int num_verts;    // number of vertices

        int x0,y0;        // position of center of polygon 

        int xv,yv;        // initial velocity

        DWORD color;      // could be index or PALETTENTRY

        VERTEX2DF *vlist; // pointer to vertex list

 

        } POLYGON2D, *POLYGON2D_PTR;

 

typedef struct MATRIX1X2_TYP

{

     union

     {

         float M[2];

         struct

         {

              float M00,  M01;

         };

     };

 

}MATRIX1X2, * MATRIX1X2_PTR;

 

typedef struct MATRIX1X3_TYP

{

     union

     {

         float M[3];

         struct

         {

              float M00,  M01, M02;

         };

     };

 

}MATRIX1X3, * MATRIX1X3_PTR;

 

typedef struct MATRIX3X2_TYP

{

     union

     {

         float M[3][2];

         struct

         {

              float M00, M01;

              float M10, M11;

              float M20, M21;

 

         };

 

     };

 

}MATRIX3X2, * MATRIX3X2_PTR;

 

 

typedef struct MATRIX3X3_TYP

{

     union

     {

         float M[3][3];

         struct

         {

              float M00, M01, M02;

              float M10, M11, M12;

              float M20, M21, M22;

 

         };

 

     };

 

}MATRIX3X3, * MATRIX3X3_PTR;

 

class ddraw_math

{

public:

     ddraw_math(void);

     ~ddraw_math(void);

 

private:

    

     float                            cos_look[360];

     float                            sin_look[360];

    

public:

 

     void                        Build_Sin_Cos_Tables( void );

     int                              Clip_Line( int & x1, int & y1, int &x2, int & y2 );

 

    

 

     void                        Draw_Bottom_Tri( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

     void                        Draw_Bottom_TriFP( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );       

     void                        Draw_Bottom_Tri16( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * _dest_buffer, int mempitch );

     int                              Draw_Clip_Line( int x0, int y0, int x1, int y1, int color, UCHAR * dest_buffer, int lpitch );

     int                              Draw_Clip_Line16( int x0, int y0, int x1, int y1, int color, UCHAR * dest_buffer, int lpitch );

 

     int                              Draw_Line( int x0, int y0, int x1, int y1, int color, UCHAR * vb_start, int lpitch );

     int                              Draw_Line16( int x0, int y0, int x1, int y1, int color, UCHAR * vb_start, int lpitch );

 

     int                              Draw_Polygon2D( POLYGON2D_PTR poly, UCHAR * vbuffer, int lpitch );

     int                              Draw_Polygon2D16( POLYGON2D_PTR poly, UCHAR * vbuffer, int lpitch );

 

    

     void                        Draw_QuadFP_2D(    int x0,int y0,int x1,int y1,

                                                        int x2,int y2,int x3, int y3,

                                                        int color,UCHAR *dest_buffer, int mempitch);

 

     void                        Draw_Top_Tri( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

     void                        Draw_Top_TriFP( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

     void                        Draw_Top_Tri16( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * _dest_buffer, int mempitch );

     void                        Draw_Triangle_2D( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

     void                        Draw_TriangleFP_2D( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

     void                        Draw_Triangle_2D16( int x1, int y1, int x2, int y2, int x3, int y3, int color, UCHAR * dest_buffer, int mempitch );

 

     int                              Mat_Init_3X2( MATRIX3X2_PTR ma, float m00, float m01, float m10, float m11, float m20, float m21 );

 

     int                              Mat_Mul1X2_3X2( MATRIX1X2_PTR ma, MATRIX3X2_PTR mb, MATRIX1X2_PTR mprod );

     int                              Mat_Mul1X3_3X3( MATRIX1X2_PTR ma, MATRIX3X2_PTR mb, MATRIX1X2_PTR mprod );

     int                              Mat_Mul3X3( MATRIX1X2_PTR ma, MATRIX3X2_PTR mb, MATRIX1X2_PTR mprod );

     void                        Mem_Set_WORD( void * dest, USHORT data, int count );

 

     int                              Rotate_Polygon2D(POLYGON2D_PTR poly, int theta);

     int                              Rotate_Polygon2D_Mat(POLYGON2D_PTR poly, int theta);

 

     int                              Scale_Polygon2D(POLYGON2D_PTR poly, float sx, float sy);

     int                              Scale_Polygon2D_Mat(POLYGON2D_PTR poly, float sx, float sy);

 

     int                              Translate_Polygon2D( POLYGON2D_PTR poly, int dx, int dy );

     int                              Translate_Polygon2D_Mat( POLYGON2D_PTR poly, int dx, int dy );

 

 

};

当然,现在其实也能提取出矩阵来,不过,不过目前还没有必要,所以先放在这里,然后移植成员函数,

 

由于还有些数据类型没定义,所以

#include common.h

再次编译,发现那些m_min_clip_x等,没有定义,原因是和显示部分的裁剪区发生了耦合,那只能再加上个函数,

 

void ddraw_math::setClipRect( RECT rect )

{

     m_min_clip_x                = rect.left;

     m_max_clip_x                = rect.right;

     m_min_clip_y                = rect.bottom;

     m_max_clip_y                = rect.right;

}

 

然后在DDRAW初始化时,传递过去即可,

可以再次验证下。是OK的。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2013年9月22日星期日(准备工作:分离ddraw的math和interface) 的相关文章

  • 分布式一致算法

    一 拜占庭将军问题 拜占庭将军问题 拜占庭派多支军队去围攻一个敌人 将军不确定军队中是否有叛徒 叛徒可能擅自变更进攻决定 至少一半以上的军队同时进攻才可以取胜 在这种状态下 拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商 从而就进
  • go 进阶 go-zero相关: 二. 服务启动与路由,中间件注册,请求接收底层原理

    目录 一 问题概述 二 底层源码分析 涉及到的一些结构体简介 初始化 中间件的预设置 路由注册与中间件的处理 启动服务到触发net http 接收请求的处理 三 总结 一 问题概述 了解go zero底层也是基于net http标准库实现h
  • 【树莓派】Linux内核编译

    树莓派 Linux内核编译 树莓派的Linux内核编译有两种方法 一种是在树莓派上直接编译 另一种是利用交叉编译的方法 一般我们都推荐采用交叉编译的方式进行编译 这是因为通常交叉编译Pi内核的速度比Pi本身编译快得多 性能因素 下面就讲下如
  • Maya致命错误解决方法

    因 此故障可能是由于 OpenCL 解决方案 禁用 OpenCL 通过添加 MAYA DISABLE OPENCL 1 到Maya env 复制引号里面部分 文件位于以下位置 c users username documents maya

随机推荐

  • Python自动合并Word文件并添加分页符的方法

    Python自动合并Word文件并添加分页符的方法 在本篇文章中 我们将介绍如何使用Python自动合并多个Word文件 并在合并后的文档中添加分页符 我们将使用Python的python docx库来处理Word文档 该库提供了丰富的功能
  • CMake动态库生成及使用

    命令行生成动态库 现有hello h 和 hello cpp文件 生成动态库 g c fPIC hello cpp hello h c 生成 o文件 fPIC 生成与位置无关的代码 动态库 g shared fPIC o libhello
  • vue——路由之路由跳转、路由传参、路由嵌套、路由模式

    相关认识 后端路由 对于前端的网络请求 不同的pathname 去执行后端的不同业务 前端路由 不同的网址对应各自的页面 vue的前端路由 SPA应用要做出路由效果 就得判断当前网址 然后切换组件 vue router就是专门做切换组件的功
  • 深入浅析TCP/IP——TCP/IP五层模型

    TCP IP五层模型 一 TCP IP五层模型 1 实体层 2 链路层 3 网络层 4 传输层 5 应用层 一 TCP IP五层模型 层与协议的关系 每一层为了完成一种功能 定义了一种规则 这个规则叫作互联网协议 1 实体层 把电脑连接起来
  • 运维面试题-Linux基础篇

    非技术类 你对现在运维工程师的理解以及对其工作的认识 答 运维工程师在公司当中责任重大 需要保证时刻为公司及客户提供最高 最快 最稳定 最安全的服务 运维工程师的一个小小的失误 很有可能会对公司及客户造成重大损失 因此运维工程师的工作需要严
  • GPT大语言模型Alpaca-lora本地化部署实践【大语言模型实践一】

    模型介绍 Alpaca模型是斯坦福大学研发的LLM Large Language Model 大语言 开源模型 是一个在52K指令上从LLaMA 7B Meta公司开源的7B 模型微调而来 具有70亿的模型参数 模型参数越大 模型的推理能力
  • 了解log4j日志平台

    log4j jar 写日志 log4j commonslog logback slf4j 通用的日志平台 推荐使用 还需要引入一个配置文件 log4j properties 需要放入classpath路径下 放在src下会自动加载到bin目
  • regsvr32提示模块加载失败 请确保二进制

    微软官方的一部分解释 https support microsoft com en us kb 249873 关于32位和64位的说明 http csi windows com blog all 73 windows 64 bit 378
  • 2021-05-20

    自我介绍 大家好 我是西安财经大学2019级大二的一名在校生 来自陕西省咸阳市 当时高考完在填报志愿的时候 我雨我的专业 一见钟情 计算机科学科学与技术专业 虽然有很多人告诉我说女孩子学IT这个行业不好 太辛苦太累等等 对于这些我都一笑了之
  • 多项式加法运算(链表实现)

    文章目录 创建结点类型 打印多项式 尾插 插入排序 多项式相加 代码总览 结果展示 创建结点类型 我们用链表存储一个多项式 那么该链表的每一个结点就代表多项式的某一项 所以我们的每一个结点必须包含三个信息 多项式的系数 多项式的指数以及指向
  • tf2报错解决 assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:]

    环境 tf2 完整报错如下 tensorflow python framework errors impl InvalidArgumentError assertion failed predictions must be gt 0 Con
  • 理解主从设备模式(Master-Slave)

    主从设备模式 主从设备模式也叫做主仆模式英文简称为Master Slave 核心思想是基于分而治之的思想 将一个原始任务分解为若干个语义等同的子任务 并由专门的工作者线程来并行执行这些任务 原始任务的结果是通过整合各个子任务的处理结果形成的
  • 安卓APP_ Fragment(3)—— Fragment的生命周期

    摘自 安卓APP Fragment 3 Fragment的生命周期 作者 丶PURSUING 发布时间 2021 04 16 22 32 12 网址 https blog csdn net weixin 44742824 article d
  • LINUX进程启动时自动挂载调试

    对于某些多进程的应用 子进程是有主进程拉起来的 此时想对子进程的启动流程打断点就比较麻烦 如果在子进程启动时调试器自动挂载就完美了 网上找到了gdbhelpers的开源工具库 其对gdb的现有命令集做了扩展 有一个工具是实现预挂载的 原理也
  • (PPT+官方解读):中国移动5G终端产品2021年要这么干!

    以下内容来自官方解读 1 2020 年终端产品发展回顾 2020 年新冠疫情全球蔓延 生产和生活受到冲击也带来很多改变 应该说这是不平凡的一年 也是在这一年的不断努力之下 中国移动 5G 终端交出了一份还算不错的答卷 中国移动网内 5G 手
  • Html常用正则表达式

    Html常用正则表达式 匹配帐号是否合法 字母开头 允许5 16字节 允许字母数字下划线 a zA Z a zA Z0 9 4 15 验证用户密码 a zA Z w 5 17 正确格式为 以字母开头 长度在6 18之间 只能包含字符 数字和
  • Linux 其他用户(非root用户)设置root权限及免密(Centos7为例)

    在linux系统中我们经常要创建一些非root用户来完成一些特定的操作 有时我们需要执行一些root用户才能执行的命令 这时我们需要给该用户设置root的权限 下面将演示如何操作 1 首先创建一个test用户 root smiletian
  • Postman导出和导入接口

    1 点击Export导出接口 2 点击Export 3 导出成功 4 导入操作 import 5 选择导入文件 7 导入成功
  • vue element的el-select下拉框赋值之后无法选择

    watch监听form applicant applyUnit里值的变化 赋值给form project disposalType 但发现下拉框不能再次选择 watch form applicant applyUnit handler va
  • 2013年9月22日星期日(准备工作:分离ddraw的math和interface)

    在之前 要进行下封装 好吧 先加个类 ddraw math类吧 顺便把ddraw引擎中的几个矩阵弄到ddraw math类中来 让接口和数学相分离开 头文件有这些 pragma once a 2D vertex typedef struct