本文整理汇总了C++中VertexBuffer::AppendVertices方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexBuffer::AppendVertices方法的具体用法?C++ VertexBuffer::AppendVertices怎么用?C++ VertexBuffer::AppendVertices使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexBuffer
的用法示例。
在下文中一共展示了VertexBuffer::AppendVertices方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ToLineList
void Plane::ToLineList(VertexBuffer &vb, float uWidth, float vHeight, const vec ¢erPoint, int numLinesU, int numLinesV) const
{
vec topLeft = Point(-uWidth*0.5f, -vHeight *0.5f, centerPoint);
vec uEdge = (Point(uWidth*0.5f, -vHeight *0.5f, centerPoint) - topLeft) / (float)numLinesU;
vec vEdge = (Point(-uWidth*0.5f, vHeight *0.5f, centerPoint) - topLeft) / (float)numLinesV;
int i = vb.AppendVertices((numLinesU + numLinesV) * 2);
for(int y = 0; y < numLinesV; ++y)
{
float4 start = POINT_TO_FLOAT4(topLeft + vEdge * (float)y);
float4 end = POINT_TO_FLOAT4(topLeft + uWidth * uEdge + vEdge * (float)y);
vb.Set(i, VDPosition, start);
vb.Set(i+1, VDPosition, end);
i += 2;
}
for(int x = 0; x < numLinesU; ++x)
{
float4 start = POINT_TO_FLOAT4(topLeft + uEdge * (float)x);
float4 end = POINT_TO_FLOAT4(topLeft + vHeight * vEdge + uEdge * (float)x);
vb.Set(i, VDPosition, start);
vb.Set(i+1, VDPosition, end);
i += 2;
}
}
示例2: Triangulate
void Polyhedron::Triangulate(VertexBuffer &vb, bool ccwIsFrontFacing) const
{
for(int i = 0; i < NumFaces(); ++i)
{
Polygon p = FacePolygon(i);
std::vector<Triangle> tris = p.Triangulate();
int idx = vb.AppendVertices(3*(int)tris.size());
for(size_t j = 0; j < tris.size(); ++j)
{
vb.Set(idx, VDPosition, float4(tris[j].a, 1.f));
if (ccwIsFrontFacing)
{
vb.Set(idx+1, VDPosition, float4(tris[j].c, 1.f));
vb.Set(idx+2, VDPosition, float4(tris[j].b, 1.f));
}
else
{
vb.Set(idx+1, VDPosition, float4(tris[j].b, 1.f));
vb.Set(idx+2, VDPosition, float4(tris[j].c, 1.f));
}
// Generate flat normals if VB has space for normals.
if (vb.Declaration()->TypeOffset(VDNormal) >= 0)
{
float3 normal = ccwIsFrontFacing ? tris[j].NormalCCW() : tris[j].NormalCW();
vb.Set(idx, VDNormal, float4(normal, 0.f));
vb.Set(idx+1, VDNormal, float4(normal, 0.f));
vb.Set(idx+2, VDNormal, float4(normal, 0.f));
}
idx += 3;
}
}
}
示例3: ToLineList
void AABB::ToLineList(VertexBuffer &vb) const
{
Array<vec> pos;
pos.Resize_pod(NumVerticesInEdgeList());
ToEdgeList(&pos[0]);
int startIndex = vb.AppendVertices((int)pos.size());
for(int i = 0; i < (int)pos.size(); ++i)
vb.Set(startIndex+i, VDPosition, POINT_TO_FLOAT4(pos[i]));
}
示例4: ToLineList
void Polyhedron::ToLineList(VertexBuffer &vb) const
{
std::vector<LineSegment> edges = Edges();
int startIndex = vb.AppendVertices((int)edges.size()*2);
for(int i = 0; i < (int)edges.size(); ++i)
{
vb.Set(startIndex+2*i, VDPosition, float4(edges[i].a, 1.f));
vb.Set(startIndex+2*i+1, VDPosition, float4(edges[i].b, 1.f));
}
}
示例5: Triangulate
void Plane::Triangulate(VertexBuffer &vb, float uWidth, float vHeight, const vec ¢erPoint, int numFacesU, int numFacesV, bool ccwIsFrontFacing) const
{
vec topLeft = Point(-uWidth*0.5f, -vHeight *0.5f, centerPoint);
vec uEdge = (Point(uWidth*0.5f, -vHeight *0.5f, centerPoint) - topLeft) / (float)numFacesU;
vec vEdge = (Point(-uWidth*0.5f, vHeight *0.5f, centerPoint) - topLeft) / (float)numFacesV;
int i = vb.AppendVertices(numFacesU * numFacesV * 6);
for(int y = 0; y < numFacesV; ++y)
for(int x = 0; x < numFacesU; ++x)
{
float4 tl = POINT_TO_FLOAT4(topLeft + uEdge * (float)x + vEdge * (float)y);
float4 tr = POINT_TO_FLOAT4(topLeft + uEdge * (float)(x+1) + vEdge * (float)y);
float4 bl = POINT_TO_FLOAT4(topLeft + uEdge * (float)x + vEdge * (float)(y+1));
float4 br = POINT_TO_FLOAT4(topLeft + uEdge * (float)(x+1) + vEdge * (float)(y+1));
int i0 = ccwIsFrontFacing ? i : i+5;
int i1 = ccwIsFrontFacing ? i+5 : i;
vb.Set(i0, VDPosition, tl);
vb.Set(i+1, VDPosition, tr);
vb.Set(i+2, VDPosition, bl);
vb.Set(i+3, VDPosition, bl);
vb.Set(i+4, VDPosition, tr);
vb.Set(i1, VDPosition, br);
if (vb.Declaration()->HasType(VDUV))
{
float4 uvTL((float)x/numFacesU, (float)y/numFacesV, 0.f, 1.f);
float4 uvTR((float)(x+1)/numFacesU, (float)y/numFacesV, 0.f, 1.f);
float4 uvBL((float)x/numFacesU, (float)(y+1)/numFacesV, 0.f, 1.f);
float4 uvBR((float)(x+1)/numFacesU, (float)(y+1)/numFacesV, 0.f, 1.f);
vb.Set(i0, VDUV, uvTL);
vb.Set(i+1, VDUV, uvTR);
vb.Set(i+2, VDUV, uvBL);
vb.Set(i+3, VDUV, uvBL);
vb.Set(i+4, VDUV, uvTR);
vb.Set(i1, VDUV, uvBR);
}
if (vb.Declaration()->HasType(VDNormal))
{
for(int k = 0; k < 6; ++k)
vb.Set(i+k, VDNormal, DIR_TO_FLOAT4(normal));
}
i += 6;
}
}
示例6: Triangulate
void Sphere::Triangulate(VertexBuffer &vb, int numVertices, bool ccwIsFrontFacing) const
{
Array<vec> position;
Array<vec> normal;
Array<float2> uv;
position.Resize_unspecified(numVertices);
normal.Resize_unspecified(numVertices);
uv.Resize_unspecified(numVertices);
Triangulate(position.ptr(), normal.ptr(), uv.ptr(), numVertices, ccwIsFrontFacing);
int startIndex = vb.AppendVertices(numVertices);
for(int i = 0; i < (int)position.size(); ++i)
{
vb.Set(startIndex+i, VDPosition, POINT_TO_FLOAT4(position[i]));
if (vb.Declaration()->TypeOffset(VDNormal) >= 0)
vb.Set(startIndex+i, VDNormal, DIR_TO_FLOAT4(normal[i]));
if (vb.Declaration()->TypeOffset(VDUV) >= 0)
vb.SetFloat2(startIndex+i, VDUV, 0, uv[i]);
}
}
示例7: Triangulate
void Sphere::Triangulate(VertexBuffer &vb, int numVertices, bool ccwIsFrontFacing) const
{
Array<float3> pos;
Array<float3> normal;
Array<float2> uv;
pos.Resize_pod(numVertices);
normal.Resize_pod(numVertices);
uv.Resize_pod(numVertices);
Triangulate(pos.beginptr(), normal.beginptr(), uv.beginptr(), numVertices, ccwIsFrontFacing);
int startIndex = vb.AppendVertices(numVertices);
for(int i = 0; i < (int)pos.size(); ++i)
{
vb.Set(startIndex+i, VDPosition, float4(pos[i],1.f));
if (vb.Declaration()->TypeOffset(VDNormal) >= 0)
vb.Set(startIndex+i, VDNormal, float4(normal[i],0.f));
if (vb.Declaration()->TypeOffset(VDUV) >= 0)
vb.SetFloat2(startIndex+i, VDUV, 0, uv[i]);
}
}
示例8: Triangulate
void AABB::Triangulate(VertexBuffer &vb, int numFacesX, int numFacesY, int numFacesZ, bool ccwIsFrontFacing) const
{
Array<vec> pos;
Array<vec> normal;
Array<float2> uv;
int numVertices = (numFacesX*numFacesY + numFacesY*numFacesZ + numFacesX*numFacesZ)*2*6;
pos.Resize_pod(numVertices);
normal.Resize_pod(numVertices);
uv.Resize_pod(numVertices);
Triangulate(numFacesX, numFacesY, numFacesZ, &pos[0], &normal[0], &uv[0], ccwIsFrontFacing);
int startIndex = vb.AppendVertices(numVertices);
for(int i = 0; i < (int)pos.size(); ++i)
{
vb.Set(startIndex+i, VDPosition, POINT_TO_FLOAT4(pos[i]));
if (vb.Declaration()->TypeOffset(VDNormal) >= 0)
vb.Set(startIndex+i, VDNormal, DIR_TO_FLOAT4(normal[i]));
if (vb.Declaration()->TypeOffset(VDUV) >= 0)
vb.SetFloat2(startIndex+i, VDUV, 0, uv[i]);
}
}