吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2457|回复: 15
收起左侧

[C&C++ 原创] 分享一份刚写的FPS游戏坐标转屏幕坐标的类库

  [复制链接]
Panel 发表于 2023-3-7 22:09
#pragma once
#include <windows.h>

typedef struct _WORD_LOCATION_
{
    float x;
    float y;
    float z;
}WORD_LOCATION;

typedef struct _CUT_COOR_
{
    float x;
    float y;
    float z;
    float w;
}CUT_COOR;

typedef struct _NDC_COOR_
{
    float x;
    float y;
    float z;
}NDC_COOR;

typedef struct _SCREEN_COOR_
{
    float x;
    float y;
}SCREEN_COOR;

typedef struct _SCREEN_PARAM_
{
    float height;
    float width;
}SCREEN_PARAM;

class World2Screen
{
public:
    float PersonMatrix[4][4];
    WORD_LOCATION WordLocation;
    CUT_COOR CutCoor;
    NDC_COOR NDCCoor;
    SCREEN_COOR ScreenCoor;
    SCREEN_PARAM ScreenParam;
public:
    World2Screen(WORD_LOCATION Word, float* PersonMatrix);
    void Word2CutCoor();
    bool InVisualField();
    void Cut2NDCCoor();
    void NDC2ScreenCoor();

};
#include "World2Screen.h"

World2Screen::World2Screen(WORD_LOCATION Word, float* PersonMatrix)
{
    this->WordLocation.x = Word.x;
    this->WordLocation.y = Word.y;
    this->WordLocation.z = Word.z;
    memcpy_s(this->PersonMatrix,sizeof(this->PersonMatrix),PersonMatrix,sizeof(this->PersonMatrix));
}

void World2Screen::Word2CutCoor()
{   
    this->CutCoor.x = this->PersonMatrix[0][0] * this->WordLocation.x + this->PersonMatrix[0][1] * this->WordLocation.y + this->PersonMatrix[0][2] * this->WordLocation.z + this->PersonMatrix[0][3];
    this->CutCoor.y = this->PersonMatrix[1][0] * this->WordLocation.x + this->PersonMatrix[1][1] * this->WordLocation.y + this->PersonMatrix[1][2] * this->WordLocation.z + this->PersonMatrix[1][3];
    this->CutCoor.z = this->PersonMatrix[2][0] * this->WordLocation.x + this->PersonMatrix[2][1] * this->WordLocation.y + this->PersonMatrix[2][2] * this->WordLocation.z + this->PersonMatrix[2][3];
    this->CutCoor.w = this->PersonMatrix[3][0] * this->WordLocation.x + this->PersonMatrix[3][1] * this->WordLocation.y + this->PersonMatrix[3][2] * this->WordLocation.z + this->PersonMatrix[3][3];
}

bool World2Screen::InVisualField()
{
    if (this->CutCoor.w < 0.01) { return false; };
}

void World2Screen::Cut2NDCCoor()
{
    this->NDCCoor.x = this->CutCoor.x / this->CutCoor.w;
    this->NDCCoor.y = this->CutCoor.y / this->CutCoor.w;
    this->NDCCoor.z = this->CutCoor.z / this->CutCoor.w;
}

void World2Screen::NDC2ScreenCoor()
{
    this->ScreenCoor.x = this->ScreenParam.width / 2 + (this->ScreenParam.width / 2) * this->NDCCoor.x;
    this->ScreenCoor.y = this->ScreenParam.height / 2 - (this->ScreenParam.height / 2) * this->NDCCoor.y;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Panel 发表于 2023-3-7 22:15
忘记补充了,这份代码矩阵部分是4x4矩阵的,如果你的游戏人物矩阵不是4x4的就自己改一下那里的代码就能用了
Chenda1 发表于 2023-3-7 22:24
我表示看不懂  楼主  有没有适合小白科普的
 楼主| Panel 发表于 2023-3-7 22:25
18077484116 发表于 2023-3-7 22:24
我表示看不懂  楼主  有没有适合小白科普的

看游戏安全方面的资料就懂是什么意思了
walykyy 发表于 2023-3-8 01:05
Panel 发表于 2023-3-7 22:25
看游戏安全方面的资料就懂是什么意思了

想学写游戏,兄弟有相关资料分享一下吗?
zsj118106 发表于 2023-3-8 08:51
先收藏了,感谢楼主分享
 楼主| Panel 发表于 2023-3-8 10:22
walykyy 发表于 2023-3-8 01:05
想学写游戏,兄弟有相关资料分享一下吗?

这个不是写游戏的,你如果要去学写游戏就去网上查查资料,我也没接触过写游戏
timeslover 发表于 2023-3-8 10:53
那就是可以搞自瞄的一个步骤
zhangxinxin2ni 发表于 2023-3-13 14:43
楼主有没有好的游戏逆向相关的教程啊
 楼主| Panel 发表于 2023-3-13 18:38
zhangxinxin2ni 发表于 2023-3-13 14:43
楼主有没有好的游戏逆向相关的教程啊

我之前看的是一份收费的,就不推荐了,要不然成引流了,可以去Tb这些看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表