我正在尝试使用GL & OnPostRender在Unity3D中渲染线条。如果我只有一个相机就可以了,但是如果我有多个相机( oculus裂缝需要),不管我试了什么,我都不能在两个相机视口中渲染线条。我已经尝试将脚本附加到两个相机-设置视口等,但没有工作。如果我将脚本附加到两个相机,则会为每个相机调用一次OnPostRender,但只绘制最后一个。如果我只将脚本附加到一个相机,并将视口设置为第二个相机,我无法让liones在第二个相机中绘制。以下是我认为应该有效的方法:
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();
}发布于 2014-04-09 16:35:02
只需在OnPostRender函数中添加your ();即可。
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();
}
}然后将这个脚本附加到两个摄像头,它应该可以工作。
https://stackoverflow.com/questions/22948464
复制相似问题