首页 > 解决方案 > 我应该为不使用 MVP 矩阵的对象编写一个新的顶点着色器吗?

问题描述

我一直在使用带有相机控件的 OpenGL 编写 2d 渲染器,但是有些对象不应该应用相机,因为它们用于绘制按钮、健康条等无论在哪里都会留在屏幕上的东西你的相机是。我应该为这些对象编写单独的顶点着色器还是应该使用相同的顶点着色器?

如果我使用相同的顶点着色器,我应该做这样的事情吗

#version 330 core
layout(location = 0) in vec4 position;

uniform int haveCameraAppliedTo;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
     if(haveCameraAppliedTo == 0)
     {
          gl_Position = position;
     }
     if(haveCameraAppliedTo == 1)
     {
          gl_Position = projection * view * model * position;
     }
}

还是他们处理这个问题的不同方式?

标签: opengl

解决方案


其实我觉得我可以gl_Position = (projection * view * model * haveCameraAppliedTo * position) + (position * (1 - haveCameraAppliedTo));。如果变量 haveCameraAppliedTo 为 0,它会取消(projection * view * model * haveCameraAppliedTo * position)部分方程并只留下位置,如果变量 haveCameraAppliedTo 为 1,它会留在 MVP 矩阵中并取消(position * (1 - haveCameraAppliedTo))方程的一部分。如果这效率低下或速度慢,请告诉我。谢谢你。


推荐阅读