【问题标题】:Strange ATI vs Nvidia TRIANGLE_STRIP issue奇怪的 ATI 与 Nvidia TRIANGLE_STRIP 问题
【发布时间】:2012-11-16 04:56:29
【问题描述】:

我有这段代码,我正在对我正在开发的引擎进行测试。

在我的 NVIDIA NVS 4200M 上,它按预期显示 GL_TRIANGLE_STRIP。 在我的 ATI Radeon 5800 上,它似乎画了一个三角形。

shader.begin();

    Matrix4<float> temp = getActiveCamera()->getProjectionMatrix() * getActiveCamera()->getObjectToWorld().fastInverse();

    glUniformMatrix4fv(shader["mvp"], 1, GL_TRUE, temp.getArray());

    glBegin(GL_TRIANGLE_STRIP);

        glVertexAttrib3f(shader["colour"],0,1,0);
        glVertexAttrib3f(shader["coord3d"],-.5,-.5,0); 

        glVertexAttrib3f(shader["colour"],1,1,0);
        glVertexAttrib3f(shader["coord3d"],0.5,-.5,0);

        glVertexAttrib3f(shader["colour"],1,0,1);
        glVertexAttrib3f(shader["coord3d"],-.5,.5,0); 

        glVertexAttrib3f(shader["colour"],0,1,1);
        glVertexAttrib3f(shader["coord3d"],.5,.5,0);

    glEnd();

shader.end();

这是它在我的两台计算机上的实际外观。

https://www.dropbox.com/s/sgm2j978tx2ipnp/not%20working.png

https://www.dropbox.com/s/27idv0b8k0p4pcx/working.png

【问题讨论】:

  • 您是否将coord3d 分配给属性0?

标签: c++ opengl shader nvidia ati


【解决方案1】:

这个问题可以通过移动到更高的 GLSL 版本来解决,我现在使用 330,此外我切换到使用#version 330 使我的所有属性“输入”使我的变化“输出”并使用布局(位置 = #)。

【讨论】:

    【解决方案2】:

    您的相机投影和模型视图矩阵的值是多少?如果它们是标准的(与初始没有变化),您应该向下看 -z 轴,在这种情况下,两个三角形的接缝应该从 (.5, -.5) 到 (-.5, .5) )(从右下角到左上角)。在 ATI 卡的情况下,这是不正确的(它是从左下角到右上角)。如果您实际上是在查看三角形的背面,那么显卡的 OpenGL 驱动程序可能会剔除这些面。如果这是真的,我不希望它画出任何东西,但你永远不知道。

    对此的一个测试是调用 glDisable(GL_CULL_FACE) 并查看它是否绘制了您期望的内容。

    人脸剔除参考: http://www.khronos.org/opengles/documentation/opengles1_0/html/glCullFace.html

    玩得开心,

    【讨论】:

    • 两台计算机的相机矩阵相同,我只是在两台计算机上运行该项目,我需要让它在两台计算机上工作,而不需要更改代码。那么我需要做什么才能在两台计算机上工作?当我关闭剔除时,我看到了另一点,所以它一半朝前,一半朝后。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2016-06-10
    相关资源
    最近更新 更多