繁体   English   中英

纹理映射OpenGL中的弯曲矩形[python]

[英]Texture mapping a curved rectangle in OpenGL [python]

我在Python中的OpenGL纹理映射方面遇到了一些问题。 我正在尝试绘制一个在顶部和底部弯曲的矩形,但到目前为止,我只能在底部弯曲它。 不知何故,鞋帮不想形成曲线。 我使用的函数参数为0.2:

def DrawAWobble(y_wobble):
    R = y_wobble/2.0 - 1/(2.0*y_wobble)

    glBegin(GL_POLYGON)
    x = 0.0
    while x<2.1:
        glTexCoord2f(x*0.5, 1.0); glVertex2f(x/2 - 0.5, 0.5 + (R + math.sqrt(R**2 - (1 - x)**2 + 1)))
        x += 0.1

    x = 2.0
    while x>-0.1:
        glTexCoord2f(x*0.5, 0.0); glVertex2f(x/2 - 0.5, -0.5 + (R + math.sqrt(R**2 - (1 - x)**2 + 1)))
        x -= 0.1
    glEnd()

我得到的结果是在左边,而我应该得到像图像的右边部分。

在此输入图像描述

评论员蒂姆是对的。 问题是GL_POLYGON。 问题是GPU必须弄清楚如何对您的任意多边形进行三角测量,并且它的运行方式不是保留您的映射。 您可能想要的是使用单个四边形条或三角形条来渲染它; 而不是在多边形的边缘周围工作,来回交替和工作。 像这样的东西(显然未经测试):

def DrawAWobble(y_wobble,step=0.1):
    R = y_wobble/2.0 - 1/(2.0*y_wobble)

    glBegin(GL_QUAD_STRIP)
    x = 0.0
    while x<2.0+0.5*step:
        glTexCoord2f(0.5*x,0.0); glVertex2f(0.5*(x-1), -0.5 + R + (R*R-(1-x)*(1-x)+1)**0.5)
        glTexCoord2f(0.5*x,1.0); glVertex2f(0.5*(x-1),  0.5 + R + (R*R-(1-x)*(1-x)+1)**0.5)
        x += step
    glEnd()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM