Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос [решено]Как правильно получать позицию в мире?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Фев 2026
Сообщения
8
Реакции
1
подскажите кто-то как правильно получать позицию в мире, когда пытался сам сделать то координаты менялись когда я двигался.
так вот вопрос как правильно сделать?
игра minecraft, использую глхуки
 
Да че ты себе все мозг ебешь с этими гл залупами. Вызывай просто напрямую getlistener3f из openal64, это будет позиция твоя, а потом к ней добавляй уже относительные координаты сущностей, с этим проблем быть не должно. Вот пример:
Zalupa:
Expand Collapse Copy
using alGetListener3f_t = void(*)(ALenum, ALfloat*, ALfloat*, ALfloat*);
alGetListener3f_t alGetListener3f = nullptr;

//получение координат
ALfloat local_x = 0.0f, local_y = 0.0f, local_z = 0.0f;
alGetListener3f(AL_POSITION, &local_x, &local_y, &local_z);

//это в dllmain можешь засунуть.
HMODULE openal = GetModuleHandleA("openal64.dll");
alGetListener3f = (alGetListener3f_t)GetProcAddress(openal, "alGetListener3f");
 

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

либо я что то криво делаю, либо способ не работает, ибо корды все равно меняются от мойх телодвижений и движений камеры
 
Скрытое содержимоелибо я что то криво делаю, либо способ не работает, ибо корды все равно меняются от мойх телодвижений и движений камеры
Неправильно берешь относительную позицию. Можешь через хук на translate, тогда никаких трансформаций делать не придется. Условно:

Zalupa2:
Expand Collapse Copy
struct Object
{
    enum Type
    {
        Entity
    };

    Type m_type;
    glm::mat4 m_projection;
    glm::mat4 m_modelview;

    glm::vec3 relativePos;

    Object(Type t) : m_type(t), relativePos(0.0f) {
        glGetFloatv(GL_PROJECTION_MATRIX, glm::value_ptr(m_projection));
        glGetFloatv(GL_MODELVIEW_MATRIX, glm::value_ptr(m_modelview));
    }
};

glm::vec3 lastTranslate = glm::vec3(0.0f);

void WINAPI hk_glScalef(GLfloat x, GLfloat y, GLfloat z)
{
    if (x == 0.9375f and y == 0.9375f and z == 0.9375f) {
        objects.emplace_back(Object::Entity);
        objects.emplace_back().relativePos = lastTranslate;
    }

    fn_glScalef(x, y, z);
}

void WINAPI hk_glTranslatef(GLfloat x, GLfloat y, GLfloat z)
{
    lastTranslate = glm::vec3(x, y, z);

    fn_glTranslatef(x, y, z);
}
 
Неправильно берешь относительную позицию. Можешь через хук на translate, тогда никаких трансформаций делать не придется. Условно:

Zalupa2:
Expand Collapse Copy
struct Object
{
    enum Type
    {
        Entity
    };

    Type m_type;
    glm::mat4 m_projection;
    glm::mat4 m_modelview;

    glm::vec3 relativePos;

    Object(Type t) : m_type(t), relativePos(0.0f) {
        glGetFloatv(GL_PROJECTION_MATRIX, glm::value_ptr(m_projection));
        glGetFloatv(GL_MODELVIEW_MATRIX, glm::value_ptr(m_modelview));
    }
};

glm::vec3 lastTranslate = glm::vec3(0.0f);

void WINAPI hk_glScalef(GLfloat x, GLfloat y, GLfloat z)
{
    if (x == 0.9375f and y == 0.9375f and z == 0.9375f) {
        objects.emplace_back(Object::Entity);
        objects.emplace_back().relativePos = lastTranslate;
    }

    fn_glScalef(x, y, z);
}

void WINAPI hk_glTranslatef(GLfloat x, GLfloat y, GLfloat z)
{
    lastTranslate = glm::vec3(x, y, z);

    fn_glTranslatef(x, y, z);
}
все работает, пасибо огромное
 
Назад
Сверху Снизу