私は3つのボタンを持つメインメニューを作成しました。最初の2つのボタンは2Dグラフをプロットします。 "backspace"または "escape"を押すと、3つのボタンでメインメニューに戻ります。最後の(3番目の)ボタンは、STLファイルから3Dメッシュをプロットします。 ____________________ 図1:メインメニュー。 ____________________ ____________________ 図2:「A」ボタンが押されたとき。 ____________________ ____________________________ 図3: "3D" ボタンがOpenGLとpygameで3Dメッシュの後に2D画像をプロットするには?
_____________________問題をを押すと:私は非常に簡単にナビゲートすることができ、 "B" ボタンが _____________________ ____________________________ 図4を押下第1ボタンと第2ボタンの間にあるが、私が少なくとも1回3Dメッシュをプロットしたら、もう1番目と2番目のボタンを押すことができる。 3Dメッシュをプロットする
コード:(残念ながら私は原因プライベートデータにコード全体をアップロードすることはできませんよ。)
def main():
pygame.init()
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
# Using depth test to make sure closer colors are shown over further ones
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
# Default view
glMatrixMode(GL_PROJECTION)
gluPerspective(45, (display[0]/display[1]), 0.5, 40)
glTranslatef(0.0,0.0,-17.5)
inc_x = 0
inc_y = 0
accum = (1,0,0,0)
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
#Rotating about the x axis
if event.key == pygame.K_UP:
inc_x = pi/100
if event.key == pygame.K_DOWN:
inc_x = -pi/100
# Rotating about the y axis
if event.key == pygame.K_LEFT:
inc_y = pi/100
if event.key == pygame.K_RIGHT:
inc_y = -pi/100
# Reset to default view
if event.key == pygame.K_SPACE:
accum = (1,0,0,0);inc_x = 0.0;inc_y = 0.0;
if event.key == K_BACKSPACE or event.key == pygame.K_ESCAPE:
intro = False;
glDisable(GL_DEPTH_TEST)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW)
game_intro();
if event.type == pygame.KEYUP:
# Stoping rotation
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
inc_x = 0.0
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
inc_y = 0.0
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
inc_y = pi/100
if event.button == 3:
inc_y = -pi/100
if event.button == 4:
inc_x = pi/100
if event.button == 5:
inc_x = -pi/100
rot_x = normalize(axisangle_to_q((1.0,0.0,0.0), inc_x))
rot_y = normalize(axisangle_to_q((0.0,1.0,0.0), inc_y))
accum = q_mult(accum,rot_x)
accum = q_mult(accum,rot_y)
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf(q_to_mat4(accum))
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
triangle()
pygame.display.flip()
pygame.time.wait(10)
game_intro()
問題についての私の考え:私は私を引き受けます私のアプリケーションでポリゴンをレンダリングすると深さテストとブレンドが有効になるため、問題があります。 深度テストとブレンドを無効にしようとしました。
glDisable(GL_DEPTH_TEST)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW)
game_intro();
はまた、私は通常の2Dモードに戻るために、同様の機能のglDrawPixelsとglCopyPixelsを使用しようとしましたが、それはうまくいきませんでした。
ありがとうございました。私は正射投影と透視図マトリックスについて同じ考えを持っていました。それが上記の質問の理由ですが、私は透視図の表示をオフにし、正投影をONにする機能を知らなかったのです。私はopenGlを2週間も使っていないので、とても新しいです。あなたが示唆しているように、私は次のコードを実行しようとしましたが、残念ながら問題は同じままです。 glMatrixMode(GL_PROJECTION); gluOrtho2D(45、(ディスプレイ[0] /ディスプレイ[1])、0。5、40) –
パラメータをgluOrtho2Dに正しく設定してください。 apiを確認すると、署名は:gluOrtho2D(GLdouble left、GLdouble right、GLdouble bottom、GLdouble top)です。使用する座標系に基づいてこれらを設定する必要があります。例えば。 (0、0)、右下角(1,1)、左下角(-1、-1)の座標系に対して(-1,1、-1,1)このことは、プロットを描画するために使用される座標と一貫していなければなりません。私。この例のようにスクリーン座標を使用するか-1を1にするかを指定します。 – sparkplug