Introduction
I am currently using the TAO framework to draw graphics in OpenGL. Listed below is my code for drawing boxes of any size using textures or colors, whatever the user specifies. This works perfectly fine at drawing as shown below as well.
The project is written in VB .NET 2010 but since most of it was written with the help of C# I am posting it under both languages since the answer could be in C# and then translated to VB .NET.
Problem
Now the next part that I am trying to develop is the ability to select an object and rotate / translate it. I don't have a clue how to do this. I have looked online and have only found examples in C# which are fine but most methods don't produce the correct result. I do know that I need to name my objects which I believe I have done. So my question is how can this be done?
I could also be completely off with my existing code that draws everything. I am not sure.
Existing Program
CODE
Here is my initial load function:
Private Sub DrawInit()
Gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F)
Gl.glShadeModel(Gl.GL_SMOOTH)
Gl.glClearDepth(1.0#)
Gl.glEnable(Gl.GL_DEPTH_TEST)
Gl.glDepthFunc(Gl.GL_LESS)
Gl.glEnable(Gl.GL_STENCIL_TEST)
Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST)
Draw_Shapes()
End Sub
My draw shapes function
Private Sub Draw_Shapes()
draw_boxes()
End Sub
My draw_box function
Private Sub draw_boxes()
Dim i As Integer = 0
Dim startx As Integer = 0
Dim starty As Integer = 0
Dim startz As Integer = 0
Dim deltax As Integer = 0
Dim deltay As Integer = 0
Dim deltaz As Integer = 0
Dim front_face_color As Color
Dim back_face_color As Color
Dim top_face_color As Color
Dim bottom_face_color As Color
Dim left_face_color As Color
Dim right_face_color As Color
Dim front_face_texture As Bitmap
Dim back_face_texture As Bitmap
Dim top_face_texture As Bitmap
Dim bottom_face_texture As Bitmap
Dim left_face_texture As Bitmap
Dim right_face_texture As Bitmap
Dim front_face_num_textures As Point
Dim back_face_num_textures As Point
Dim top_face_num_textures As Point
Dim bottom_face_num_textures As Point
Dim left_face_num_textures As Point
Dim right_face_num_textures As Point
Dim front_texture As Boolean
Dim back_texture As Boolean
Dim top_texture As Boolean
Dim bottom_texture As Boolean
Dim left_texture As Boolean
Dim right_texture As Boolean
Do Until i = boxes.Length - 1
startx = boxes(i).start_x
starty = boxes(i).start_y
startz = boxes(i).start_z
deltax = boxes(i).delta_x
deltay = boxes(i).delta_y
deltaz = boxes(i).delta_z
front_face_color = boxes(i).front_face_color
back_face_color = boxes(i).back_face_color
top_face_color = boxes(i).top_face_color
bottom_face_color = boxes(i).bottom_face_color
left_face_color = boxes(i).left_face_color
right_face_color = boxes(i).right_face_color
front_face_texture = boxes(i).front_face_texture
back_face_texture = boxes(i).back_face_texture
top_face_texture = boxes(i).top_face_texture
bottom_face_texture = boxes(i).bottom_face_texture
left_face_texture = boxes(i).left_face_texture
right_face_texture = boxes(i).right_face_texture
front_face_num_textures = boxes(i).front_face_num_textures
back_face_num_textures = boxes(i).back_face_num_textures
top_face_num_textures = boxes(i).top_face_num_textures
bottom_face_num_textures = boxes(i).bottom_face_num_textures
left_face_num_textures = boxes(i).left_face_num_textures
right_face_num_textures = boxes(i).right_face_num_textures
If front_face_texture Is Nothing Then
front_texture = False
Else
front_texture = True
End If
If back_face_texture Is Nothing Then
back_texture = False
Else
back_texture = True
End If
If top_face_texture Is Nothing Then
top_texture = False
Else
top_texture = True
End If
If bottom_face_texture Is Nothing Then
bottom_texture = False
Else
bottom_texture = True
End If
If left_face_texture Is Nothing Then
left_texture = False
Else
left_texture = True
End If
If right_face_texture Is Nothing Then
right_texture = False
Else
right_texture = True
End If
Gl.glLoadName(num_shapes)
Gl.glNewList(i + 1, Gl.GL_COMPILE)
draw_rectangular_face(front_texture, front_face_color, front_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx, starty + deltay, startz), front_face_num_textures)
draw_rectangular_face(back_texture, back_face_color, back_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), New ThreeDPoint(startx, starty, startz + deltaz), back_face_num_textures)
draw_rectangular_face(top_texture, top_face_color, top_face_texture, New ThreeDPoint(startx, starty, startz + deltaz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), top_face_num_textures)
draw_rectangular_face(bottom_texture, bottom_face_color, bottom_face_texture, New ThreeDPoint(startx, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), bottom_face_num_textures)
draw_rectangular_face(left_texture, left_face_color, left_face_texture, New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), left_face_num_textures)
draw_rectangular_face(right_texture, right_face_color, right_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx, starty + deltay, startz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty, startz + deltaz), right_face_num_textures)
Gl.glEndList()
num_shapes = num_shapes + 1
i = i + 1
Loop
My draw face function
Private Sub draw_rectangular_face(ByVal texture As Boolean, ByVal face_color As Color, ByVal texture_image As Bitmap, ByVal point1 As ThreeDPoint, ByVal point2 As ThreeDPoint, ByVal point3 As ThreeDPoint, ByVal point4 As ThreeDPoint, ByVal num_textures As Point)
If texture = True Then
load_textures(texture_image)
End If
Gl.glBindTexture(Gl.GL_TEXTURE_2D, 1)
If texture = True Then
Gl.glEnable(Gl.GL_TEXTURE_2D) 'turn on for texture
Else
Gl.glDisable(Gl.GL_TEXTURE_2D) 'turn on for color
End If
Gl.glBegin(Gl.GL_QUADS)
If texture = True Then
Gl.glColor3f(1, 1, 1) 'turn on for texture
Else
Gl.glColor3f(face_color.R / 256, face_color.G / 256, face_color.B / 256) 'turn on for color
End If
Gl.glTexCoord2f(0, 0) : Gl.glVertex3f(point1.x, point1.y, point1.z)
Gl.glTexCoord2f(num_textures.X, 0) : Gl.glVertex3f(point2.x, point2.y, point2.z)
Gl.glTexCoord2f(num_textures.X, num_textures.Y) : Gl.glVertex3f(point3.x, point3.y, point3.z)
Gl.glTexCoord2f(0, num_textures.Y) : Gl.glVertex3f(point4.x, point4.y, point4.z)
Gl.glEnd()
End Sub
My DrawScene event which is used to translate and rotate the world:
Private Sub DrawScene()
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT Or Gl.GL_DEPTH_BUFFER_BIT Or Gl.GL_STENCIL_BUFFER_BIT)
Gl.glLoadIdentity()
'move reference?
Gl.glTranslatef(camera_xloc, camera_yloc, camera_zloc)
' Gl.glTranslatef(0.0F, 0.0F, -20.0F)
'rotate
Gl.glRotatef(camera_xrot, 1, 0, 0)
Gl.glRotatef(camera_yrot, 0, 1, 0)
Gl.glRotatef(camera_zrot, 0, 0, 1)
Dim i As Integer = 1
Do Until i > num_shapes
Gl.glCallList(i)
i = i + 1
Loop
Gl.glFlush()
Application.DoEvents()
Gdi.SwapBuffers(hDC)
If intialload = 0 Then
intialload = 1
RaiseEvent initial_load_completed()
End If
End Sub
I have tried doing the following to translate shape # 1 to 1000,1000,1000 with no success:
Gl.glLoadName(num_shapes)
Gl.glNewList(i + 1, Gl.GL_COMPILE)
If num_shapes = 1 Then
Gl.glPushMatrix()
Gl.glTranslatef(1000, 1000, 1000)
End If
draw_rectangular_face(front_texture, front_face_color, front_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx, starty + deltay, startz), front_face_num_textures)
draw_rectangular_face(back_texture, back_face_color, back_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), New ThreeDPoint(startx, starty, startz + deltaz), back_face_num_textures)
draw_rectangular_face(top_texture, top_face_color, top_face_texture, New ThreeDPoint(startx, starty, startz + deltaz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), top_face_num_textures)
draw_rectangular_face(bottom_texture, bottom_face_color, bottom_face_texture, New ThreeDPoint(startx, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), bottom_face_num_textures)
draw_rectangular_face(left_texture, left_face_color, left_face_texture, New ThreeDPoint(startx + deltax, starty, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz), New ThreeDPoint(startx + deltax, starty + deltay, startz + deltaz), New ThreeDPoint(startx + deltax, starty, startz + deltaz), left_face_num_textures)
draw_rectangular_face(right_texture, right_face_color, right_face_texture, New ThreeDPoint(startx, starty, startz), New ThreeDPoint(startx, starty + deltay, startz), New ThreeDPoint(startx, starty + deltay, startz + deltaz), New ThreeDPoint(startx, starty, startz + deltaz), right_face_num_textures)
If num_shapes = 1 Then
Gl.glPopMatrix()
End If
Gl.glEndList()