为相机创建着色器程序是否正确?

时间:2014-12-19 15:10:43

标签: opengl opengl-es 3d webgl model-view

我想在我的3D应用程序中为相机对象创建一个单独的类/原型。

我理解有一个Model-View矩阵,开发人员使用它来翻译/旋转/使用任何3D对象的其他仿射变换,并添加到场景中。

但是,我的相机并不像一些网状物。 Camera不需要有颜色,因此不需要片段着色器(当然,如果您不想将相机可视化为LINES,并在不同的相机之间切换) ,例如),那么我真的需要什么相机?

  • 在三维向量(x,y,z)中的位置
  • mat4矩阵,描述位置和一些额外的矢量分量,我将在顶点着色器中使用,并将用于相机的位置转换
  • 移动相机的一些控件(我不想描述它的大部分细节,但仅举例来说,让我们说我们只使用键盘键来移动和旋转它)。

所以,我的问题是......如果我们的3D场景的视口由Model-View矩阵表示,其中任何对象正由某些仿射变换处理。为相机对象创建特定的着色器程序是否正确,或者为场景对象定义这样的着色器程序更正确,并且仅在某些draw方法/函数中将相机位置转换为{{1 }},在Model-View object?

的属性中保存

我正在为我的项目使用WebGL库,但我认为一些Scene开发人员也可以回答这样的问题,因为这两个库中的情况类似。

1 个答案:

答案 0 :(得分:1)

  

为相机对象创建特定着色器程序是否正确

不,因为在OpenGL中没有摄像头。实际上在OpenGL中甚至没有场景。 OpenGL是一个非常简单的绘图API。 OpenGL所做的就是将点,线或三角形绘制到像素帧缓冲区,一次绘制一个点,线或三角形,一旦绘制完成,OpenGL就已经忘记了它。

着色器是控制点,线或三角形如何在屏幕上变成像素的小程序。着色器不“控制”场景对象。为什么?因为OpenGL中没有场景,OpenGL中没有场景对象。

没有相机。您可以想到的相机(但不是)是模型视图中的一些子变换,它会以某种方式移动屏幕上的几何体,就好像它是移动相机的结果一样。

请注意,这同样适用于WebGL和OpenGL-ES。