Jump to content

View more

Image of the Day

雑魚は多めにして、爽快感重視にしつつ・・・(´・ω・`)
早いとこ、ベースを作って、完成にもっていかないとね。
タイトルもまだ迷ってるだよなぁ。 
#indiedev  #indiegame #screenshotsaturday https://t.co/IwVbswGrhe
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

What am I doing wrong with camera-following-object code?

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
2 replies to this topic

#1 JoryRFerrell2013   Members   

209
Like
0Likes
Like

Posted 04 September 2013 - 09:34 AM

My camera won't follow my object. Or maybe my object is not appearing where it should (meaning my camera is correctly oriented according to the cubes matrix, but I am drawing the cube with incorrect order of commands?).

Is my math wrong, or am I handling the drawing pipeline incorrectly?


SCREEN_SIZE = (1200, 900)

import sys
from math import radians
from math import cos

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

import pygame
from pygame.locals import *

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

from random import *

class Cube_Projectile(object):


    def __init__(self, position):

        self.abs_position = (0.0, 0.0, 0.0)
        self.abs_rotation = [0.0, 0.0, 0.0]

        self.abs_rot_matrix = [[1.0,0.0,0.0,0.0],
                               [0.0,1.0,0.0,0.0],
                               [0.0,0.0,1.0,0.0],
                               [0.0,0.0,0.0,1.0]]

        self.color = (uniform(0.0, 1.0), 1.0, 2.0, uniform(0.0, 1.0))
        self.life = 1000
        self.name = ""
        self.mass = 1
        self.velocity = 0
        self.momentum = self.mass*self.velocity
        self.matrix = Matrix44()

    def render(self, rotation, rot_matrix):

        if self.life > 0:

            glPushMatrix()
            glLineWidth(10)
            glBegin(GL_LINES)
            glColor(3,0,0)
            glVertex(0.0, 0.0, 0.0)
            glVertex(0.0, 0.0, 25.0)
            glColor(0,3,0)
            glVertex(0.0, 0.0, 0.0)
            glVertex(0.0, 25.0, 0.0)
            glColor(0,0,3)
            glVertex(0.0, 0.0, 0.0)
            glVertex(25.0, 0.0, 0.0)
            glEnd()
            glPopMatrix()

            glPushMatrix()
            #glTranslate(self.abs_position[0], self.abs_position[1], self.abs_position[2])

            rot_matrix.translate = self.abs_position
            glLoadMatrixd(rot_matrix.to_opengl())
            glScale(.5,.5,.5)
            print "self.abs_rot_matrix: \n",self.abs_rot_matrix[0], "\n",self.abs_rot_matrix[1], "\n",self.abs_rot_matrix[2],"\n\n","Internal Matrix: \n",glGetDoublev(GL_MODELVIEW_MATRIX),"\n\n\n\n\n"

            glColor(self.color)

            glBegin(GL_QUADS)

            glNormal3f(-1.0, -1.0, 1.0)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glNormal3f(-1.0, -1.0, 1.0)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glNormal3f(-1.0, 1.0, 1.0)
            glVertex3f(-2.000000, 2.000000, 2.000000)
            glNormal3f(-1.0, 1.0, -1.0)
            glVertex3f(-2.000000, 2.000000, -2.000000)

            glNormal3f(-1.0, 1.0, 1.0)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glNormal3f(1.0, 1.0, -1.0)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glNormal3f(1.0, -1.0, -1.0)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glNormal3f(-1.0, -1.0, -1.0)
            glVertex3f(-2.000000, -2.000000, -2.000000)

            glNormal3f(1.0, 1.0, -1.0)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glNormal3f(-1.0, 1.0, 1.0)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glNormal3f(1.0, -1.0, 1.0)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glNormal3f(1.0, -1.0, -1.0)
            glVertex3f(2.000000, -2.000000, -2.000000)


            glNormal3f(-1.0, -1.0, 1.0)
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glNormal3f(1.0, -1.0, 1.0)
            glVertex3f(2.000000, -2.000000, 2.000000)
            glNormal3f(1.0, 1.0, 1.0)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glNormal3f(-1.0, 1.0, 1.0)
            glVertex3f(-2.000000, 2.000000, 2.000000)


            glNormal3f(-1.0, -1.0, 1.0)#---
            glVertex3f(-2.000000, -2.000000, 2.000000)
            glNormal3f(-1.0, -1.0, -1.0)
            glVertex3f(-2.000000, -2.000000, -2.000000)
            glNormal3f(1.0, -1.0, -1.0)
            glVertex3f(2.000000, -2.000000, -2.000000)
            glNormal3f(1.0, -1.0, 1.0)
            glVertex3f(2.000000, -2.000000, 2.000000)

            glNormal3f(1.0, 1.0, 1.0)
            glVertex3f(2.000000, 2.000000, 2.000000)
            glNormal3f(1.0, 1.0, -1.0)
            glVertex3f(2.000000, 2.000000, -2.000000)
            glNormal3f(-1.0, 1.0, -1.0)
            glVertex3f(-2.000000, 2.000000, -2.000000)
            glNormal3f(-1.0, 1.0, 1.0)
            glVertex3f(-2.000000, 2.000000, 2.000000)

            glEnd()

            glPopMatrix()


def resize(width, height):

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


def init():

    glEnable(GL_DEPTH_TEST)
    glShadeModel(GL_FLAT)
    glClearColor(0.0, 0.0, 0.0, 1.0)
    glEnable(GL_COLOR_MATERIAL)
    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)
    glLight(GL_LIGHT0, GL_POSITION,  (10, 10, 10, 0))

def run():

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

    resize(*SCREEN_SIZE)

    init()

    PAUSED = "False"

    clock = pygame.time.Clock()

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

    camera_matrix = Matrix44()

    camera_matrix.translate = (0.0, 0.0, 0.0)

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

    obj_1 = Cube_Projectile((0, 0, 0))
    obj_1.name = "obj 1"
    obj_1.color = (4.0, 0.0, 0.0, 0)

    objects_Render = []

    objects_Render.append(obj_1)

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYUP and event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()


        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        time_passed = clock.tick()
        time_passed_seconds = time_passed / 1000.0
        pressed = pygame.key.get_pressed()
        rotation_direction.set(0.0, 0.0, 0.0)
        movement_direction.set(0.0, 0.0, 0.0)


        if pressed[K_a]:
            rotation_direction.y = +1.0
        elif pressed[K_d]:
            rotation_direction.y = -+1.0
        if pressed[K_DOWN]:
            rotation_direction.x = +1.0
        elif pressed[K_UP]:
            rotation_direction.x = -1.0
        if pressed[K_RIGHT]:
            rotation_direction.z = +1.0
        elif pressed[K_LEFT]:
            rotation_direction.z = -1.0
        if pressed[K_s]:
            movement_direction.z = -10.0
        elif pressed[K_w]:
            movement_direction.z = +10.0
        elif pressed[K_n]:
            objects_Render.append(Cube_Projectile((uniform(-2, 2), uniform(-2, 2), uniform(-2, 2))))

        rotation = rotation_direction * rotation_speed * time_passed_seconds
        rotation_matrix = Matrix44.xyz_rotation(*rotation)
        camera_matrix *= rotation_matrix
        heading = Vector3(camera_matrix.forward)
        movement = heading * movement_direction.z * movement_speed
        objects_Render[0].abs_position += movement * time_passed_seconds
        print "Absolute Position: ", objects_Render[0].abs_position, "\n\n"
        glLight(GL_LIGHT0, GL_POSITION,  (0, 2, 1, 7))

        for obj in objects_Render:
            if objects_Render.index(obj) == 0:
                obj.render(tuple([rotation[0], rotation[1], rotation[2], 0.0]), camera_matrix)
            else:
                obj.render(tuple([rotation[0], rotation[1], rotation[2], 0.0]), camera_matrix)

        if len(objects_Render) != 0:
            glLoadIdentity()
            gluLookAt(camera_matrix.translate[0] - (10*heading[0]),
                      camera_matrix.translate[1] - (10*heading[1]),
                      camera_matrix.translate[2] - (10*heading[2]),
                      camera_matrix.translate[0],
                      camera_matrix.translate[1],
                      camera_matrix.translate[2],
                      camera_matrix.up[0],
                      camera_matrix.up[1],
                      camera_matrix.up[2])

        else:
            glLoadIdentity()
            gluLookAt(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
        pygame.display.flip()



run()








#2 JoryRFerrell2013   Members   

209
Like
0Likes
Like

Posted 04 September 2013 - 09:49 AM

I will eventually get rid of the gluLookAt code. It is deprecated, and I am even upload a version of the same matrix, and altering it a little to replace LookAt won't be to diff...

but I just haven't messed with it yet. :P



#3 3TATUK2   Members   

714
Like
0Likes
Like

Posted 04 September 2013 - 09:58 AM

 [deleted]


Edited by 3TATUK2, 04 September 2013 - 10:03 AM.





Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.