Re: [PyOpenGL-Users] converting "object position" to "view position" in (py)opengl
Brought to you by:
mcfletch
|
From: Astan C. <ast...@al...> - 2009-07-02 03:20:58
|
Hi,
I'm drawing characters using pygame and pyopengl like this:
def __init__(self):
pygame.font.init()
self.font = pygame.font.Font(FONT,18)
self.char = []
for c in range(256):
self.char.append(self.CreateCharacter(chr(c)))
self.char = tuple(self.char)
def CreateCharacter(self,s):
try:
letter_render = self.font.render(s,1,(255,255,255), (0,0,0))
letter = pygame.image.tostring(letter_render,'RGBA',1)
letter_w,letter_h = letter_render.get_size()
except:
letter = None
letter_w = letter_h= 0
return (letter,letter_w,letter_h)
def textView(self):
w = self.Screen[0]
h = self.Screen[1]
glViewport(0,0,w,h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, w - 1.0, 0.0, h - 1.0, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def Print(self,s,x,y):
s = str(s)
i = 0
lx = 0
length = len(s)
self.textView()
glPushMatrix()
while i < length:
glRasterPos2i(x + lx, y)
ch = self.char[ ord( s[i] ) ]
glDrawPixels(ch[1], ch[2], GL_RGBA, GL_UNSIGNED_BYTE, ch[0])
lx += ch[1]
i += 1
glPopMatrix()
and then when I need to print in a certain part of the screen, I do a
self.Print("text",0,0) which will do a print on the bottom left corner.
I don't think i'm using glBitmap
Cheers
Astan
Dirk Reiners wrote:
> Hi Astan,
>
> Astan Chee wrote:
>
>> Hi,
>> Im relatively new to opengl and I'm not familiat with its jargon but
>> what I have is objects in a 3D world in various positions and a camera
>> that can "move" around. What I'm trying to do is if the distance between
>> object and camera is close enough, display some information on the
>> screen on the object.
>> I know how to calculate distance and I know how to print/display text in
>> opengl (I'm using glOrtho and glRasterPos2i to map out the characters
>> one at a time).
>> Anyway, what I'm having problems with is how do I calculate where to
>> display these information on the screen so that it overlaps the object
>> (assuming I know the distance and the angle of the camera and the object
>> relative to the camera). Does this make sense? I've attached an image
>> that I photoshopped to look like what I'm trying to do.
>>
>
> What are you using to draw the characters? glBitmap? Your use of glRasterPos2i
> hints at that.
>
> In that case you can just ignore the glOrtho and use glRasterPos3f to position
> your text in the 3D scene (e.g. in the center of the object). The main
> difficulty is putting the chacaters next to each other, and glBitmap takes care
> of that nicely.
>
> If you're using a different method things get a little more complicated (but not
> too much, really).
>
> Dirk
>
>
|