WP7 XNA - рисование только половины моей модели сферы - PullRequest
0 голосов
/ 08 апреля 2011

У меня очень странная проблема с XNA / OpenGL на Windows Phone 7. Я рисую сферу, используя следующий код:

 if (Radius < 0f)
            Radius = -Radius;
        if (Radius == 0f)
            throw new DivideByZeroException("DrawSphere: Radius cannot be 0f.");
        if (Precision == 0)
            throw new DivideByZeroException("DrawSphere: Precision of 8 or greater is required.");

        const float HalfPI = (float)(Math.PI * 0.5);
        float OneThroughPrecision = 1.0f / Precision;
        float TwoPIThroughPrecision = (float)(Math.PI * 2.0 * OneThroughPrecision);

        float theta1, theta2, theta3;
        Vector3 Normal = new Vector3(0,0,0), Position = new Vector3();

        for (uint j = 0; j < Precision / 2; j++)
        {
            theta1 = (j * TwoPIThroughPrecision) - HalfPI;
            theta2 = ((j + 1) * TwoPIThroughPrecision) - HalfPI;

            GL.Begin(BeginMode.TriangleStrip);
            for (uint i = 0; i <= Precision; i++)
            {
                theta3 = i * TwoPIThroughPrecision;

                Normal.X = (float)(Math.Cos(theta2) * Math.Cos(theta3));
                Normal.Y = (float)Math.Sin(theta2);
                Normal.Z = (float)(Math.Cos(theta2) * Math.Sin(theta3));
                Position.X = Center.X + Radius * Normal.X;
                Position.Y = Center.Y + Radius * Normal.Y;
                Position.Z = Center.Z + Radius * Normal.Z;

                GL.Normal3(Normal);
                GL.TexCoord2(i * OneThroughPrecision, 2.0f * (j + 1) * OneThroughPrecision);
                GL.Vertex3(Position);

                Normal.X = (float)(Math.Cos(theta1) * Math.Cos(theta3));
                Normal.Y = (float)Math.Sin(theta1);
                Normal.Z = (float)(Math.Cos(theta1) * Math.Sin(theta3));
                Position.X = Center.X + Radius * Normal.X;
                Position.Y = Center.Y + Radius * Normal.Y;
                Position.Z = Center.Z + Radius * Normal.Z;

                GL.Normal3(Normal);
                GL.TexCoord2(i * OneThroughPrecision, 2.0f * j * OneThroughPrecision);
                GL.Vertex3(Position);
            }
            GL.End();
        }

Сфера выглядит так (на ОБАЭмулятор И устройство (HTC HD7): Strange sphereЕсть предложения?

1 Ответ

0 голосов
/ 08 апреля 2011

Попробуйте использовать this . Поскольку это больше проблема OpenGL, чем Android, попробуйте найти алгоритм для ручной генерации сфер. Возможно, стоит проверить правильность порядка вершин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...