Exemplo n.º 1
0
Vector RenderObject::getWorldCollidePosition(const Vector &vec)
{
#ifdef BBGE_USE_GLM
	glm::mat4 transformMatrix = glm::translate(
		matrixChain(this),
		glm::vec3(collidePosition.x + vec.x, collidePosition.y + vec.y, 0.0f)
	);

	return Vector(transformMatrix[3][0], transformMatrix[3][1], 0);
#else
#ifdef BBGE_BUILD_OPENGL
	glPushMatrix();
	glLoadIdentity();

	matrixChain(this);
	glTranslatef(collidePosition.x+vec.x, collidePosition.y+vec.y, 0);

	float m[16];
	glGetFloatv(GL_MODELVIEW_MATRIX, m);
	float x = m[12];
	float y = m[13];

	glPopMatrix();
	return Vector(x,y,0);
#elif BBGE_BUILD_DIRECTX
	return vec;
#endif
#endif
}
Exemplo n.º 2
0
int main ()
{
    int n;
    int q[2*N];
    int p[N+1],flag=1;
    int m[N+1][N+1];
    int s[N+1][N+1];
    printf ("请输入矩阵的个数:");
    scanf ("%d",&n);
    for (int i=0; i<=2*n-1; i++)
    {
        if (i%2==0)
        {
            printf ("***************\n");
            printf ("请输入A%d的行:",(i/2)+1);
        }
        else
        {
            printf ("列***********:");
        }
        scanf ("%d",&q[i]);
    }
    for (int i=1; i<=2*n-2; i++)
    {
        if (i%2!=0&&q[i]!=q[i+1])
        {
            flag=0;
            break;
        }
    }
    for (int j=1; j<=n-1; j++)
    {
        p[j]=q[2*j];
    }
    if (flag!=0)
    {
        p[0]=q[0];
        p[n]=q[2*n-1];
        matrixChain (p,m,s);
        printf ("式子如下:\n");
        traceback(1,n,s);
        printf ("\n");
        printf ("最小数乘次数为%d\n",m[1][n]);
    }
    else
    {
        printf ("这%d个矩阵不能连乘!\n",n);
    }
    return 0;
}
Exemplo n.º 3
0
static void matrixChain(RenderObject *ro)
{
	if (RenderObject *parent = ro->getParent())
		matrixChain(parent);
	
#ifdef BBGE_BUILD_OPENGL
	glTranslatef(ro->position.x+ro->offset.x, ro->position.y+ro->offset.y, 0);
	glRotatef(ro->rotation.z+ro->rotationOffset.z, 0, 0, 1);
	glTranslatef(ro->beforeScaleOffset.x, ro->beforeScaleOffset.y, 0);
	glScalef(ro->scale.x, ro->scale.y, 0);
	if (ro->isfh())
	{
		//glDisable(GL_CULL_FACE);
		glRotatef(180, 0, 1, 0);
	}
	glTranslatef(ro->internalOffset.x, ro->internalOffset.y, 0);
#endif
}
Vector RenderObject::getWorldCollidePosition(const Vector &vec)
{
#ifdef BBGE_BUILD_OPENGL
	glPushMatrix();
	glLoadIdentity();

	matrixChain();
	glTranslatef(collidePosition.x+vec.x, collidePosition.y+vec.y, 0);

	float m[16];
	glGetFloatv(GL_MODELVIEW_MATRIX, m);
	float x = m[12];
	float y = m[13];

	glPopMatrix();
	return Vector(x,y,0);
#elif BBGE_BUILD_DIRECTX
	return vec;
#endif
}
Exemplo n.º 5
0
static glm::mat4 matrixChain(const RenderObject *ro)
{
	glm::mat4 tranformMatrix = glm::scale(
		glm::translate(
			glm::rotate(
				glm::translate(
					ro->getParent() ? matrixChain(ro->getParent()) : glm::mat4(1.0f),
					glm::vec3(ro->position.x+ro->offset.x, ro->position.y+ro->offset.y, 0)
				),
				ro->rotation.z + ro->rotationOffset.z,
				glm::vec3(0, 0, 1)
			),
			glm::vec3(ro->beforeScaleOffset.x, ro->beforeScaleOffset.y, 0.0f)
		),
		glm::vec3(ro->scale.x, ro->scale.y, 0.0f)
	);

	if (ro->isfh())
		tranformMatrix *= glm::rotate(180.0f, glm::vec3(0.0f, 1.0f, 0.0f));

	tranformMatrix *= glm::translate(glm::vec3(ro->internalOffset.x, ro->internalOffset.y, 0.0f));
	return tranformMatrix;
}