我有一个基于this example的HUD游戏
我有一个带有两个gluOrtho2D
视图的pyglet应用程序。一个是1/1映射到屏幕上,作为我的HUD。它被映射到游戏世界,所以它可以缩放。在
当游戏世界中的玩家被渲染到某个位置时,我想在HUD中显示这个玩家的名字。但是HUD对世界对象渲染位置一无所知,世界对屏幕的缩放一无所知。在
有没有一种方法可以找出在屏幕上呈现的东西,或者可以找出或者简单地反作用上下文中设置的当前缩放比例?在
from pyglet import clock, window, font
from pyglet.gl import *
class Hud(object):
def __init__(self, win: window.Window):
self.fps = clock.ClockDisplay()
self.helv = font.load('Helvetica', 12.0)
self.text = font.Text(self.helv, "This text does not scale", \
x=0, y=0, color=(1, 1, 1, 0.5))
def draw(self):
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
self.text.draw()
class World(object):
def __init__(self):
self.helv = font.load('Helvetica', 12.0)
self.text = font.Text(self.helv, "This text should not scale", \
x=0, y=0, color=(1, 1, 1, 0.5))
def draw(self):
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
self.text.draw()
class App(object):
def __init__(self):
self.win = window.Window(fullscreen=False, vsync=True, width=800, height=600)
self.world = World()
self.camera = Camera(self.win)
self.hud = Hud(self.win)
clock.set_fps_limit(60)
def run(self):
while not self.win.has_exit:
self.win.dispatch_events()
self.camera.project_world()
self.world.draw()
self.camera.project_hud()
self.hud.draw()
clock.tick()
self.win.flip()
app = App()
app.run()
现在,我已经通过丑陋的黑客攻击解决了这个问题。敏感读者请不要继续阅读。在
我现在计算出摄像机在世界上的比例和猎户座,然后把世界链接到HUD,这样HUD就可以读取属性并计算文本本身的位置。在
这当然是我不想要的意大利面代码反模式。在
我不是一个python程序员,但我认为我对opengl的问题有足够的理解,所以我将尝试回答。请原谅我的语法。在
我相信你想要一个二维的位置来代表你场景中的一个3D点。你想知道二维的位置,这样你就可以在那里画一些文字。您有三维世界的模型视图和投影矩阵。得到二维位置是一个简单的矩阵乘法问题。在
假设我的位置是1.0.0
最后,}将包含3D点的2D投影。在
x
和{注意:请确保在矩阵设置完成后放置
glGetDoublev()
调用。将它们存储在一个变量中并使用它投影到二维希望这有帮助
相关问题 更多 >
编程相关推荐