2010-12-20 1 views
0

バグをPygletで処理しようとしていましたが、 pyglet/graphics/__init__.pyファイル。私の推測では、ジオメトリをバッチに追加するときに構文的に間違ったことをやっているということです。pygletでバッチを作成しようとすると "too pack values to unpack error"というエラーメッセージが表示される

私はエラーを作成する重要な部分に私のコード削減:

from pyglet.gl import * 
from pyglet.graphics import * 
import pyglet 

batch = pyglet.graphics.Batch() 
img = pyglet.image.load('pic.png') 
texture = img.get_texture() 

class TextureEnableGroup(pyglet.graphics.Group): 
    def set_state(self): 
     glEnable(GL_TEXTURE_2D) 
    def unset_state(self): 
     glDisable(GL_TEXTURE_2D) 

texture_enable_group = TextureEnableGroup() 

class TextureBindGroup(pyglet.graphics.Group): 
    def __init__(self, texture): 
     super(TextureBindGroup, self).__init__(parent=texture_enable_group) 
     self.texture = texture 
    def set_state(self): 
     glBindTexture(GL_TEXTURE_2D, self.texture.id) 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    def __eq__(self, other): 
     return (self.__class__ is other.__class__ and self.texture == other.__class__) 

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), (('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205)))) 

答えて

0

marcogのおかげで、 スクリプトの正しい最終ラインである:解決

batch.add(6, GL_TRIANGLES, TextureBindGroup(texture), ('v3i', (64, 64, 0, -64, -64, 205, -64, 64, 205, 64, -64, 205, 64, 64, 0, -64, -64, 205)), ('t2i', (0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1))) 

すなわち問題=)

問題は、私は、単一のタプルとしてすべてのデータを送信した部分であった(これはmarcogは指摘されている)、また、ジオメトリデータのバッチの長さの間違った値を渡す。 6つの頂点を12の代わりに返します。

0

「解凍するにはあまりにも多くの値が」あなたは

a, b = "a b c".split(" ") 

のようなことを行うときに取得エラーですsplitは3つの値を返しますが、それらを2つに固定しようとします。 最後の行のどこかでかっこが間違っていると思います。そのためにいくつかの明確な構文を使用してみてください。今のところそれほど恐ろしくて判読不能です。

+0

私はgoogleを使って考えましたが、rpoblemはpygletのpythonファイルのどこかでエラーが発生したということでした。ですから、私はbatch.add()関数を何らかの方法で正しく使用していないと思います。問題は、私はそれをどのように使うべきですか? – Bartvbl

+0

そのためにpygletドキュメントを読む必要があります。あなたはあなたが飼いたいものを食べていますか? *の構文は読み取れません。代わりにいくつかの変数を使うのはどうですか? –

0

batch.add()の4番目の引数が、pygletが期待する形式に従わないと思います。これを確認すると便利かもしれません。

また、エラーが発生した箇所のpygletの行を見ると、より多くの情報を得ることができます。この問題はPyglet関数に渡す引数の問題になりがちです。

PS:documentationaddとなる可能性があります。

1

あなたの問題は、この行である:

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), (('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205)))) 

私はあるべきと考えている:私は(tuple), (tuple))にフォーマット((tuple), (tuple))から最後の引数をどのように変化するかを

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), ('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205))) 

注意してください。私はpygletに精通していませんが、documentationからbatch.add()を呼び出す正しい方法であることがわかりました。 *dataは、関数呼び出しの最後のパラメータの可変リストを表し、タプルや試行したようなリストではないことに注意してください。

これを試してみて、それがどのように機能するか教えてください。

+0

はい。それは問題の一部を解決します:) 唯一の問題は、ポイントとテクスチャ座標を含む配列があることです。私はそれらをどのようにこの関数に渡すことができるか知っていますか?Pythonは、あなたがパラメータ入力として渡す配列を扱うための何らかの方法を提供していますか? – Bartvbl

+0

@Bartvbl配列では、numpy配列またはPythonリストを意味しますか? – marcog

+0

python list。 (申し訳ありませんが、私はまだ完全にはPythonの用語に慣れていません) – Bartvbl

関連する問題