圈子的图象被显示作为在OpenGL的一个正方形

时间:2015-08-06 19:54:33

标签: python opengl pygame textures pyopengl

使用pyGame和pyOpenGL,我创建了一个2D表面,我在Photoshop中使用这个815x815 PNG作为纹理: Image I'm using as a texture

以下是我如何使用pygame加载图像并将其转换为纹理。

glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glBegin(GL_QUADS)
glVertex2fv((-1,-1))
glTexCoord2f(0,1)
glVertex2fv((-1,1))
glTexCoord2f(1,1)
glVertex2fv((1,1))
glTexCoord2f(1,0)
glVertex2fv((1,-1))
glTexCoord2f(0,0)
glEnd()

以下是我用来绘制正方形和纹理的代码。

Private Sub GetServerInfo_Click()
    Dim i As Integer
    Dim rowCount As Integer
    rowCount = Worksheets("Inventory_Repository").Cells.SpecialCells(xlCellTypeLastCell).Row

    For i = 3 To rowCount
        Cells(i, 10).Value = sPing(Cells(i, 4).Value)
        If InStr(Cells(i, 10), "Unavailable") > 0 Then
            Cells(i, 10).Interior.Color = RGB(255, 0, 0)
        Else
            Cells(i, 10).Interior.Color = RGB(0, 255, 0)
        End If
    Next i
    MsgBox ("IP has been updated")
End Sub

Function sPing(sHost) As String

    Dim oPing As Object, oRetStatus As Object

    Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & sHost & "'")

    For Each oRetStatus In oPing
        If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
            sPing = "Unavailable"
        Else
            sPing = oRetStatus.ProtocolAddress
        End If
    Next

End Function

以下是运行代码时会发生的情况。 OpenGL screenshot 如何正确显示纹理,为什么会这样?

修改

这是某种透明度错误,因为将图像的背景从透明更改为白色可以解决问题,但是,convert_alpha()并没有解决问题。另外,我不知道为什么会被投票,这是一个合理的问题。

1 个答案:

答案 0 :(得分:1)

我怀疑罪魁祸首是透明度。根据您创建png的方式,圆圈至少会有一些在某种程度上透明的像素。如果pygame不知道那些透明度值,它将把它渲染为基色,无论像素是否应该可见。当你阅读the documentation时,有关于pygame.image.load的这个模糊:

  

对于Alpha透明度,与.png图像一样,在加载后使用convert_alpha()方法,以使图像具有每像素透明度。

在评论中,有一个用户创建的函数(匿名,所以......请自担风险)使用此方法:

def load_image(file, colorkey=False):
    file = os.path.join('data', file)
    try:
        image = pygame.image.load(file)
        colorkey = image.get_at((0, 0))
        if colorkey is True:
            image.set_colorkey(colorkey, pygame.RLEACCEL)
    except:
        print 'Unable to load: ' + file
    return image.convert_alpha() #Convert any transparency in the image

你可以尝试使用它,或者我觉得你可以简单地说:

myTex = pygame.image.load('0.png')
myTex = myTex.convert_alpha()