473,554 Members | 2,835 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

PyOpenGL Tutorial?

I need a tutorial for PyOpenGL (specifically, to be used with wxPython).
I searched with Google and didn't find one. Does anybody know where one
is?

-- Ratfink

Jul 23 '08 #1
1 6711
On Jul 23, 10:07*pm, Clay Hobbs <c...@lakeserv. netwrote:
I need a tutorial for PyOpenGL (specifically, to be used with wxPython).
I searched with Google and didn't find one. *Does anybody know where one
is?
PyOpenGL is just a wrapper for OpenGL. The API is identical. Do you
need an OpenGL tutorial?

As for wxPython, you just subclass wxGLCanvas. Call the method
SetCurrent() before you call OpenGL (e.g. through PyOpenGL) and
SwapBuffers() when you are done. See the wxWidgets reference.

Personally I think PyOpenGL is a slow beast. It is not just a thin
wrapper over OpenGL, but bloated with sanity checks, exception
handling, etc (look at the code, it is pure Python and easy to read).
I prefer to put all calls to OpenGL in a C DLL, and call that with
ctypes. If I make repeated calls to functions like glVertex3f, I want
them to to be fast, thus C is indicated over Python. And if all I do
in C is to make calls into OpenGL, there is no real advantage to using
Python here - the Python code would look almost exactly the same, but
would be slower by several orders of magnitude. By the way, I still
use wxGLCanvas from wxPython to set things up. The ctypes call into my
C DLL is called between SetCurrent() and SwapBuffers().

If you want a pure Python solution, you will need to use display
lists, vertex arrays (with NumPy) or vertex buffers (if your graphics
card supports it) to get acceptable performance.

Here is a short tutorial:

import wx
import wx.glcanvas
import ctypes

glrender = ctypes.pydll.gl render.render # use ctypes.cdll to call with
GIL released
glrender.argtyp es = (ctypes.c_int, ctypes.c_int,)
glrender.restyp e = None

class MyCanvas(wx.glc anvas.GLCanvas) :

def __init__(self, parent):
attribList = (wx.glcanvas.WX _GL_DOUBLEBUFFE R,
wx.glcanvas.WX_ GL_RGBA, 0)
wx.glcanvas.GLC anvas.__init__( self, parent, -1, attribList =
attribList)
self.context = wx.glcanvas.GLC ontext(self)
self.Bind(wx.EV T_SIZE, self.OnSize)
self.Bind(wx.EV T_PAINT, self.OnPaint)

def OnSize(self, evt):
w,h = self.GetClientS ize()
self.w = w
self.h = h
dc = wx.ClientDC(sel f)
self.Render(dc)

def OnPaint(self, evt):
dc = wx.PaintDC(self )
self.Render(dc)

def Render(self, dc):
self.SetCurrent ()
glrender(self.w , self.h)
self.SwapBuffer s()

And then in glrender.c, put the following:
#include <GL\gl.h>
#include <GL\glu.h>
#include <GL\glext.h>

__declspec(dlle xport)
void render(int w, int h)
{
/* calls to OpenGL goes here */
return;
}

And for Python 2.5.x on Windows, compile with:

gcc -O2 -o glrender.dll -shared -lopengl -lmsvcr71 glrender.c


Jul 25 '08 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
4048
by: Erik Max Francis | last post by:
I was interesting in adding selection and hit testing to ZOE, and was looking at the PyOpenGL wrappers' handling of selection and picking. I see glSelectBuffer to specify the size of the buffer, and glRenderMode properly returns the number of hits when put back into GL_RENDER mode, but I don't see any way within PyOpenGL itself to access the...
2
3924
by: matt.walsh | last post by:
Hey I'm a programmer looking to port some of my opengl ...although limited into a python app I've made... I'd like to know where to find any python/opengl source or a tutorial etc.. whatever I'd like to get a series of points that represent a 3d slope presented to the user. Thanks Matt
1
3433
by: Marco | last post by:
I must use text in Opengl, Python This text is for architecture design then I need to use AutoCad fonts (extension .shx). I have two troubles: I don't find a guide, a good program, something for use any kind of fonts in PyOpengl. The nehe tutorial has some bugs in translation to Python. I need to scale rotate the text.
5
1758
by: Sébastien Ramage | last post by:
Bonjour à tous, Dans la folie j'ai installé le nouveau python, impatient de voir les nouveautés mais je pense que j'ai été un peu rapide car j'ai voulu utiliser pyOpenGL et là problème il n'existe pas pour python 2.5 ?!!! de plus il semble que pyopengl est été abandonné depuis 2005 ? plus rien ne bouge sur le site... je suis sous...
0
1442
by: sweetmelon | last post by:
(I'm a newbie in Python and pyOpenGL.) Environment: WinXP SP2 Python ver. 2.5 WingIDE easy_install is installed PIL, pyNum is installed Download PyOpenGL-3.0.0a5-py2.5.egg run: easy_install PyOpenGL-3.0.0a5-py2.5.egg pyOpenGL is installed in
0
1344
by: shirish | last post by:
Hi all, Is it possible to have Python+Pygame+PyOpenGL in one compact package so people can play the games released at pyweek.org . I have been having a hard time getting the whole thing on windows as well as linux (Ubuntu 7.04) . Strangely, my pleas for the same on pyopengl have gone unanswered....
2
2230
by: seb.haase | last post by:
Hi, I am distributing a package with a precompiled collection of modules and packages useful for Python based medical/biological/astronomical image analysis and algorithm development. (Codename: Priithon). For Priithon I put all modules/packages in a simple / single directory (tree) including one starting batch/script file. This script sets...
0
1046
by: Colin J. Williams | last post by:
I have just installed PyOpenGL and get a series of warning messages: Best match: PyOpenGL 3.0.0b3 Downloading http://downloads.sourceforge.net/pyopengl/PyOpenGL-3.0.0b3.zip?modtime=1213363873&big_mirror=0 Processing PyOpenGL-3.0.0b3.zip Running PyOpenGL-3.0.0b3\setup.py -q bdist_egg --dist-dir...
0
309
by: Mike C. Fletcher | last post by:
arsyed wrote: .... But note regarding the second tutorial there that the PyOpenGL 3.x *does* supply wrappers for most publicly known extensions, so you shouldn't have to create your own wrappers for them any more. There's also tutorials that are not wxPython specific on the PyOpenGL documentation page. HTH,
0
7573
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
0
7778
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
0
8008
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7527
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
7857
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
1
5412
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes...
0
5135
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert...
1
1992
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
1
1109
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.