【问题标题】:GL-Enabling Texture2D in MonoTouch/OpenTK/GLKit generates error 0x0500MonoTouch/OpenTK/GLKit 中启用 GL 的 Texture2D 生成错误 0x0500
【发布时间】:2012-08-16 15:32:50
【问题描述】:

我在 GLKViewController 中的 MonoTouch 5.2.13 中使用 OpenTK-1.0.dll。我可以使用彩色顶点渲染 3D 对象,一切正常。

现在我想用纹理贴图渲染 3D 对象。为此,我将以下调用添加到我的ViewDidLoad 方法(在我的 GLKViewController 子类中):

GL.Enable(EnableCap.Texture2D);

但是自从我添加了这个调用后,OpenGL 屏幕保持黑色(不再有彩色顶点),并且在控制台上我看到了

GL ERROR: 0x0500

当我删除GL.Enable 调用时,一切都恢复正常了。

有什么提示吗?

【问题讨论】:

    标签: ios opengl-es xamarin.ios opengl-es-2.0 glkit


    【解决方案1】:

    glEnable(GL_TEXTURE_2D)(或等效的 openTK)在 OpenGLES 2.0 中不存在。它只控制固定管道的纹理。

    要在 OpenGLES 2.0 中使用纹理,您只需在着色器中对它们进行采样,无需启用任何东西。

    【讨论】:

    • games.ianterrell.com/how-to-texturize-objects-with-glkit 怎么样?这个网站不是描述了如何使用 GLKit 在 OpenGL ES 2.0 中进行纹理化吗?
    • 您的问题是什么?我不明白你在问什么。 @cheeesus
    • 如果我理解正确,您是说在 OpenGL ES 2.0 中,如果不使用自定义着色器,就无法对形状进行纹理化。但是,我认为这个网站描述了如何在不使用自定义着色器的情况下对形状进行纹理化。这和你的说法不矛盾吗?
    • OpenGLES2.0 中,不使用着色器就无法绘制任何东西是正确的。但是,您使用的是我不太熟悉的 GLKit。 GLKit 可能正在包装 OpenGL 并在幕后实现着色器,这样您就不必创建它们。但在纯 OpenGLES 2.0 中,每次绘制都必须使用着色器。 @cheeesus
    • 好的,谢谢。正如我的问题 (GLKViewController) 中所述,我正在寻找有关 GLKit 的答案。
    【解决方案2】:

    解决了,我必须添加以下内容:

    _baseEffect.Texture2d0.Enabled = true;
    _baseEffect.Texture2d0.GLName = _myGlkTexture.Name;
    _baseEffect.Texture2d0.EnvMode = GLKTextureEnvMode.Replace;
    _baseEffect.Texture2d0.Target = GLKTextureTarget.Texture2D;
    _baseEffect.PrepareToDraw();
    

    BaseEffect 类负责管理着色器,因此我们只需要告诉它激活纹理渲染即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多