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

2024-05-20 15:27:30 发布

您现在位置: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()

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

enter image description here


Tags: 函数参数defmathsqrt曲线opengl纹理
1条回答
网友
1楼 · 发布于 2024-05-20 15:27:30

评论家蒂姆是对的。问题是GL峎多边形。问题是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()

相关问题 更多 >