コード例 #1
0
ファイル: vertexarray.cpp プロジェクト: HaohaoLau/vdrift
void VertexArray::SetTo2DQuad(float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2, float z)
{
	float vcorners[12];
	float uvs[8];
	int bfaces[6];
	SetVertexData2DQuad(x1,y1,x2,y2,u1,v1,u2,v2, vcorners, uvs, bfaces);
	for (int i = 2; i < 12; i += 3)
		vcorners[i] = z;
	SetFaces(bfaces, 6);
	SetVertices(vcorners, 12);
	SetTexCoordSets(1);
	SetTexCoords(0, uvs, 8);
}
コード例 #2
0
ファイル: vertexarray.cpp プロジェクト: HaohaoLau/vdrift
void VertexArray::Add(
	const unsigned char newcol[], int newcolcount,
	const float newnorm[], int newnormcount,
	const float newvert[], int newvertcount,
	const int newfaces[], int newfacecount,
	const float newtc[], int newtccount)
{
	assert(texcoords.size() == 1);
	SetFaces(newfaces, newfacecount, faces.size(), vertices.size() / 3);
	SetVertices(newvert, newvertcount, vertices.size());
	SetNormals(newnorm, newnormcount, normals.size());
	SetColors(newcol, newcolcount, colors.size());
	SetTexCoords(0, newtc, newtccount, texcoords[0].size());
}
コード例 #3
0
ファイル: vertexarray.cpp プロジェクト: HaohaoLau/vdrift
void VertexArray::SetTo2DButton(float x, float y, float w, float h, float sidewidth, bool flip)
{
	float vcorners[12*3];
	float uvs[8*3];
	int bfaces[6*3];

	//y1 = 1.0 - y1;
	//y2 = 1.0 - y2;

	Vec2 corner1;
	Vec2 corner2;
	Vec2 dim;
	dim.Set(w,h);
	Vec2 center;
	center.Set(x,y);
	corner1 = center - dim*0.5;
	corner2 = center + dim*0.5;

	float x1 = corner1[0];
	float y1 = corner1[1];
	float x2 = corner2[0];
	float y2 = corner2[1];

	if (flip)
	{
		float y3 = y1;
		y1 = y2;
		y2 = y3;
	}

	//left
	SetVertexData2DQuad(x1-sidewidth,y1,x1,y2, 0,0,0.5,1, vcorners, uvs, bfaces);

	//center
	SetVertexData2DQuad(x1,y1,x2,y2, 0.5,0,0.5,1, &(vcorners[12]), &(uvs[8]), &(bfaces[6]), 4);

	//right
	SetVertexData2DQuad(x2,y1,x2+sidewidth,y2, 0.5,0,1,1, &(vcorners[12*2]), &(uvs[8*2]), &(bfaces[6*2]), 8);

	SetFaces(bfaces, 6*3);
	SetVertices(vcorners, 12*3);
	SetTexCoordSets(1);
	SetTexCoords(0, uvs, 8*3);
}
コード例 #4
0
ファイル: vertexarray.cpp プロジェクト: HaohaoLau/vdrift
void VertexArray::SetToBillboard(float x1, float y1, float x2, float y2)
{
	int bfaces[6];
	bfaces[0] = 0;
	bfaces[1] = 1;
	bfaces[2] = 2;
	bfaces[3] = 0;
	bfaces[4] = 2;
	bfaces[5] = 3;
	SetFaces(bfaces, 6);

	float normals[12];
	for (int i = 0; i < 12; i+=3)
	{
		normals[i] = 0;
		normals[i+1] = 0;
		normals[i+2] = 1;
	}
	SetNormals(normals, 12);

	//build this:
	//x1, y1, 0
	//x2, y1, 0
	//x2, y2, 0
	//x1, y2, 0
	float verts[12];
	verts[2] = verts[5] = verts[8] = verts[11] = 0.0;
	verts[0] = verts[9] = x1;
	verts[3] = verts[6] = x2;
	verts[1] = verts[4] = y1;
	verts[7] = verts[10] = y2;
	SetVertices(verts, 12);

	float tc[8];
	tc[0] = tc[1] = tc[3] = tc[6] = 0.0;
	tc[2] = tc[4] = tc[5] = tc[7] = 1.0;
	SetTexCoordSets(1);
	SetTexCoords(0, tc, 8);
}
コード例 #5
0
ファイル: FaceObject.cpp プロジェクト: Holygitzdq/ElVis
void FaceObject::DoCreateNode(SceneView* view,
                              optixu::Transform& transform,
                              optixu::GeometryGroup& group)
{
    optixu::Context context = view->GetContext();
    if (m_group.get())
    {
        group = m_group;
        return;
    }

    auto model = view->GetScene()->GetModel();

    group = context->createGeometryGroup();

    m_curvedFaceInstance = context->createGeometryInstance();
    m_planarFaceInstance = context->createGeometryInstance();

    optixu::Geometry curvedGeometry = model->GetPlanarFaceGeometry();
    optixu::Geometry planarGeometry = model->GetCurvedFaceGeometry();

    m_planarFaceInstance->setGeometry(planarGeometry);
    m_curvedFaceInstance->setGeometry(curvedGeometry);

    m_group = group;

    group->setChildCount(2);
    group->setChild(0, m_planarFaceInstance);
    group->setChild(1, m_curvedFaceInstance);

    // Somehow sharing the acceleration structure didnt' work.  Revisit if
    // performance indicates.
    m_group->setAcceleration(context->createAcceleration("Sbvh", "Bvh"));
    m_facesEnabledBuffer =
        view->GetScene()->GetModel()->GetFacesEnabledBuffer();

    std::vector<int> temp(m_faceIds.begin(), m_faceIds.end());
    SetFaces(temp, true);
}
コード例 #6
0
ファイル: vertexarray.cpp プロジェクト: HaohaoLau/vdrift
void VertexArray::SetTo2DBox(float x, float y, float w, float h, float marginwidth, float marginheight, float clipx)
{
	const unsigned int quads = 9;
	float vcorners[12*quads];
	float uvs[8*quads];
	int bfaces[6*quads];

	//y1 = 1.0 - y1;
	//y2 = 1.0 - y2;

	Vec2 corner1;
	Vec2 corner2;
	Vec2 dim;
	dim.Set(w,h);
	Vec2 center;
	center.Set(x,y);
	corner1 = center - dim*0.5;
	corner2 = center + dim*0.5;
	Vec2 margin;
	margin.Set(marginwidth, marginheight);

	float lxmax = std::max((corner1-margin)[0],std::min(clipx,corner1[0]));
	float cxmax = std::max(corner1[0],std::min(clipx,corner2[0]));
	float rxmax = std::max(corner2[0],std::min(clipx,(corner2+margin)[0]));
	float lumax = (lxmax-(corner1-margin)[0])/(corner1[0]-(corner1-margin)[0])*0.5;
	float rumax = (rxmax-corner2[0])/((corner2+margin)[0]-corner2[0])*0.5+0.5;

	//upper left
	SetVertexData2DQuad((corner1-margin)[0],(corner1-margin)[1],lxmax,corner1[1],
			    0,0,lumax,0.5, vcorners,uvs,bfaces);

	//upper center
	SetVertexData2DQuad(corner1[0],(corner1-margin)[1],cxmax,corner1[1],
			     0.5,0,0.5,0.5,
			     &(vcorners[12*1]),&(uvs[8*1]),&(bfaces[6*1]),4*1);

	//upper right
	SetVertexData2DQuad(corner2[0],(corner1-margin)[1],rxmax,corner1[1],
			    0.5,0,rumax,0.5,
			    &(vcorners[12*2]),&(uvs[8*2]),&(bfaces[6*2]),4*2);

	//center left
	SetVertexData2DQuad((corner1-margin)[0],corner1[1],lxmax,corner2[1],
			    0,0.5,lumax,0.5,
			    &(vcorners[12*3]),&(uvs[8*3]),&(bfaces[6*3]),4*3);

	//center center
	SetVertexData2DQuad(corner1[0],corner1[1],cxmax,corner2[1],
			    0.5,0.5,0.5,0.5,
			    &(vcorners[12*4]),&(uvs[8*4]),&(bfaces[6*4]),4*4);

	//center right
	SetVertexData2DQuad(corner2[0],corner1[1],rxmax,corner2[1],
			    0.5,0.5,rumax,0.5,
			    &(vcorners[12*5]),&(uvs[8*5]),&(bfaces[6*5]),4*5);

	//lower left
	SetVertexData2DQuad((corner1-margin)[0],corner2[1],lxmax,(corner2+margin)[1],
			    0,0.5,lumax,1,
			    &(vcorners[12*6]),&(uvs[8*6]),&(bfaces[6*6]),4*6);

	//lower center
	SetVertexData2DQuad(corner1[0],corner2[1],cxmax,(corner2+margin)[1],
			    0.5,0.5,0.5,1,
			    &(vcorners[12*7]),&(uvs[8*7]),&(bfaces[6*7]),4*7);

	//lower right
	SetVertexData2DQuad(corner2[0],corner2[1],rxmax,(corner2+margin)[1],
			    0.5,0.5,rumax,1,
			    &(vcorners[12*8]),&(uvs[8*8]),&(bfaces[6*8]),4*8);

	SetFaces(bfaces, 6*quads);
	SetVertices(vcorners, 12*quads);
	SetTexCoordSets(1);
	SetTexCoords(0, uvs, 8*quads);
}