好.我厌倦了谷歌搜索和阅读大量文档没有结果.
我的目标很简单:让pyglet逐像素地绘制图像.
我一直在寻找没有结果的时间.任何人都可以给出一个简短程序的例子,该程序在显示中绘制指定逐个像素的颜色吗?例如:绘制从黑色到白色的渐变.
我试图在pyglet中混合使用opengl中的2d和3d,即绘制一个3d场景,然后切换到正交投影并在顶部绘制内容.我绘制3d东西,将投影矩阵推到堆栈,做一个glOrtho投影矩阵,绘制2d的东西,然后从堆栈中弹出前一个矩阵.3d的东西很好,但由于某种原因,2d部分根本没有绘制,即使是单独的.这是代码:
class Window(pyglet.window.Window):
# resolution
width, height = 1024, 786
def __init__(self, width, height):
# initialise window
super(Window, self).__init__(width, height)
# set title
self.set_caption("OpenGL Doss")
# call update() at 30fps
pyglet.clock.schedule_interval(self.update, 1 / 30.0)
glEnable(GL_TEXTURE_2D) # enable textures
glShadeModel(GL_SMOOTH) # smooth shading of polygons
glClearColor(0.0, 0.0, 0.0, 0.0)
glClearDepth(1.0)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) # make stuff look nice
self.world = World() # initialise world
self.label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=20,
width=10, height=10)
def on_resize(self, width, height):
print 'on resize' …Run Code Online (Sandbox Code Playgroud) 我想创建一个带有播放和停止按钮的简单gui来在python中播放mp3文件.我使用Tkinter创建了一个非常简单的gui,它包含2个按钮(停止和播放).
我创建了一个执行以下操作的函数:
def playsound () :
sound = pyglet.media.load('music.mp3')
sound.play()
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
我将该功能添加为按钮播放的命令.我还做了一个不同的功能来阻止音乐:
def stopsound ():
pyglet.app.exit
Run Code Online (Sandbox Code Playgroud)
我将此功能添加为第二个按钮的命令.但问题是,当我点击游戏时,python和gui会冻结.我可以尝试关闭窗口,但它没有关闭,停止按钮没有响应.我知道这是因为pyglet.app.run()正在执行,直到歌曲结束,但我究竟如何阻止这个?当我点击按钮时,我希望gui停止播放音乐.关于我在哪里可以找到解决方案的任何想法?
我的python应用程序启动一个创建pyglet窗口的子进程.当pyglet窗口打开时,它位于所有其他窗口的前面,并且需要键盘焦点.我希望我的pyglet窗口在后台打开,而不是焦点.这可能吗?
我正在使用的代码的简化版本:
import pyglet
pyglet.window.Window()
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
我正在使用Windows 7,以防万一.
我花了最近几个星期的时间来看看openGL.虽然我对一些较旧的NeHe示例没有问题,但从我读过的所有内容来看,OpenGL4是一个完全不同的过程.我可以访问红皮书和超级圣经,但前者仍然提供传统的opengl调用,后者使用自己的库.在理解如何将代码放在项目中时,两者都没有特别有用.例如,我目前的理解是glu和glut是遗留的,不应该用于opengl 4.
我可以非常容易地为假设的模型空间生成顶点.我很难理解模型最终会如何出现在我的屏幕上.大约95%的尝试最终都是黑屏.
提前致谢.
这是一些代码:
# primatives.py
from collections import Iterable
from functools import reduce
import operator
import numpy as np
from exc import UnimplementedMethod
class Primative(object):
SIZE = 1 # number of pixels on a default grid
def __init__(self, point=None, *args, **kwargs):
self.point = point if isinstance(point, Iterable) else [0, 0, 0]
self.point = np.array(self.point, dtype=np.float32)
scaler = [self.SIZE/2]*len(self.point)
self.point = (self.point * scaler).tolist()
@property
def active(self):
attr = "__active__"
if not hasattr(self, attr):
setattr(self, attr, False)
return getattr(self, …Run Code Online (Sandbox Code Playgroud) 在我见过的有关Pyglet的所有Web教程中,似乎没有一个教程使用类来包含pyglet.window.Window实例。例如,大多数教程看起来像
import pyglet
game_window = pyglet.window.Window()
@game_window.event
def on_draw():
#dostuff
while __name__ == "__main__":
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
我在将这段代码重组为一个类时遇到麻烦。我打算这样做的代码在这里:
import pyglet
from pyglet.gl import *
from Board import Board
class Frontend:
def __init__(self,xs, ys):
self.GameInstance = Board(xs,ys)
self.GameWindow = pyglet.window.Window(width=512, height=512,visible=False)
@GameWindow.event
def on_draw(self):
self.GameWindow.clear()
f = Frontend()
Run Code Online (Sandbox Code Playgroud)
运行此代码时,出现以下错误:
Traceback (most recent call last):
File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 7, in <module>
class Frontend:
File "C:/Users/PycharmProjects/Nothing/2048/Frontend.py", line 13, in Frontend
@GameWindow.event
NameError: name 'GameWindow' is not defined
Run Code Online (Sandbox Code Playgroud)
当我更换@GameWindow.event同@self.GameWindow.event在试图解决NameError我得到:
Traceback (most recent …Run Code Online (Sandbox Code Playgroud) 我想在单独的线程中运行 pyglet,以便我可以实现输入的用户界面,而不会被pyglet.app.run().
import pyglet
class Window(pyglet.window.Window):
def __init__(self):
pyglet.window.Window.__init__(self, visible=True)
self.push_handlers(on_draw=self.on_draw)
self.im = pyglet.resource.image('image.jpg')
pyglet.app.run()
def on_draw(self):
self.clear()
import threading
class Thread(threading.Thread):
def run(self):
w = Window()
Run Code Online (Sandbox Code Playgroud)
跑步
Window()
Run Code Online (Sandbox Code Playgroud)
工作正常。然而,运行
t = Thread()
t.start()
Run Code Online (Sandbox Code Playgroud)
结果为Segmentation fault (core dumped),这是由对 的调用引起的pyglet.resource.image()。省略该调用可以消除该问题。
具体来说,是什么导致了这个问题,我该如何纠正它?更一般地说,使用 pyglet 渲染窗口同时允许其他程序执行的推荐方法是什么?有一个更好的方法吗?
我正在制作一个应用程序,让您可以在不同的系统上同步播放音乐.对于该项目,我决定使用twisted,PyGtk2,Pyglet.我对如何运行主循环感到困惑.我应该在一个单独的线程中运行pyglet的循环,还是应该实现一个集成twisted,pygtk2,pyglet的新反应器.如果我尝试将三个环路集成在一起,性能是否会受损?
我正在尝试使用pyglet创建一个简单的应用程序.到目前为止,我的主要问题是我似乎无法使用alpha对图像进行blit - 所有透明像素都会转换为黑色像素.我不确定问题是关于加载图像还是blitting.以下是我如何渲染图像的基本概述:
import pyglet
import pyglet.clock
window = pyglet.window.Window()
window.config.alpha_size = 8
#fancy text
text = pyglet.resource.image("text.png")
#background image
bg = pyglet.resource.image("bg.png")
bg.blit(0, 0)
text.blit(100, 100)
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.提前致谢.
pyglet ×10
python ×9
graphics ×2
opengl ×2
rendering ×2
asynchronous ×1
class ×1
drawing ×1
math ×1
networking ×1
opengl-4 ×1
overriding ×1
pipeline ×1
pixel ×1
playback ×1
pygtk ×1
python-2.7 ×1
python-3.x ×1
subprocess ×1
twisted ×1
windows ×1