Untitled

mail@pastecode.io avatar
unknown
c_cpp
4 months ago
1.3 kB
14
Indexable
Never
void GraphicsDrawTriangle(MeshVertex* verts, float* matrix)
{
	if (verts)
	{
		// Convert generic vertex format to Glide format first
		Vertex v[3];
		memset(&v, 0, sizeof(v));

		for (int i = 0; i < 3; i++)
		{
			v[i].X = verts[i].Position.X;
			v[i].Y = verts[i].Position.Y;
			v[i].Z = verts[i].Position.Z;
			v[i].tmuvtx[0].U = verts[i].UV.X * 255.0f;
			v[i].tmuvtx[0].V = verts[i].UV.Y * 255.0f;
		}

		Vertex v1, v2, v3;
		if (!GraphicsConvertToWindowSpace(&v[0], &v1, matrix))
			return;

		if (!GraphicsConvertToWindowSpace(&v[1], &v2, matrix))
			return;

		if (!GraphicsConvertToWindowSpace(&v[2], &v3, matrix))
			return;

		grDrawTriangle(&v1, &v2, &v3);
	}
}

void GraphicsDrawMeshEx(Mesh* mesh, Material* material, float* matrix)
{
	if (mesh && mesh->NumVertices > 0)
	{
		// Setup render state
		GraphicsSetupTextureStage(material);

		for (int i = 0; i < mesh->NumVertices / 3; i++)
		{
			GraphicsDrawTriangle(&mesh->Vertices[i * 3], matrix);
		}
	}
}

...

float matrix[16];
MatrixIdentity((float*)&matrix);
MatrixRotationAngle((float*)&matrix, 0, rot, 0);
MatrixTranslation((float*)&matrix, rot, 0, 15);
MatrixPerspective((float*)&matrix, 90 * 0.0174533f, 640.0f / 480, 1, 100);

GraphicsDrawMeshEx(mesh, &mat, (float*)&matrix);
Leave a Comment