本文整理汇总了C++中VertexArray::GetVertices方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexArray::GetVertices方法的具体用法?C++ VertexArray::GetVertices怎么用?C++ VertexArray::GetVertices使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexArray
的用法示例。
在下文中一共展示了VertexArray::GetVertices方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteVertices
unsigned int VertexBuffer::WriteVertices(
const VertexArray & va,
const unsigned int vcount,
const unsigned int vertex_size,
std::vector<float> & vertex_buffer)
{
// get vertices (fixme: use VertexFormat info here)
const int vat_count = 4;
const void * vat_ptrs[4] = {0, 0, 0, 0};
int vn, nn, tn, cn;
va.GetVertices((const float *&)vat_ptrs[0], vn);
va.GetNormals((const float *&)vat_ptrs[1], nn);
va.GetTexCoords((const float *&)vat_ptrs[2], tn);
va.GetColors((const unsigned char *&)vat_ptrs[3], cn);
// calculate vertex element sizes and offsets in sizeof(float)
int vat_sizes[4] = {3, 3, 2, 1};
int vat_offsets[4] = {0, 3, 6, 8};
for (int j = 0; j < vat_count; ++j)
{
if (vat_ptrs[j] == 0)
vat_sizes[j] = 0;
}
for (int j = 1; j < vat_count; ++j)
{
vat_offsets[j] = vat_offsets[j - 1] + vat_sizes[j - 1];
}
// fill vertices
assert((vcount + vn / 3) * vertex_size <= vertex_buffer.size());
float * vb = &vertex_buffer[vcount * vertex_size];
for (int j = 0; j < vn / 3 ; ++j)
{
float * v = vb + j * vertex_size;
for (int k = 0; k < vat_count; ++k)
{
const float * vat = (const float *)vat_ptrs[k] + j * vat_sizes[k];
for (int m = 0; m < vat_sizes[k]; ++m)
{
v[vat_offsets[k] + m] = vat[m];
}
}
}
return vcount + vn / 3;
}
示例2: AddLinePoint
void AiCarStandard::AddLinePoint(VertexArray & va, const Vec3 & p)
{
int vsize;
const float* vbase;
va.GetVertices(vbase, vsize);
if (vsize == 0)
{
int vcount = 3;
float verts[3] = {p[0], p[1], p[2]};
va.SetVertices(verts, vcount, vsize);
}
else
{
int vcount = 6;
float verts[6] = {p[0], p[1], p[2], p[0], p[1], p[2]};
va.SetVertices(verts, vcount, vsize);
}
}
示例3: DrawVertexArray
void RenderInputScene::DrawVertexArray(const VertexArray & va, float linesize) const
{
const float * verts;
int vertcount;
va.GetVertices(verts, vertcount);
if (verts)
{
glVertexPointer(3, GL_FLOAT, 0, verts);
glEnableClientState(GL_VERTEX_ARRAY);
const unsigned char * cols;
int colcount;
va.GetColors(cols, colcount);
if (cols)
{
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cols);
glEnableClientState(GL_COLOR_ARRAY);
}
const int * faces;
int facecount;
va.GetFaces(faces, facecount);
if (faces)
{
const float * norms;
int normcount;
va.GetNormals(norms, normcount);
if (norms)
{
glNormalPointer(GL_FLOAT, 0, norms);
glEnableClientState(GL_NORMAL_ARRAY);
}
const float * tc = 0;
int tccount;
if (va.GetTexCoordSets() > 0)
{
va.GetTexCoords(0, tc, tccount);
if (tc)
{
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, tc);
}
}
glDrawElements(GL_TRIANGLES, facecount, GL_UNSIGNED_INT, faces);
if (tc)
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
if (norms)
glDisableClientState(GL_NORMAL_ARRAY);
}
else if (linesize > 0)
{
glLineWidth(linesize);
glDrawArrays(GL_LINES, 0, vertcount / 3);
}
if (cols)
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
}
}