首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多摄像头Unity3D的OnPostRender

具有多摄像头Unity3D的OnPostRender
EN

Stack Overflow用户
提问于 2014-04-09 05:23:59
回答 1查看 3.2K关注 0票数 1

我正在尝试使用GL & OnPostRender在Unity3D中渲染线条。如果我只有一个相机就可以了,但是如果我有多个相机( oculus裂缝需要),不管我试了什么,我都不能在两个相机视口中渲染线条。我已经尝试将脚本附加到两个相机-设置视口等,但没有工作。如果我将脚本附加到两个相机,则会为每个相机调用一次OnPostRender,但只绘制最后一个。如果我只将脚本附加到一个相机,并将视口设置为第二个相机,我无法让liones在第二个相机中绘制。以下是我认为应该有效的方法:

代码语言:javascript
复制
Rect[] viewports;

            Camera[] cameras = null;
            if (Params.riftEnabled)
            {
                viewports = new Rect[2];
                viewports[0] = new Rect(0, 0, Screen.width / 2, Screen.height);
                viewports[1] = viewports[0]; // new Rect(Screen.width / 2, 0, Screen.width / 2, Screen.height);
                GameObject ovrCameraController = (GameObject)GameObject.FindGameObjectWithTag("ovrcamera");
                cameras = (Camera[])ovrCameraController.GetComponentsInChildren<Camera>();

            }
            else
            {
                viewports = new Rect[1];
                viewports[0] = new Rect(0, 0, Screen.width, Screen.height);
                cameras = new Camera[1];
                cameras[0] = GameObject.FindObjectOfType<Camera>();
            }

            for (int i = 0; i < viewports.Length; i++)
            {
                SteeringManager.PrintVector("Cam " + i, cameras[i].transform.position);
                GL.PushMatrix();
                lineMaterial.SetPass(0);                                        
                GL.modelview = cameras[i].worldToCameraMatrix;
                GL.LoadProjectionMatrix(cameras[i].projectionMatrix);
                GL.Viewport(viewports[i]);
                lineMaterial.SetPass(0);
                GL.Begin(GL.LINES);
                foreach (Line line in lines)
                {
                     GL.Color(line.color);
                     GL.Vertex3(line.start.x, line.start.y, line.start.z);
                     GL.Vertex3(line.end.x, line.end.y, line.end.z);
                }
                GL.End();
                GL.PopMatrix();
            }
EN

回答 1

Stack Overflow用户

发布于 2014-04-09 16:35:02

只需在OnPostRender函数中添加your ();即可。

代码语言:javascript
复制
function OnPostRenderer() {
    yield WaitForEndOfFrame();

    for (var i : int = 0; i < viewports.Length; i++)
    {
    GL.PushMatrix();
    lineMaterial.SetPass(0);                                    
    GL.modelview = cameras[i].worldToCameraMatrix;
    GL.LoadProjectionMatrix(cameras[i].projectionMatrix);
    GL.Viewport(viewports[i]);

    GL.Color(Color.white);
    GL.Begin(GL.LINES);
    for (var p : Vector3 in points) {
         GL.Vertex3(...);
         GL.Vertex3(...);
        }
    GL.End();
    GL.PopMatrix();
    }
}

然后将这个脚本附加到两个摄像头,它应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22948464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档