Skip to content

menudoproblema/OnlyGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Description
================================================================================

OnlyGL is a mini-framework to quick develop OpenGL scenes in Python. It requires
pyopengl.

The main class of OnlyGL is Scene in only.gl.scene package. You can create your
own scene creating a class that inherits from Scene. You must define the
following methods:
 * ``init_model`` - Initialize your model
 * ``draw`` - Draw your model

Feautres:
 * Pick objects from scene
 * Get world coordinates from window clicks
 * Disable/Enable lighting
 * Use of camera to get perspective

Other customizable features:
 * Modify the perspective (overriding ``def perspective(self)`` method)
 * Adding mouse motion (overriding
   ``def motionfunc(self, button, state, x, y)``)
 * Extend or override mouse callback (overriding
   ``def mousefunc(self, button, state, x, y)``)
 * Extend or override keyboard callback (overriding
   ``def keyboardfunc(self, *args)``)




Very simple example
================================================================================

from only.gl import colors
from only.gl.scene import Scene


class MyScene(Scene):

    def init_model(self):
        self.x = 0.0
        self.y = -0.5
        self.z = 0.0
        self.color = colors.GREEN

    def draw(self):
        # Draw the floor
        glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, self.color)
        glTranslatef(self.x, self.y, self.z)
        self.draw_box(200.0, 0.5, 200.0)
        # And your model

    def draw_box(self, a, b, m):
        x = float(a) / 2.0
        z = float(m) / 2.0
        y = float(b)

        glShadeModel(GL_FLAT)

        glBegin(GL_QUAD_STRIP)

        glNormal3f(0.0, 0.0, -1.0)
        glVertex3f(x, 0, -z)
        glVertex3f(-x, 0, -z)
        glVertex3f(x, y, -z)
        glVertex3f(-x, y, -z)

        glNormal3f(0.0, 1.0, 0.0)
        glVertex3f(x, y, z)
        glVertex3f(-x, y, z)

        glNormal3f(0.0, 0.0, 1.0)
        glVertex3f(x, 0, z)
        glVertex3f(-x, 0, z)

        glNormal3f(0.0, -1.0, 0.0)
        glVertex3f(x, 0, -z)
        glVertex3f(-x, 0, -z)

        glEnd()

        glBegin(GL_QUADS)
        glNormal3f(1.0, 0.0, 0.0)
        glVertex3f(x, 0, -z)
        glVertex3f(x, y, -z)
        glVertex3f(x, y, z)
        glVertex3f(x, 0, z)
        glEnd()

        glBegin(GL_QUADS)
        glNormal3f(-1.0, 0.0, 0.0)
        glVertex3f(-x, 0, -z)
        glVertex3f(-x, 0, z)
        glVertex3f(-x, y, z)
        glVertex3f(-x, y, -z)
        glEnd()


def main():
    glutInit(sys.argv)

    scene = MyScene()

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
    glutInitWindowSize(scene.viewport.width, scene.viewport.height)
    glutInitWindowPosition(0, 0)
    glutCreateWindow("My first Scene with OnlyGL")

    scene.init()

    glutDisplayFunc(scene.displayfunc)
    glutReshapeFunc(scene.reshapefunc)
    glutKeyboardFunc(scene.keyboardfunc)
    glutMouseFunc(scene.mousefunc)

    glutMainLoop()

print "Hit ESC key to quit."
main()




Models and collisions
================================================================================

To facilitate model development, OnlyGL provides a Model class. This class is
allocated in only.gl.models package. This Model class offers minimal information
about the model. A Model stores its (x,y,z) coordinates, its color and its name
(OpenGL name, for pick functions). Furthermore, a Model offers a selection
mechanism for remark the object in the scene.

Model class is an abstract class and it must not use directly. You can use
``model`` method to define what object is rendered.

A BoxModel is provided too. This is a subclass of Model, the simplest object
that it can be rendered.

OnlyGL provides a very simple collision detection system. Each model defines a
``collision`` method who indicates if a collision exists. Furthermore, this
method receives a ``xzy`` optional parameter. If xyz is True, it references a 3D
collision. In other case, only 2D collision is considered.

About

Mini-framework to develop OpenGL scenes in Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages