Jump to content

  • Log In with Google      Sign In   
  • Create Account

14 years ago on June 15th Gamedev.net was first launched! We want to thank all of you for being part of our community and hope the best years are ahead of us. Happy birthday Gamedev.net!

#ActualJoryRFerrell

Posted 13 January 2013 - 03:26 PM

When I start my program and press "N" to create a new cube, the cube is added to a list and rendered. However, with the addition of each new cube, it seems to save the position of the previous one and create any new cube at that spot. Feeling a little frustrated. I don't see how it's

overwriting the initialized position that I give it :

 

objects_Render.append(

                                       Cube_Projectile((0.0,0.0,0.0))

                                       )

                                                                                                              

  angry.png   tongue.png

 

What am I doing wrong?

 

 


SCREEN_SIZE = (800, 600)

import sys
from math import radians

from OpenGL.GL import *
from OpenGL.GLU import *

import pygame
from pygame.locals import *

from gameobjects.matrix44 import *
from gameobjects.vector3 import *
import random

def resize(width, height):

    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(90.0, float(width)/height, .1, 10000.)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()


def init():

    glEnable(GL_DEPTH_TEST)

    glShadeModel(GL_FLAT)
    glClearColor(1.0, 1.0, 1.0, 1.0)

    glEnable(GL_COLOR_MATERIAL)

    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)
    glLight(GL_LIGHT0, GL_POSITION,  (10, 10, 10, 0))


class Ground(object):
    def __init__(self):
        self.position= (0.0, 0.0, 0.0)
        self.color = tuple([random.uniform(0.0,1.0), random.uniform(0.0,1.0) , random.uniform(0.0,1.0)])

    def render(self):
        glColor(self.color[0], self.color[1], self.color[2])

        glTranslatef(self.position[0], self.position[1], self.position[2])

        glBegin(GL_QUADS)

        glNormal3f(0.000000, 1.000000, 0.000000)
        glVertex3f(-2000.000000, 0.000000, -200.000000)
        glVertex3f(-2000.000000, 0.000000, 200.000000)
        glVertex3f(-2000.000000, 0.000000, 200.000000)
        glVertex3f(-2000.000000, 0.000000, -200.000000)

        glEnd()




class Cube_Projectile(object):


    def __init__(self, position):

        self.position = (0.0, 0.0, 0.0)
        self.color = tuple([random.uniform(0.0,1.0), random.uniform(0.0,1.0) , random.uniform(0.0,1.0)])
        self.life = 1000

    def render(self):

        if self.life > 0:

            glColor(self.color)

            # Adjust all the vertices so that the cube is at self.position
            # vertices = [tuple(Vector3(v) + self.position) for v in self.vertices]

            # Draw all 6 faces of the cube



            self.life -= 1


            glTranslatef(self.position[0], self.position[1], self.position[2])

            glBegin(GL_QUADS)

            glNormal3f(2.000000, 0.000000, 0.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)

            glNormal3f(0.000000, -0.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)

            glNormal3f(-2.000000, 0.000000, -0.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)

            glNormal3f(0.000000, -0.000000, -1.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)

            glNormal3f(0.000000, -1.000000, 0.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)

            glNormal3f(0.000000, 1.000000, 0.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)

            glEnd()



def run():

    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE|OPENGL|DOUBLEBUF)

    resize(*SCREEN_SIZE)
    init()

    clock = pygame.time.Clock()

    glMaterial(GL_FRONT, GL_AMBIENT, (0.1, 0.1, 0.1, 1.0))
    glMaterial(GL_FRONT, GL_DIFFUSE, (1.0, 1.0, 1.0, 1.0))


    # Camera transform matrix
    camera_matrix = Matrix44()
    camera_matrix.translate = (10.0, 1.0, 20.0)
    print camera_matrix.translate


    # Initialize speeds and directions
    rotation_direction = Vector3()
    rotation_speed = radians(90.0)
    movement_direction = Vector3()
    movement_speed = 5.0

    objects_Render = []
    ground = Ground()

    while True:

        for event in pygame.event.get():
            if event.type == QUIT:
                return
            if event.type == KEYUP and event.key == K_ESCAPE:
                return


        # Clear the screen, and z-buffer

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        time_passed = clock.tick()

        time_passed_seconds = time_passed / 1000.

        pressed = pygame.key.get_pressed()

        # Reset rotation and movement directions

        rotation_direction.set(0.0, 0.0, 0.0)

        movement_direction.set(0.0, 0.0, 0.0)

        # Modify direction vectors for key presses
        if pressed[K_LEFT]:
            rotation_direction.y = +1.0
        elif pressed[K_RIGHT]:
            rotation_direction.y = -1.0
        if pressed[K_UP]:
            rotation_direction.x = +1.0
        elif pressed[K_DOWN]:
            rotation_direction.x = -1.0
        if pressed[K_d]:
            rotation_direction.z = -1.0
        elif pressed[K_a]:
            rotation_direction.z = +1.0
        if pressed[K_w]:
            movement_direction.z = -1.0
        elif pressed[K_s]:
            movement_direction.z = +1.0
        if pressed[K_n]:

            # Beginning of objects_Render.append()
            objects_Render.append(Cube_Projectile((0.0,0.0,0.0))) # End of objects_Render.append()






        # Calculate rotation matrix and multiply by camera matrix
        rotation = rotation_direction * rotation_speed * time_passed_seconds
        rotation_matrix = Matrix44.xyz_rotation(*rotation)
        camera_matrix *= rotation_matrix

        # Calcluate movment and add it to camera matrix translate
        heading = Vector3(camera_matrix.forward)
        movement = heading * movement_direction.z * movement_speed
        camera_matrix.translate += movement * time_passed_seconds

        # Upload the inverse camera matrix to OpenGL
        glLoadMatrixd(camera_matrix.get_inverse().to_opengl())

        # Light must be transformed as well
        glLight(GL_LIGHT0, GL_POSITION,  (0, 1.5, 1, 7))



        ground.render()

        for obj in objects_Render:

            print "Object: ", objects_Render.index(obj)
            print "Object Position: ", obj.position, "\n"

            tup = []
            tup.append(obj.position[0] + random.uniform(-0.50,0.50))
            tup.append(obj.position[1] + random.uniform(-0.50,0.50))
            tup.append(obj.position[2] + random.uniform(-0.50,0.50))
            obj.position = tuple(tup)

            obj.render()



        # Show the screen
        pygame.display.flip()

run()

#1JoryRFerrell

Posted 13 January 2013 - 03:23 PM

When I start my program and press "N" to create a new cube, the cube is added to a list and rendered. However, with the addition of each new cube, it seems to save the position of the previous one and create any new cube at that spot. Feeling a little frustrated. I don't see how it's

overwriting the initialized position that I give it.  angry.png   tongue.png

 

What am I doing wrong?

 

 


SCREEN_SIZE = (800, 600)

import sys
from math import radians

from OpenGL.GL import *
from OpenGL.GLU import *

import pygame
from pygame.locals import *

from gameobjects.matrix44 import *
from gameobjects.vector3 import *
import random

def resize(width, height):

    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(90.0, float(width)/height, .1, 10000.)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()


def init():

    glEnable(GL_DEPTH_TEST)

    glShadeModel(GL_FLAT)
    glClearColor(1.0, 1.0, 1.0, 1.0)

    glEnable(GL_COLOR_MATERIAL)

    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)
    glLight(GL_LIGHT0, GL_POSITION,  (10, 10, 10, 0))


class Ground(object):
    def __init__(self):
        self.position= (0.0, 0.0, 0.0)
        self.color = tuple([random.uniform(0.0,1.0), random.uniform(0.0,1.0) , random.uniform(0.0,1.0)])

    def render(self):
        glColor(self.color[0], self.color[1], self.color[2])

        glTranslatef(self.position[0], self.position[1], self.position[2])

        glBegin(GL_QUADS)

        glNormal3f(0.000000, 1.000000, 0.000000)
        glVertex3f(-2000.000000, 0.000000, -200.000000)
        glVertex3f(-2000.000000, 0.000000, 200.000000)
        glVertex3f(-2000.000000, 0.000000, 200.000000)
        glVertex3f(-2000.000000, 0.000000, -200.000000)

        glEnd()




class Cube_Projectile(object):


    def __init__(self, position):

        self.position = (0.0, 0.0, 0.0)
        self.color = tuple([random.uniform(0.0,1.0), random.uniform(0.0,1.0) , random.uniform(0.0,1.0)])
        self.life = 1000

    def render(self):

        if self.life > 0:

            glColor(self.color)

            # Adjust all the vertices so that the cube is at self.position
            # vertices = [tuple(Vector3(v) + self.position) for v in self.vertices]

            # Draw all 6 faces of the cube



            self.life -= 1


            glTranslatef(self.position[0], self.position[1], self.position[2])

            glBegin(GL_QUADS)

            glNormal3f(2.000000, 0.000000, 0.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)

            glNormal3f(0.000000, -0.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)

            glNormal3f(-2.000000, 0.000000, -0.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)

            glNormal3f(0.000000, -0.000000, -1.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)

            glNormal3f(0.000000, -1.000000, 0.000000)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glVertex3f(2.000000, -2.000000, 2.000000)

            glNormal3f(0.000000, 1.000000, 0.000000)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glVertex3f(-2.000000, 2.000000, 2.000000)

            glEnd()



def run():

    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE|OPENGL|DOUBLEBUF)

    resize(*SCREEN_SIZE)
    init()

    clock = pygame.time.Clock()

    glMaterial(GL_FRONT, GL_AMBIENT, (0.1, 0.1, 0.1, 1.0))
    glMaterial(GL_FRONT, GL_DIFFUSE, (1.0, 1.0, 1.0, 1.0))


    # Camera transform matrix
    camera_matrix = Matrix44()
    camera_matrix.translate = (10.0, 1.0, 20.0)
    print camera_matrix.translate


    # Initialize speeds and directions
    rotation_direction = Vector3()
    rotation_speed = radians(90.0)
    movement_direction = Vector3()
    movement_speed = 5.0

    objects_Render = []
    ground = Ground()

    while True:

        for event in pygame.event.get():
            if event.type == QUIT:
                return
            if event.type == KEYUP and event.key == K_ESCAPE:
                return


        # Clear the screen, and z-buffer

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        time_passed = clock.tick()

        time_passed_seconds = time_passed / 1000.

        pressed = pygame.key.get_pressed()

        # Reset rotation and movement directions

        rotation_direction.set(0.0, 0.0, 0.0)

        movement_direction.set(0.0, 0.0, 0.0)

        # Modify direction vectors for key presses
        if pressed[K_LEFT]:
            rotation_direction.y = +1.0
        elif pressed[K_RIGHT]:
            rotation_direction.y = -1.0
        if pressed[K_UP]:
            rotation_direction.x = +1.0
        elif pressed[K_DOWN]:
            rotation_direction.x = -1.0
        if pressed[K_d]:
            rotation_direction.z = -1.0
        elif pressed[K_a]:
            rotation_direction.z = +1.0
        if pressed[K_w]:
            movement_direction.z = -1.0
        elif pressed[K_s]:
            movement_direction.z = +1.0
        if pressed[K_n]:

            # Beginning of objects_Render.append()
            objects_Render.append(Cube_Projectile((0.0,0.0,0.0))) # End of objects_Render.append()






        # Calculate rotation matrix and multiply by camera matrix
        rotation = rotation_direction * rotation_speed * time_passed_seconds
        rotation_matrix = Matrix44.xyz_rotation(*rotation)
        camera_matrix *= rotation_matrix

        # Calcluate movment and add it to camera matrix translate
        heading = Vector3(camera_matrix.forward)
        movement = heading * movement_direction.z * movement_speed
        camera_matrix.translate += movement * time_passed_seconds

        # Upload the inverse camera matrix to OpenGL
        glLoadMatrixd(camera_matrix.get_inverse().to_opengl())

        # Light must be transformed as well
        glLight(GL_LIGHT0, GL_POSITION,  (0, 1.5, 1, 7))



        ground.render()

        for obj in objects_Render:

            print "Object: ", objects_Render.index(obj)
            print "Object Position: ", obj.position, "\n"

            tup = []
            tup.append(obj.position[0] + random.uniform(-0.50,0.50))
            tup.append(obj.position[1] + random.uniform(-0.50,0.50))
            tup.append(obj.position[2] + random.uniform(-0.50,0.50))
            obj.position = tuple(tup)

            obj.render()



        # Show the screen
        pygame.display.flip()

run()

 


PARTNERS