Olá,
Estou com problemas de pointers e arrays neste código:
class Vertex
{
public:
float x, y, z;
};
class Faces
{
public:
Vertex* vertexes;
Faces() { vertexes = new Vertex[3]; }
};
Meu objetivo é, cada classe Face terá um array de 3 endereços de Vertex, e no código terei ? Vertexes. Terei ? Faces também, e um mesmo vértice pode se repetir em 1 ou mais Faces.
Eu quero guardar o endereço do vértice em Face, assim toda mudança que eu fizer nos vértices, os Faces também mudarão.
int _tmain(int argc, _TCHAR* argv[])
{
Vertex* vertexes = new Vertex[100]; //Só saberei esse número em runtime
for(int i = 0; i < 100; i++)
{ vertexes[i].x = i; vertexes[i].y = i; vertexes[i].z = i; } //Inicializando os vértices com números quaisquer
Faces* faces = new Faces[10];
//Definindo os 3 vértices de faces[0] com os três vertexes quaisquer, o primeiro argumento é o índice
faces[0]->SetVertex(0, &vertexes[0]);
faces[0]->SetVertex(1, &vertexes[5]);
faces[0]->SetVertex(2, &vertexes[10]);
}
Se eu mudar vertexes de 0, 5 ou 10, faces[0] referencia esses valores e também deverá ser mudado, mas não estou conseguindo fazer isso.
A função SetVertex eu testei de 2 maneiras:
//Recebo um endereço de vertex, e defino ele como sendo o endereço de meu vertexes[index]
void Faces::SetVertex(int index, Vertex &vertex)
{
vertexes[index] = vertex;
}
//Não funciona, os valores são copiados mas não é o mesmo endereço, portanto mudanças no vertex original não reflete no array vertexes de faces.
//Crio um array de pointers, defino como o array original de vertex.
//Na função, recebo um ponteiro de vertex e defino como o endereço de ptrVertexes
Vertex** ptrVertexes = vertexes;
void Faces::SetVertex(int index, Vertex* vertex)
{
ptrVertexes[index] = vertex;
}
//Funciona, vertexes[i] é o mesmo que Faces->vertexes[i].
O problema é que quando defino "ptrVertexes[index] = vertex", o índice não se mantém. Por exemplo:
ptrVertexes[0] = vertexes[0]; //Ok
ptrVertexes[1] = vertexes[2]; //Não OK, quando busco o valor de ptrVertexes[1] ele me mostra o valor em vertexes[1]
ptrVertexes[2] = vertexes[10]; //Não OK, ele mostra o valor de vertexes[2]
O que estou fazendo de errado e como posso conseguir o array que quero em Faces?