sorry to hear of your vista troubles mate,
im not shure where ive gone wrong ive just spent the past hour moving my translations and rotations about and this is as close as i can get im shure its a problem with the translations but i just cant see where from.
anyway heres where ive got.
''
'' This Code Was Created By Jeff Molofee 2000
'' A HUGE Thanks To Fredric Echols For Cleaning Up
'' And Optimizing The Base Code, Making It More Flexible!
'' If You've Found This Code Useful, Please Let Me Know.
'' Visit My Site At nehe.gamedev.net
option explicit
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "fbgfx.bi"
screen 18, 16, , 2
glViewport 0, 0, 640, 480
glMatrixMode GL_PROJECTION
glLoadIdentity
gluPerspective 45.0, 640.0/480.0, 0.1, 1000.0
glMatrixMode GL_MODELVIEW
glLoadIdentity
glShadeModel GL_SMOOTH
glClearColor 0.0, 0.0, 0.0, 0.5
glClearDepth 1.0
glEnable GL_DEPTH_TEST
glDepthFunc GL_LEQUAL
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
type mat
m0 as double
m1 as double
m2 as double
m3 as double
m4 as double
m5 as double
m6 as double
m7 as double
m8 as double
m9 as double
m10 as double
m11 as double
m12 as double
m13 as double
m14 as double
m15 as double
end type
type entity_pos
x_pos as double
y_pos as double
z_pos as double
end type
type entity_rot
x_rot as double
y_rot as double
z_rot as double
end type
type entity
position as entity_pos ptr
rotation as entity_rot ptr
matrix as mat ptr
end type
declare sub draw_piramid( object as entity ptr )
declare sub draw_box( object as entity ptr )
declare sub loadentityidentity( object as entity ptr )
declare sub positionentity( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
declare sub moveentity( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
declare sub moveentityW( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
declare sub rotateentity( object as entity ptr , xpos as double , ypos as double , zpos as double )
declare sub copymatrix4x4( destination as entity ptr , byval source as entity ptr )
declare sub mulmatrix4x4( byval matrix1 as entity ptr , byval matrix2 as entity ptr , resultmatrix as entity ptr )
declare sub transposematrix( matrix as entity ptr )
declare sub multranslmatrix4x4( byval m1 as entity ptr , byval m2 as entity ptr , destination as entity ptr )
declare sub Grid( byval overall_size as integer , byval spacings as integer )
declare sub renderworld( camera as entity ptr )
declare sub clearworld()
declare sub MoveRotateCam( camera as entity ptr )
declare function new_entity() as entity ptr
declare sub convertMarray( dest as double ptr , byval source as entity ptr )
declare sub delete_entity( object as entity ptr )
dim shared as double Psin(0 to 360) , Pcos(0 to 360)
dim x as integer
for x = 1 to 360
Psin( x ) = sin( x * 3.1415 / 180.0 )
Pcos( x ) = cos( x * 3.1415 / 180.0 )
next
dim shared as entity ptr object0 , object1 , camera
object0 = new_entity()
object1 = new_entity()
camera = new_entity()
loadentityidentity( object0 )
loadentityidentity( object1 )
positionentity( object0 , 1.0 , 1 , -16.0 )
positionentity( object1 , 0 , 1 , 0 )
positionentity( camera , 0 , -5 , -25 )
do
draw_piramid( object0 )
draw_box( object1 )
Grid( 500 , 10 )
renderworld( camera )
clearworld()
MoveRotateCam( camera )
loop while not inkey$ = chr(27)
delete_entity( object0 )
delete_entity( object1 )
delete_entity( camera )
function new_entity() as entity ptr
dim tmp_entity as entity ptr
tmp_entity = callocate( len(entity) )
tmp_entity->position = callocate(len(entity_pos))
tmp_entity->rotation = callocate(len(entity_rot))
tmp_entity->matrix = callocate(len(mat))
return(tmp_entity)
end function
sub MoveRotateCam( camera as entity ptr )
if multikey(SC_LEFT) then camera->rotation->y_rot -= 1
if multikey(SC_RIGHT) then camera->rotation->y_rot += 1
if multikey(SC_UP) then camera->rotation->x_rot += 1
if multikey(SC_DOWN) then camera->rotation->x_rot -= 1
if multikey(SC_W) then camera->position->z_pos += 0.2
if multikey(SC_S) then camera->position->z_pos -= 0.2
if multikey(SC_A) then camera->position->x_pos += 0.2
if multikey(SC_D) then camera->position->x_pos -= 0.2
if multikey(SC_I) then camera->position->y_pos += 0.2
if multikey(SC_K) then camera->position->y_pos -= 0.2
end sub
sub clearworld()
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
end sub
sub delete_entity( object as entity ptr )
deallocate(object->rotation)
deallocate(object->position)
deallocate(object->matrix)
deallocate(object)
end sub
sub renderworld( camera as entity ptr )
dim as double cam(0 to 3,0 to 3)
loadentityidentity( camera )
rotateentity( camera , 0 , camera->rotation->y_rot , 0 )
rotateentity( camera , camera->rotation->x_rot , 0 , 0 )
rotateentity( camera , 0 , 0 , camera->rotation->z_rot )
moveentity( camera , camera->position->x_pos , camera->position->y_pos , camera->position->z_pos )
transposematrix( camera )
convertMarray( @cam(0,0) , camera )
glloadmatrixd( @cam(0,0) )
flip
end sub
sub convertMarray( dest as double ptr , byval source as entity ptr )
dest[0] = source->matrix->m0
dest[1] = source->matrix->m1
dest[2] = source->matrix->m2
dest[3] = source->matrix->m3
dest[4] = source->matrix->m4
dest[5] = source->matrix->m5
dest[6] = source->matrix->m6
dest[7] = source->matrix->m7
dest[8] = source->matrix->m8
dest[9] = source->matrix->m9
dest[10] = source->matrix->m10
dest[11] = source->matrix->m11
dest[12] = source->matrix->m12
dest[13] = source->matrix->m13
dest[14] = source->matrix->m14
dest[15] = source->matrix->m15
end sub
sub Grid( byval overall_size as integer , byval spacings as integer )
dim i as double
for i = -overall_size to overall_size step spacings
glBegin(GL_LINES)
glColor3ub(150, 190, 150)
glVertex3f(-overall_size, 0, i)
glVertex3f(overall_size, 0, i)
glVertex3f(i, 0,-overall_size)
glVertex3f(i, 0, overall_size)
glEnd()
next
end sub
sub loadentityidentity( object as entity ptr )
object->matrix->m0 = 1
object->matrix->m1 = 0
object->matrix->m2 = 0
object->matrix->m3 = 0
object->matrix->m4 = 0
object->matrix->m5 = 1
object->matrix->m6 = 0
object->matrix->m7 = 0
object->matrix->m8 = 0
object->matrix->m9 = 0
object->matrix->m10 = 1
object->matrix->m11 = 0
object->matrix->m12 = 0
object->matrix->m13 = 0
object->matrix->m14 = 0
object->matrix->m15 = 1
end sub
sub positionentity( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
object->position->x_pos = xpos
object->position->y_pos = ypos
object->position->z_pos = zpos
end sub
sub moveentity( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
dim as entity ptr Tmp1 , Tmp2
Tmp1 = new_entity()
Tmp2 = new_entity()
loadentityidentity( Tmp1 )
Tmp1->matrix->m12 = xpos
Tmp1->matrix->m13 = ypos
Tmp1->matrix->m14 = zpos
mulmatrix4x4( Tmp1 , object , Tmp2 )
copymatrix4x4( object , Tmp2 )
delete_entity(Tmp1)
delete_entity(Tmp2)
end sub
sub moveentityW( object as entity ptr , byval xpos as double , byval ypos as double , byval zpos as double )
object->matrix->m12 += xpos
object->matrix->m13 += ypos
object->matrix->m14 += zpos
end sub
sub rotateentity( object as entity ptr , xpos as double , ypos as double , zpos as double )
dim as entity ptr Tmp1 , Tmp2
Tmp1 = new_entity()
Tmp2 = new_entity()
if xpos > 360 then xpos = 0
if xpos < 0 then xpos = 360
if ypos > 360 then ypos = 0
if ypos < 0 then ypos = 360
if zpos > 360 then zpos = 0
if zpos < 0 then zpos = 360
'rotate on xaxis
if xpos then
loadentityidentity( Tmp1 )
Tmp1->matrix->m5 = Pcos( xpos )
Tmp1->matrix->m6 = -Psin( xpos )
Tmp1->matrix->m9 = Psin( xpos )
Tmp1->matrix->m10 = Pcos( xpos )
mulmatrix4x4( Tmp1 , object , Tmp2 )
copymatrix4x4( object , Tmp2 )
endif
'rotate on yaxis
if ypos then
loadentityidentity( Tmp1 )
Tmp1->matrix->m0 = Pcos( ypos )
Tmp1->matrix->m2 = Psin( ypos )
Tmp1->matrix->m8 = -Psin( ypos )
Tmp1->matrix->m10 = Pcos( ypos )
mulmatrix4x4( Tmp1 , object , Tmp2 )
copymatrix4x4( object , Tmp2 )
endif
'rotate on zaxis
if zpos then
loadentityidentity( Tmp1 )
Tmp1->matrix->m0 = Pcos( zpos )
Tmp1->matrix->m1 = -Psin( zpos )
Tmp1->matrix->m4 = Psin( zpos )
Tmp1->matrix->m5 = Pcos( zpos )
mulmatrix4x4( Tmp1 , object , Tmp2 )
copymatrix4x4( object , Tmp2 )
endif
delete_entity(Tmp1)
delete_entity(Tmp2)
end sub
sub copymatrix4x4( destination as entity ptr , byval source as entity ptr )
destination->matrix->m0 = source->matrix->m0
destination->matrix->m1 = source->matrix->m1
destination->matrix->m2 = source->matrix->m2
destination->matrix->m3 = source->matrix->m3
destination->matrix->m4 = source->matrix->m4
destination->matrix->m5 = source->matrix->m5
destination->matrix->m6 = source->matrix->m6
destination->matrix->m7 = source->matrix->m7
destination->matrix->m8 = source->matrix->m8
destination->matrix->m9 = source->matrix->m9
destination->matrix->m10 = source->matrix->m10
destination->matrix->m11 = source->matrix->m11
destination->matrix->m12 = source->matrix->m12
destination->matrix->m13 = source->matrix->m13
destination->matrix->m14 = source->matrix->m14
destination->matrix->m15 = source->matrix->m15
end sub
sub transposematrix( object as entity ptr )
dim as entity ptr Tmp1 , Tmp2
Tmp1 = new_entity()
Tmp2 = new_entity()
copymatrix4x4( Tmp1 , object )
Tmp1->matrix->m0 = object->matrix->m0
Tmp1->matrix->m1 = object->matrix->m4
Tmp1->matrix->m2 = object->matrix->m8
Tmp1->matrix->m4 = object->matrix->m1
Tmp1->matrix->m5 = object->matrix->m5
Tmp1->matrix->m6 = object->matrix->m9
Tmp1->matrix->m8 = object->matrix->m2
Tmp1->matrix->m9 = object->matrix->m6
Tmp1->matrix->m10 = object->matrix->m10
multranslmatrix4x4( object , Tmp1 , Tmp2 )
copymatrix4x4( object , Tmp2 )
delete_entity(Tmp1)
delete_entity(Tmp2)
end sub
sub multranslmatrix4x4( byval m1 as entity ptr , byval m2 as entity ptr , destination as entity ptr )
dim as double Tx , Ty , Tz
Tx = m1->matrix->m0 * m2->matrix->m12 + m1->matrix->m1 * m2->matrix->m13 + m1->matrix->m2 * m2->matrix->m14
Ty = m1->matrix->m4 * m2->matrix->m12 + m1->matrix->m5 * m2->matrix->m13 + m1->matrix->m6 * m2->matrix->m14
Tz = m1->matrix->m8 * m2->matrix->m12 + m1->matrix->m9 * m2->matrix->m13 + m1->matrix->m10 * m2->matrix->m14
copymatrix4x4( destination , m2 )
Tx += m2->matrix->m8
Ty += m2->matrix->m9
Tz += m2->matrix->m10
destination->matrix->m12 = Tx
destination->matrix->m13 = Ty
destination->matrix->m14 = Tz
end sub
sub mulmatrix4x4( byval matrix1 as entity ptr , byval matrix2 as entity ptr , resultmatrix as entity ptr )
resultmatrix->matrix->m0 = matrix1->matrix->m0 * matrix2->matrix->m0 + matrix1->matrix->m1 * matrix2->matrix->m4 + matrix1->matrix->m2 * matrix2->matrix->m8 + matrix1->matrix->m3 * matrix2->matrix->m12
resultmatrix->matrix->m1 = matrix1->matrix->m0 * matrix2->matrix->m1 + matrix1->matrix->m1 * matrix2->matrix->m5 + matrix1->matrix->m2 * matrix2->matrix->m9 + matrix1->matrix->m3 * matrix2->matrix->m13
resultmatrix->matrix->m2 = matrix1->matrix->m0 * matrix2->matrix->m2 + matrix1->matrix->m1 * matrix2->matrix->m6 + matrix1->matrix->m2 * matrix2->matrix->m10 + matrix1->matrix->m3 * matrix2->matrix->m14
resultmatrix->matrix->m3 = matrix1->matrix->m0 * matrix2->matrix->m3 + matrix1->matrix->m1 * matrix2->matrix->m7 + matrix1->matrix->m2 * matrix2->matrix->m11 + matrix1->matrix->m3 * matrix2->matrix->m15
resultmatrix->matrix->m4 = matrix1->matrix->m4 * matrix2->matrix->m0 + matrix1->matrix->m5 * matrix2->matrix->m4 + matrix1->matrix->m6 * matrix2->matrix->m8 + matrix1->matrix->m7 * matrix2->matrix->m12
resultmatrix->matrix->m5 = matrix1->matrix->m4 * matrix2->matrix->m1 + matrix1->matrix->m5 * matrix2->matrix->m5 + matrix1->matrix->m6 * matrix2->matrix->m9 + matrix1->matrix->m7 * matrix2->matrix->m13
resultmatrix->matrix->m6 = matrix1->matrix->m4 * matrix2->matrix->m2 + matrix1->matrix->m5 * matrix2->matrix->m6 + matrix1->matrix->m6 * matrix2->matrix->m10 + matrix1->matrix->m7 * matrix2->matrix->m14
resultmatrix->matrix->m7 = matrix1->matrix->m4 * matrix2->matrix->m3 + matrix1->matrix->m5 * matrix2->matrix->m7 + matrix1->matrix->m6 * matrix2->matrix->m11 + matrix1->matrix->m7 * matrix2->matrix->m15
resultmatrix->matrix->m8 = matrix1->matrix->m8 * matrix2->matrix->m0 + matrix1->matrix->m9 * matrix2->matrix->m4 + matrix1->matrix->m10 * matrix2->matrix->m8 + matrix1->matrix->m11 * matrix2->matrix->m12
resultmatrix->matrix->m9 = matrix1->matrix->m8 * matrix2->matrix->m1 + matrix1->matrix->m9 * matrix2->matrix->m5 + matrix1->matrix->m10 * matrix2->matrix->m9 + matrix1->matrix->m11 * matrix2->matrix->m13
resultmatrix->matrix->m10 = matrix1->matrix->m8 * matrix2->matrix->m2 + matrix1->matrix->m9 * matrix2->matrix->m6 + matrix1->matrix->m10 * matrix2->matrix->m10 + matrix1->matrix->m11 * matrix2->matrix->m14
resultmatrix->matrix->m11 = matrix1->matrix->m8 * matrix2->matrix->m3 + matrix1->matrix->m9 * matrix2->matrix->m7 + matrix1->matrix->m10 * matrix2->matrix->m11 + matrix1->matrix->m11 * matrix2->matrix->m15
resultmatrix->matrix->m12 = matrix1->matrix->m12 * matrix2->matrix->m0 + matrix1->matrix->m13 * matrix2->matrix->m4 + matrix1->matrix->m14 * matrix2->matrix->m8 + matrix1->matrix->m15 * matrix2->matrix->m12
resultmatrix->matrix->m13 = matrix1->matrix->m12 * matrix2->matrix->m1 + matrix1->matrix->m13 * matrix2->matrix->m5 + matrix1->matrix->m14 * matrix2->matrix->m9 + matrix1->matrix->m15 * matrix2->matrix->m13
resultmatrix->matrix->m14 = matrix1->matrix->m12 * matrix2->matrix->m2 + matrix1->matrix->m13 * matrix2->matrix->m6 + matrix1->matrix->m14 * matrix2->matrix->m10 + matrix1->matrix->m15 * matrix2->matrix->m14
resultmatrix->matrix->m15 = matrix1->matrix->m12 * matrix2->matrix->m3 + matrix1->matrix->m13 * matrix2->matrix->m7 + matrix1->matrix->m14 * matrix2->matrix->m11 + matrix1->matrix->m15 * matrix2->matrix->m15
end sub
sub draw_piramid( object as entity ptr )
dim as double obj(0 to 3,0 to 3)
loadentityidentity( object )
moveentity( object , object->position->x_pos , object->position->y_pos , object->position->z_pos )
rotateentity( object , 0 , object->rotation->y_rot , 0 )
rotateentity( object , object->rotation->x_rot , 0 , 0 )
rotateentity( object , 0 , 0 , object->rotation->z_rot )
convertMarray( @obj(0,0) , object )
glpushmatrix
glmultmatrixd( @obj(0,0) )
glBegin GL_TRIANGLES
glColor3f 1.0, 0.0, 0.0
glVertex3f 0.0, 1.0, 0.0
glColor3f 0.0, 1.0, 0.0
glVertex3f -1.0, -1.0, 1.0
glColor3f 0.0, 0.0, 1.0
glVertex3f 1.0, -1.0, 1.0
glColor3f 1.0, 0.0, 0.0
glVertex3f 0.0, 1.0, 0.0
glColor3f 0.0, 0.0, 1.0
glVertex3f 1.0, -1.0, 1.0
glColor3f 0.0, 1.0, 0.0
glVertex3f 1.0, -1.0, -1.0
glColor3f 1.0, 0.0, 0.0
glVertex3f 0.0, 1.0, 0.0
glColor3f 0.0, 1.0, 0.0
glVertex3f 1.0, -1.0, -1.0
glColor3f 0.0, 0.0, 1.0
glVertex3f -1.0, -1.0, -1.0
glColor3f 1.0, 0.0, 0.0
glVertex3f 0.0, 1.0, 0.0
glColor3f 0.0, 0.0, 1.0
glVertex3f -1.0, -1.0, -1.0
glColor3f 0.0, 1.0, 0.0
glVertex3f -1.0, -1.0, 1.0
glEnd
glpopmatrix
end sub
sub draw_box( object as entity ptr )
dim as double obj(0 to 3,0 to 3)
loadentityidentity( object )
moveentity( object , object->position->x_pos , object->position->y_pos , object->position->z_pos )
rotateentity( object , 0 , object->rotation->y_rot , 0 )
rotateentity( object , object->rotation->x_rot , 0 , 0 )
rotateentity( object , 0 , 0 , object->rotation->z_rot )
convertMarray( @obj(0,0) , object )
glpushmatrix
glmultmatrixd( @obj(0,0) )
glBegin GL_QUADS
glColor3f 0.0, 1.0, 0.0
glVertex3f 1.0, 1.0, -1.0
glVertex3f -1.0, 1.0, -1.0
glVertex3f -1.0, 1.0, 1.0
glVertex3f 1.0, 1.0, 1.0
glColor3f 1.0, 0.5, 0.0
glVertex3f 1.0, -1.0, 1.0
glVertex3f -1.0, -1.0, 1.0
glVertex3f -1.0, -1.0, -1.0
glVertex3f 1.0, -1.0, -1.0
glColor3f 1.0, 0.0, 0.0
glVertex3f 1.0, 1.0, 1.0
glVertex3f -1.0, 1.0, 1.0
glVertex3f -1.0, -1.0, 1.0
glVertex3f 1.0, -1.0, 1.0
glColor3f 1.0, 1.0, 0.0
glVertex3f 1.0, -1.0, -1.0
glVertex3f -1.0, -1.0, -1.0
glVertex3f -1.0, 1.0, -1.0
glVertex3f 1.0, 1.0, -1.0
glColor3f 0.0, 0.0, 1.0
glVertex3f -1.0, 1.0, 1.0
glVertex3f -1.0, 1.0, -1.0
glVertex3f -1.0, -1.0, -1.0
glVertex3f -1.0, -1.0, 1.0
glColor3f 1.0, 0.0, 1.0
glVertex3f 1.0, 1.0, -1.0
glVertex3f 1.0, 1.0, 1.0
glVertex3f 1.0, -1.0, 1.0
glVertex3f 1.0, -1.0, -1.0
glEnd
glpopmatrix
end sub