Как масштабировать треугольник, созданный GL (используя позицию в окне просмотра) с масштабным коэффициентом Canvas? - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь создать речевые пузыри, визуализируя два объекта, пузырь и треугольник под ним.

Для этого у меня есть две части пузыря.Одним из них является фактический пузырь, он реализован с помощью изображения и является частью моего пользовательского интерфейса.Другой - под ним треугольник, он реализован с использованием единицы GL, рисующей треугольник.

Проблема в том, что этот треугольник, который я рисую, используя Unity GL и положение области просмотра, не масштабируется с масштабным коэффициентом моего холста, который установлен на "Масштаб с размером экрана" .Но пузырь, который является частью холста, конечно, масштабируется (я также меняю его положение, учитывая масштабный коэффициент холста).Я понятия не имею, как применить это к моему треугольнику GL все же.Как я могу масштабировать свой треугольник по коэффициенту масштабирования?

Максимальный снимок экрана в единстве, 16: 9, 1600x900

Работает нормально,пузырь находится на вершине треугольника

Не развернутый скриншот в единстве, 16: 9, 800x450

Треугольник здесьтакой же размер в пикселях, как на предыдущем скриншоте.Это не масштабирование с масштабным коэффициентом, как сам пузырь.

Вот мой код:

void LateUpdate() 
{

    //find out the position on the screen of this game object
    goScreenPos = Camera.main.WorldToScreenPoint(goTransform.position);

    float scaleFactor = Canvas.gameObject.GetComponent<Canvas>().scaleFactor;


    Vector2 finalPosition = new Vector2(goScreenPos.x / scaleFactor, goScreenPos.y / scaleFactor);

    goViewportPos.x = goScreenPos.x / (float)Screen.width  ;
    goViewportPos.y = goScreenPos.y / (float)Screen.height;

    Vector2 positionOfImage = new Vector2(finalPosition.x - centerOffsetX , finalPosition.y - centerOffsetY + offsetY);

    if (createdImageObject == null)
    {
        createdImageObject = Instantiate(imageObject);
        createdImageObject.transform.SetParent(Canvas);
    }

    createdImageObject.GetComponent<RectTransform>().anchoredPosition = new Vector3(positionOfImage.x, positionOfImage.y, 0);
}

И рендеринг GL:

void OnRenderObject()
{
    //push current matrix into the matrix stack
    GL.PushMatrix();
    //set material pass
    mat.SetPass(0);
    //load orthogonal projection matrix
    GL.LoadOrtho();
    //a triangle primitive is going to be rendered
    GL.Begin(GL.TRIANGLES);

        //set the color
        GL.Color(Color.white);

        //Define the triangle vetices
        GL.Vertex3(goViewportPos.x, goViewportPos.y+(offsetY/3)/Screen.height, 0.1f);
        GL.Vertex3(goViewportPos.x - (bubbleWidth/3)/(float)Screen.width, goViewportPos.y+offsetY/Screen.height, 0.1f);
        GL.Vertex3(goViewportPos.x - (bubbleWidth/8)/(float)Screen.width, goViewportPos.y+offsetY/Screen.height, 0.1f);

    GL.End();
    //pop the orthogonal matrix from the stack
    GL.PopMatrix();
}

Я позаимствовал код изэто руководство

Оно действительно старое, поэтому я пытаюсь изменить его для нового пользовательского интерфейса Unity вместо GUI.Но интерфейс отзывчивый, а GL - нет.Вот почему у меня такие проблемы.

Что мне делать?Как я могу масштабировать свой треугольник с масштабным коэффициентом?Или я должен сделать что-то еще, чтобы решить эту проблему?

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