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 に答える