0

簡単なプログラムを作成しようとしています。クリックすると、マウスの位置に球が描画されます。

問題は、空白のウィンドウに何も表示されないことです。以下のコードでは、少なくともマウス クリックを登録し、マウスの位置を保存していることを確認しました。問題は表示機能のどこかにあると思いますが、どこで、またはなぜなのかわかりません。

私が行ったことのほとんどは、この例に基づいていました。

from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from logging import warning
sphere_locations = [(0, 0)]

def init():                                            
    glClearColor(1.0, 1.0, 1.0, 0.0)
    glColor3f(0.0, 0.0, 0.0)
    glPointSize(5.0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluOrtho2D(0.0, 100.0, 0.0, 100.0)
    glEnable(GL_DEPTH_TEST)                              


def on_click(button, state, x, y):
    global sphere_locations
    if button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:
        warning("CLICK")
        sphere_locations.append((x, y))


def display():
    global sphere_locations
    warning(sphere_locations)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)  
    for x, y in sphere_locations:
        glPushMatrix()                    
        glTranslatef(x, y, 1.0)    
        glColor3f(0.0, 1.0, 0.0)         
        glutSolidSphere(0.3, 250, 250)   
        glPopMatrix()                    
    glFlush()                        
    glutSwapBuffers()                
    glutPostRedisplay()                



glutInit()
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH )  
glutInitWindowSize(550, 550)
glutInitWindowPosition(50, 50)
glutCreateWindow("Bubble Pop")  
glutDisplayFunc(display)
glutMouseFunc(on_click)
init()
glutMainLoop()
4

1 に答える 1

3

まず、座標が画面のピクセルに正しくマッピングされません (マウスの座標は、上/左から始まる画面のピクセルで指定されます)。また、gluOrtho2D-1 から 1 までの深さのクリッピング領域を定義します。ここではピクセルを使用しているため、球は 2 ピクセル幅の縦方向のスライス (単なるリング) として表示されます。glOrtho次のパラメーターの代わりに使用するgluOrtho2Dと、両方の問題が修正されます。

    glOrtho(0.0, 550.0, 550.0, 0.0, -100.0, 100.0);

これにより、深さ -100.0 から 100.0 までのすべてが見えるようになり、球には十分すぎるほどです。

第二に、あなたの「球」は小さすぎて見えません...今はピクセルで作業しているので、サイズをいくつかのピクセルに増やします。

    glutSolidSphere(15, 250, 250)

奥行きの印象を与える段階的なシェーディングがないため、まだ球体のようには見えませんが、これは照明の問題であり、より複雑なトピックです。

于 2013-09-25T18:05:40.137 に答える