在没有透视的情况下在OpenGL中渲染梯形

时间:2014-02-26 06:07:18

标签: opengl rendering lwjgl

我试图使用OpenGL渲染一个梯形,如下图5所示

将引用此image来说明我尝试过的不同类型的渲染

图1是四边形是如何被三角化的,因为这条线存在于所有后续图像中

GL11.glLoadIdentity();      
GL11.glTranslatef(0.0f,0.0f,-6.0f);
GL11.glBegin(GL11.GL_QUADS);

    GL11.glVertex4f(-1.0f, 0f, 0, 1f);

    GL11.glVertex4f(1.0f,  0f, 0, 1f);

    GL11.glVertex4f(0.5f,  1f, 0, 1f);

    GL11.glVertex4f(-0.5f, 1f, 0, 1f);

GL11.glEnd();

图2是传统的透视校正,并且由于沿y轴的透视插值,使得梯形看起来像方形后倾。然而,需要沿x轴的插值。 http://www.xyzw.us/~cass/qcoord/描述了方法

GL11.glLoadIdentity();      
GL11.glTranslatef(0.0f,0.0f,-6.0f);
GL11.glBegin(GL11.GL_QUADS);

    GL11.glTexCoord4f(0, 16f, 0, 16f);
    GL11.glVertex4f(-1.0f, 0f, 0, 1f);

    GL11.glTexCoord4f(16f, 16f, 0, 16f);
    GL11.glVertex4f(1.0f,  0f, 0, 1f);

    GL11.glTexCoord4f(8f, 0, 0, 8f);
    GL11.glVertex4f(0.5f,  1f, 0, 1f);

    GL11.glTexCoord4f(0, 0, 0, 8f);
    GL11.glVertex4f(-0.5f, 1f, 0, 1f);

GL11.glEnd();

图3没有q值修改的梯形的标准渲染。沿y轴缺乏基于透视的插值是合乎需要的;但缺乏沿x轴的插值不是。

GL11.glLoadIdentity();      
GL11.glTranslatef(0.0f,0.0f,-6.0f);
GL11.glBegin(GL11.GL_QUADS);

    GL11.glTexCoord4f(0, 1f, 0, 1f);
    GL11.glVertex4f(-1.0f, 0f, 0, 1f);

    GL11.glTexCoord4f(1f, 1f, 0, 1f);
    GL11.glVertex4f(1.0f,  0f, 0, 1f);

    GL11.glTexCoord4f(1f, 0, 0, 1f);
    GL11.glVertex4f(0.5f,  1f, 0, 1f);

    GL11.glTexCoord4f(0, 0, 0, 1f);
    GL11.glVertex4f(-0.5f, 1f, 0, 1f);

GL11.glEnd();

以上简化版。图2有x轴插补正确但扭曲y轴,图3有y轴正确但沿x轴没有插值

图4显示了我想要渲染梯形的简化版本(通过photoshop)。

图5是应用(通过photoshop)到案例4中描述的渲染模型的样本纹理。

上面列出的代码是在java内部使用LWJGL完成的(并且相应地进行了渲染),我很好用C或C ++中的答案以及代码类似于强烈的LWJGL调用(因为LWJGL被设计为)

0 个答案:

没有答案