所以我的问题是: 我有一个名为vertex的结构
struc vertex
.x resq 1
.y resq 1
.z resq 1
endstruc
我想创建一个指向由该定义构成的结构的指针数组。就像加载顶点表单文件并将它们保存在数组中的结构和指针中,以便稍后我可以访问它们。 有什么想法吗?
我唯一的想法是使用这样的东西:
modelVertices resb vertex_size*100
制作所有顶点的巨大“数组”并使其像
一样[modelVertices+i*vertex_size]
其中i是我想要访问的顶点,那么我将如何访问顶点元素? 我现在不确定,但结构大小不完全只是elem1_size + elem2_size ...对吗?所以我不能通过添加元素的大小来访问它们以获得下一个没有?
有没有什么常用的方法来实现这个目标?
提前致谢并度过愉快的一天
编辑: 我试过这个
[modelVertices + vertexNumber*vertex_size + vertex.x]
要读取vertexNumberth顶点的x,我明白汇编允许我几乎所有内存都可以使用,所以它可以正常使用吗?
答案 0 :(得分:2)
结构的元素是从结构的开始偏移,因此您只需添加偏移量即可访问元素:
[modelVertices+i*vertex_size + vertex.x]
您可能希望为此定义宏:
%define VERTEX(i, e) [modelVertices+i*vertex_size + vertex. %+ e]
mov VERTEX(3, y), rax ; move rax to y of vertex at index 3
编辑:如果要将寄存器用作索引,则必须单独计算乘法:
%define VERTEX(offset, e) [modelVertices + offset + vertex. %+ e]
; calculate offset from start of the array
mov eax, vertex_size
mov edx, 3 ; index
mul edx
mov VERTEX(rax, y), rcx ; move rcx to y of vertex at index 3
如果要创建指针数组而不是直接使用结构,可以创建qwords数组:
ptrArray resq 100 ; fill in the addresses somewhere
; ...
; get pointer to vertex at index i
%define VERTEX_PTR(i) [ptrArray + i * 8]
%define VERTEX(ptr, e) [ptr + vertex. %+ e]
mov rdx, VERTEX_PTR(3)
mov VERTEX(rdx, y), rax ; move rax to y of vertex at index 3