C++ opengl着色器坐标系

C++ opengl着色器坐标系,c++,opengl,math,optimization,shader,C++,Opengl,Math,Optimization,Shader,我在第页学习OpenGL: 在示例中,它们使用3个矩阵(模型、视图、投影)并将所有内容都推送到着色器程序。但可以在CPU上使用计算器MVPmat=投影*视图*模型,并将其推送到着色器一次 使用3个矩阵: +使用GPU +干净 -所有像素都需要计算器MVPmat -使用16或32位计算器 在CPU上使用MVPmat=投影*视图*模型 +每种型号一次 +使用64位计算器 -使用CPU -不干净 最好的方法是什么?我在GG上找不到答案,或者可能是我太笨了 对不起,我的英语不好。 谢谢。我不太清

我在第页学习OpenGL: 在示例中,它们使用3个矩阵(模型、视图、投影)并将所有内容都推送到着色器程序。但可以在CPU上使用计算器MVPmat=投影*视图*模型,并将其推送到着色器一次

  • 使用3个矩阵:

    • +使用GPU
    • +干净
    • -所有像素都需要计算器MVPmat
    • -使用16或32位计算器
  • 在CPU上使用MVPmat=投影*视图*模型

    • +每种型号一次
    • +使用64位计算器
    • -使用CPU
    • -不干净
  • 最好的方法是什么?我在GG上找不到答案,或者可能是我太笨了

    对不起,我的英语不好。
    谢谢。

    我不太清楚你说的“干净”和“不干净”是什么意思。我也不清楚为什么您认为在CPU上计算模型视图投影矩阵意味着必须使用64位精度来完成。当涉及到与图形相关的事情时,几乎不需要64位浮点运算。实际上,一般来说,几乎不需要超过单精度浮点。除非,例如,你正在做一些科学计算,你真的需要那种精度


    回答您的问题:如果使用组合模型视图投影矩阵足以满足您的要求,则使用组合矩阵似乎是最佳解决方案。只需计算一次组合矩阵。你只需要上传一个矩阵到GPU,而不是三个。只需在着色器中获取一个矩阵,而不是三个矩阵。您只需在着色器中执行一个矩阵向量乘法,而不是三个…

    1。“干净”与“不干净”是我自己的习惯“gl_位置=投影*视图*模型*vec4(aPos,1.0);”是数学之美。2.模型视图投影矩阵是最好的,但为什么一些图坦卡蒙老师在教授可以使用组合矩阵时使用3矩阵。我将要求作者得到答案。谢谢您的帮助。@TKNgu:使用3个矩阵的原因是,有时一些与图形相关的计算需要中间乘法步骤的结果。例如,通常在与投影相乘之前但在与模型视图相乘之后执行所有与灯光相关的计算。