0

我在 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()

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

在此处输入图像描述

4

1 回答 1

2

评论者蒂姆是对的。问题是 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()
于 2012-06-23T01:28:26.247 回答