我想在我的3D应用程序中为相机对象创建一个单独的类/原型。
我理解有一个Model-View
矩阵,开发人员使用它来翻译/旋转/使用任何3D对象的其他仿射变换,并添加到场景中。
但是,我的相机并不像一些网状物。 Camera
不需要有颜色,因此不需要片段着色器(当然,如果您不想将相机可视化为LINES
,并在不同的相机之间切换) ,例如),那么我真的需要什么相机?
所以,我的问题是......如果我们的3D场景的视口由Model-View
矩阵表示,其中任何对象正由某些仿射变换处理。为相机对象创建特定的着色器程序是否正确,或者为场景对象定义这样的着色器程序更正确,并且仅在某些draw
方法/函数中将相机位置转换为{{1 }},在Model-View
object?
我正在为我的项目使用WebGL库,但我认为一些Scene
开发人员也可以回答这样的问题,因为这两个库中的情况类似。
答案 0 :(得分:1)
为相机对象创建特定着色器程序是否正确
不,因为在OpenGL中没有摄像头。实际上在OpenGL中甚至没有场景。 OpenGL是一个非常简单的绘图API。 OpenGL所做的就是将点,线或三角形绘制到像素帧缓冲区,一次绘制一个点,线或三角形,一旦绘制完成,OpenGL就已经忘记了它。
着色器是控制点,线或三角形如何在屏幕上变成像素的小程序。着色器不“控制”场景对象。为什么?因为OpenGL中没有场景,OpenGL中没有场景对象。
没有相机。您可以想到的相机(但不是)是模型视图中的一些子变换,它会以某种方式移动屏幕上的几何体,就好像它是移动相机的结果一样。
请注意,这同样适用于WebGL和OpenGL-ES。