递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3627|回复: 0
打印 上一主题 下一主题

[视窗] 求大老指教下 C转火山 一直报错

[复制链接]

6

主题

18

帖子

116

积分

注册会员

Rank: 2

积分
116
跳转到指定楼层
楼主
发表于 2023-2-22 16:43:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 暗香 于 2023-2-22 16:44 编辑

vector3 取坐标(uint64_t transform)
{
        vector3 ret_value;
        uint64_t matrix_list_base = 0;
        uint64_t dependency_index_table_base = 0;
        uint64_t transform_internal = transform;
        uint64_t matrices = 0;
        读写::读字节集(transform_internal + 0x38, &matrices, 8);
        if (matrices == 0)
                return ret_value;
        int index = 0;
        读写::读字节集(transform_internal + 0x40, &index, 4);
        读写::读字节集(matrices + 0x18, &matrix_list_base, 8);
        if (matrix_list_base == 0)
                return ret_value;
        读写::读字节集(matrices + 0x20, &dependency_index_table_base, 8);
        if (dependency_index_table_base == 0)
                return ret_value;
        int index_relation = 0;
        读写::读字节集(dependency_index_table_base + index * 4, &index_relation, 4);
        float base_matrix3x4[64],
                * matrix3x4_buffer0 = (float*)((uint64_t)base_matrix3x4 + 16),
                * matrix3x4_buffer1 = (float*)((uint64_t)base_matrix3x4 + 32),
                * matrix3x4_buffer2 = (float*)((uint64_t)base_matrix3x4 + 48);
        读写::读字节集(matrix_list_base + index * 0x30, base_matrix3x4, 0x10);
        __m128 xmmword_1410D1340 = { -2.f, 2.f, -2.f, 0.f };
        __m128 xmmword_1410D1350 = { 2.f, -2.f, -2.f, 0.f };
        __m128 xmmword_1410D1360 = { -2.f, -2.f, 2.f, 0.f };
        int time = 0;
        ULONG matrix_relation_index = 6 * index_relation;
        读写::读字节集(matrix_list_base + 8 * matrix_relation_index, matrix3x4_buffer2, 0x10);
        __m128 v_0 = *(__m128*)matrix3x4_buffer2;
        读写::读字节集(matrix_list_base + 8 * matrix_relation_index + 32, matrix3x4_buffer0, 0x10);
        __m128 v_1 = *(__m128*)matrix3x4_buffer0;
        读写::读字节集(matrix_list_base + 8 * matrix_relation_index + 16, matrix3x4_buffer1, 0x10);
        __m128i v9 = *(__m128i*)matrix3x4_buffer1;
        __m128* v3 = (__m128*)base_matrix3x4;
        __m128 v10, v11, v12, v13, v14, v15, v16, v17;
        v10 = _mm_mul_ps(v_1, *v3);
        v11 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 0));
        v12 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 85));
        v13 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 142));
        v14 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 219));
        v15 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 170));
        v16 = _mm_castsi128_ps(_mm_shuffle_epi32(v9, 113));
        v17 = _mm_add_ps(_mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_sub_ps(_mm_mul_ps(_mm_mul_ps(v11, xmmword_1410D1350), v13), _mm_mul_ps(_mm_mul_ps(v12, xmmword_1410D1360), v14)),
                _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(v10), 170))), _mm_mul_ps(_mm_sub_ps(_mm_mul_ps(_mm_mul_ps(v15, xmmword_1410D1360), v14),
                        _mm_mul_ps(_mm_mul_ps(v11, xmmword_1410D1340), v16)), _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(v10), 85)))),
                _mm_add_ps(_mm_mul_ps(_mm_sub_ps(_mm_mul_ps(_mm_mul_ps(v12, xmmword_1410D1340), v16), _mm_mul_ps(_mm_mul_ps(v15, xmmword_1410D1350), v13)),
                        _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(v10), 0))), v10)), v_0);
        *v3 = v17;
        读写::读字节集(dependency_index_table_base + index_relation * 4, &index_relation, sizeof(index_relation));
        ret_value.x = base_matrix3x4[0];
        ret_value.y = base_matrix3x4[1];
        ret_value.z = base_matrix3x4[2];
        return ret_value;
}
有没有大老帮忙转一下 万分感谢







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 11:21 , Processed in 0.082950 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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