Oxygen Basic
Programming => Problems & Solutions => Topic started by: Frankolinox on May 22, 2013, 12:43:48 AM
-
topic: openGL, texture
I wanted a rotating sphere as planet instead of a cube for texturing. the parameter for "rendersphere" function may be wrong and the coordinates. any help is welcome. thanks in advance.
includepath "$\inc\"
$ FileName "t.exe"
'include "RTL32.inc"
'include "RTL64.inc"
title="MarsPlanet in Fog"
include "OpenglSceneFrame.inc"
includepath ""
include "shapes.inc"
include "particles.inc"
include "materials.inc"
indexbase 1
sys texn[3]
sys GdiplusToken
float ang1
float li[16]
float ma[13]
sys cube pent
sys sphere
sub initialize(sys hWnd)
========================
'
'GDIPLUS
'
sys hr
GdiplusStartupInput StartupInput
StartupInput.GdiplusVersion = 1
hr=GdiplusStartup GdiplusToken, StartupInput, null
'
if hr then
print "Error initializing GDIplus: " hex hr
exit function
end if
'
'PREPARE TEXTURES
'
glGenTextures 2, texn
'
static sys res=256
string imgs[1]=""
string imgs[2]=""
'GetTexImage "../images/crate.jpg",res,imgs[1]
GetTexImage "hubble_mars.bmp",res,imgs[1]
MakeTexture *imgs[1],res,res,texn[1]
'
cube=CompileList : CubeForm : glEndList
pent=CompileList : Sides 5,1,1 : glEndList
sphere=CompileList : Spheric 1,1,6 : glEndList
'
'standard lighting
------------------
li<=
0.0, 8.0, 8.0, 1.0, 'position
1.0, 1.0, 1.0, 1.0, 'ambient
1.0, 1.0, 1.0, 1.0, 'diffuse
1.0, 1.0, 1.0, 1.0 'specular
'standard material
------------------
ma<=
.15, .15, 0.2, 1.0, 'ambient
0.7, 0.7, 0.6, 1.0, 'diffuse
0.0, 0.0, 0.1, 1.0, 'specular
0 'shininess
Material ma
Lighting li
'
'
SetTimer hWnd,1,10,null
end sub
sub Release(sys hwnd)
'====================
glDeleteLists cube,1
glDeleteLists pent,1
glDeleteTextures 2, texn
GdiplusShutdown GdiplusToken
killTimer hwnd, 1
end sub
'
'---------- test --------------------------------- //
sub RenderSphere(float x,y,z,sc,sys tex) 'spheric
glEnable GL_TEXTURE_2D
glBindTexture GL_TEXTURE_2D,tex
glPushMatrix
gltranslatef x,y,z
glrotatef ang1,0,1,0
glscalef sc,sc,sc
glCallList sphere
'glCallList Pent
glPopMatrix
glDisable GL_TEXTURE_2D
end sub
'---------- test --------------------------------- //
sub RenderCrate(float x,y,z,sc,sys tex)
=======================================
'glColor4f .99,.99,.99,.99
glEnable GL_TEXTURE_2D
glBindTexture GL_TEXTURE_2D,tex
glPushMatrix
gltranslatef x,y,z
glrotatef ang1,0,1,0
glscalef sc,sc,sc
glCallList Cube
'glCallList Pent
glPopMatrix
glDisable GL_TEXTURE_2D
end sub
sub scene(sys hWnd)
'==================
'
'Ctrl-P take snapshot
'
static sys photo
if key[80] and key[17] and photo=0
TakeOpenglSnapShot hwnd,"tim50.jpg","image/jpeg",50
photo=1
elseif key[80]=0
photo=0
end if
static single ra,ri,angi1=.5
'
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
glEnable GL_DEPTH_TEST
glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
glEnable GL_BLEND
glLoadIdentity
'
glClearColor 0.5, 0.5, 0.7, 0
'
float fcolor[4]={.5, .5, .7, .99}
glfogi GL_FOG_MODE,GL_EXP
glfogf GL_FOG_DENSITY,0.1
glfogfv GL_FOG_COLOR, fcolor
glfogf GL_FOG_INDEX, 0
glfogf GL_FOG_START, -1.0
glfogf GL_FOG_END, -100.0
glEnable GL_FOG
'
glEnable GL_LIGHTING
glEnable GL_NORMALIZE
glColor4f .99,.99,.99,.99
'sys n=texn[1]
'RenderCrate 11.5,-0.9,-24.0,0.5,n
'RenderCrate 6.5,-0.9,-16.0,0.5,n
'RenderCrate 2.5,-0.9,-8.0, 0.5,n
'RenderCrate 0.5,-0.9,-4.0, 0.5,n
'RenderCrate -0.5,-0.9,-2.0, 0.5,n
'
sys n=texn[1]
RenderSphere 11.5,-0.9,-24.0,0.5,n
RenderSphere 6.5,-0.9,-16.0,0.5,n
RenderSphere 2.5,-0.9,-8.0, 0.5,n
RenderSphere 0.5,-0.9,-4.0, 0.5,n
RenderSphere -0.5,-0.9,-2.0, 0.5,n
ang1+=angi1
if ang1>360 then ang1-=360
sleep 10
end sub
frank
X
-
Hi Frank,
I'm working on sphere textures and terrain. Curved surface have to be divided into facets, so that textures can be mapped onto them. Cubic texture mapping gives the best distribution of facets. If all goes well we will enventually be able to land on the planets :)
Charles
-
I have a simple question: if I want to use the "keyboard" functions "key[37]" for example where I have to program for using it (I want to move a cube by pushing keys) with keys?
a) below wndproc() from the inc file part or b) directly below openGL "scene" part ?
thanks in advance, frank