[Monkey] Spielerei mit OpenGL ES 1.1
Übersicht

![]() |
FarbfinsternisBetreff: Spielerei mit OpenGL ES 1.1 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seit neuestem besitzt Monkey ja das offizielle OpenGL ES Module basierend auf der Version 1.1 des Standards und einige wissen ja dass mir nichts soviel Spaß macht wie das Verpacken von Lowlevel Kram in Highlevel Funktionen. Herausgekommen ist bisher nichts was man auch nur ansatzweise als "productive" bezeichnen könnte, aber mir hat es geholfen das Modul opengl.gles11 besser zu verstehen. Neben dem normalen Wrapper Gehampel habe ich noch ein LoadMesh() eingebaut. Dieses liest ein bekloppt simples Format ein (Textdatei) und erzeugt daraus ein Mesh.
Folgender Code: Code: [AUSKLAPPEN] Strict Import mojo Import s3d.s3d Class S3DTest Extends App Field plane:Mesh Field cam:Camera Method OnCreate:Int() InitS3D() plane = LoadMesh("mesh.txt") PositionEntity(plane, 0.0, 0.0, -2.0) EntityColor(plane, 255, 200, 0, 255) cam = CreateCamera() CameraClsColor(cam, 90, 120, 220) SetUpdateRate(60) Return 0 End Method OnUpdate:Int() TurnEntity(plane, 1.0, 1.0, 1.0) Return 0 End Method OnRender:Int() RenderWorld() Return 0 End End Function Main:Int() New S3DTest() Return 0 End Erzeugt dieses Bild: ![]() >> Das s3d Modul gibbet hier << ... und wer kein Monkey besitzt aber mal gucken will findet hier ein Sample für Windows. Leider läuft der Kram noch nicht unter Android und ich komme ums Verrecken nicht dahinter warum es das nicht tut ... aber das ist ja nur eine Frage der Zeit ![]() |
||
Farbfinsternis.tv |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe mal noch ein bisschen weiter gebastelt
![]() Neuerungen und Veränderungen: Code: [AUSKLAPPEN] 01/01/2011 v0.1 added : Color.toArray:Float[]() added : Color.toBuffer:Int(buffer:DataBuffer, address:Int) added : Color.toString:String() added : Vertex.toBuffer:Int(buffer:DataBuffer, address:Int) added : Entity.SetColor:Void(col:Color4F) added : Entity.SetColor:Void(col:String) can actually be white, black, red, green, blue, yellow, magenta, grey, lightgrey, darkgrey, orange or brown added : Entity.GetColor:Color4F() added : Color.New(col:Color4F) added : Color.New(col:String) added : Vector.toArray:Float[]() added : Light.New(number:Int = GL_LIGHT0, lightType:Int = LIGHT_DIRECTIONAL) added : S3D.CreateLight:Light(lightType:Int = LIGHT_DIRECTIONAL) added : CreateLight:Light(lightType:Int = LIGHT_DIRECTIONAL) changed : MeshFileFormat: the chunk "face" has now 7 values: x, y, z, r, g, b, a for a vertex, RGBA is optional fixed : Mesh.New(meshFile:String) not longer read indices to vertices note : Lights can be created but are currently ignored because there are no material functions in s3d note : if CreateLight() returns Null, there be more than 8 lights in your code note : a bug (or my fail) prevents that a mesh can have vertex colors Das Modul Das Beispiel für Windows (GLFW) Lichter können zwar erzeugt werden, aber ihr könnt auch mit der Taschenlampe über den Monitor funzeln. Da es noch keine Materialien gibt habe ich Lichter nicht angeschaltet ... ohne Materialien ergibt es halt keinen Sinn Lichter in OGL zu setzen da deren Eigenschaften alle Eigenschaften des Meshs überschreiben. Das Format für das MeshFile wurde geändert: Im Chunk "face" kann man nun die Vertex-Koordinaten angeben und danach (in derselben Zeile) die Farbe für dieses Vertex im Format RGBA. Das Fileformat ist abwärtskompatibel, RGBA kann auch weggelassen werden. Ein Bug in opengl.gles11 sorgt dafür dass VertexColors derzeit nicht verwendet werden können. Ich hoffe Mark rüstet da schnell nach. |
||
Farbfinsternis.tv |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht recht gut aus. Kannst ja mal versuchen das LoadMesh für .obj umzuschreiben, ist ja an sich ein ziemlich einfaches Format. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich selbst habe kaum die Zeit großartig Importer zu schreiben, das S3D Format ist nur entstanden weil mich hardcoded meshes ankotzen. Der User "Fred" im Monkey Forum hat einen Milkshape ASCII Loader geschrieben, der funktioniert zwar noch nicht wie er soll, aber wir arbeiten mit der Hilfe von Mark Sibly daran.
Im Moment baut der MS3D ASCII Loader sowas: ![]() Das soll eigentlich ein grauer Würfel sein ![]() ![]() Neu im S3D Format ist dass Chunks (face, indicies) jetzt mit ">" eingeleitet werden und nicht mehr mit einem "'". Dieses Zeichen ist jetzt Kommentaren vorbehalten. Kommentare können eine Zeile sein, oder am Ende einer Zeile stehen. |
||
Farbfinsternis.tv |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe mich nun doch entschieden einen Wavefront Obj Loader zu bauen ....
![]() |
||
Farbfinsternis.tv |
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
Coole Sache. Worauf lässt sich das alles kompilieren? | ||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
GLFW, Android und iOS | ||
Farbfinsternis.tv |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht voran ... habe mal ein Video hochgeladen dass ich von meiner Android-Faselfunke aufgenommen habe. Es zeigt ein Mesh welches geladen wurde und 16 weitere die Referenzen auf das erste Mesh sind, also nicht nochmals im Speicher vorliegen.
http://www.youtube.com/watch?v...AAAAAAAAAA Der Quelltext für diese Demo: Code: [AUSKLAPPEN] Import s3d Class MyApp Extends App Field cam:Camera, light:Light, mesh:Mesh Field ref:MeshRef[16] Field refTurn:Vector[16] Method OnCreate() Seed = Millisecs() cam = CreateCamera light = CreateLight mesh = LoadMesh("monkey.obj") PositionEntity mesh, 0.0, 2.0, -4.0 PositionEntity light, 0.0, 5.0, -8.0 CameraClsColor cam, 0.3, 0.6, 0.9 'let's create some monkeys Local x:Float = -4.0 Local y:Float = -3.0 Local z:Float = -16.0 Local c:Int = 0 For Local i:Int = 0 Until 16 ref[i] = CloneMesh(mesh) refTurn[i] = New Vector(Rnd(-1.0, 1.0), Rnd(-1.0, 1.0), Rnd(-1.0, 1.0)) PositionEntity ref[i], x, y, z x += 3 c += 1 If c = 4 c = 0 z += 3 x = -4 EndIf Next SetUpdateRate 30 End Method OnUpdate() TurnEntity mesh, 1.0, 1.0, 1.0 ' turn the monkey horde For Local i:Int = 0 Until 16 TurnEntity ref[i], refTurn[i].X(), refTurn[i].Y(), refTurn[i].Z() Next End Method OnRender() RenderWorld End End Function Main() New MyApp End ![]() |
||
Farbfinsternis.tv |
![]() |
FarbfinsternisBetreff: Schon wieder auf 0.1 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Neustart!
S3D ist nun wieder auf 0.1 zurück gesetzt. Der Grund dafür ist dass es ums Verrecken nicht möglich war den alten Code so anzupassen dass er mit den Änderungen von Mark Sibly funktioniert. Das neue Modul kann hier gezogen werden. Das "17 Monkeys" Beispiel gibbet hier. Die Demo funktioniert leider nicht auf GLFW und ich habe keine Ahnung warum. Auf Android und iOS läuft sie aber hervorragend. Wenn Du selbst Modelle für S3D erstellen willst musst Du ein paar Sachen beachten: 1. Das Mesh muss Texturkoordinaten besitzen, das heißt Du musst Dein Mesh unwrappen 2. Im Moment kann man nur Wavefront Object (obj) Models laden, weitere Loader sind in Arbeit 3. Wenn Du Dein Model mit Blender2.6x exportierst aktiviere "Include Normals" und "Triangulate Faces" Wenn Du Deine Mesh-Daten nicht umbenennen willst gehe in Deinen Buidl Ordner, öffne die CONFIG.TXT und füge bei den Textdateien die Endungen "obj" und "mtl" hinzu. Ich habe gerade einen guten Lauf und alles funktioniert super. Somit wird aus dem "Spielereien mit GL ES1.1" ein ernsthaftes Projekt mit dem Ziel 3D Game mit Monkey (vor allem) für iOS und Android zu bauen. Das Changelog "so far" Code: [AUSKLAPPEN] 01/10/2012 - Restart! v0.1 added : Classes by Mark Sibly: Mesh, Vertex, VertexMap, VertexStack, ObjLoader added : Classes Vector, Color, Entity, MeshRef, Texture, Material, Light, Frustum, Viewport, Camera, S3D added : Vector.New(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Vector.set:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Vector.X:Float(), Vector.Y:Float(), Vector.Z:Float() added : Vector.add:Void(vec:Vector) added : Vector.add:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.New(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.setPosition:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.setRotation:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.setScale:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.turn:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.move:Void(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Entity.getPosition:Float[]() added : Entity.getRotation:Float[]() added : Entity.getScale:Float[]() added : Color.New(r:Float = 0.0, g:Float = 0.0, b:Float = 0.0, a:Float = 1.0) added : Color.set:Void(r:Float = 0.0, g:Float = 0.0, b:Float = 0.0, a:Float = 1.0) added : Color.RED:Float(), Color.GREEN:Float(), Color.BLUE:Float(), Color.ALPHA:Float() added : Color.normalize:Float[](r:Float, g:Float, b:Float, a:Float) <private added : Texture.New(filename:String) added : Texture.FlipY:Void() added : Texture.getWidth:Int(), Texture.getHeight:Int() added : Texture.getBufObj:Int(), Texture.getData:DataBuffer() added : Material.New() added : Material.setAlpha:Void(alpha:Float = 1.0) added : Material.setDiffuse:Void(r:Float = 1.0, g:Float = 1.0, b:Float = 1.0) added : Material.setAmbient:Void(r:Float = 0.0, g:Float = 0.0, b:Float = 0.0) added : Material.setSpecular:Void(r:Float = 1.0, g:Float = 1.0, b:Float = 1.0) added : Material.setShininess:Void(shininess:Float = 0.5) added : Material.setIllumination:Void(illumination:Float = 1.0) added : Material.Method getAmbient:Float[]() added : Material.getDiffuse:Float[]() added : Material.getSpecular:Float[]() added : Material.getAlpha:Float() added : Material.getShininess:Float() added : Material.getIllumination:Float() added : Material.getIlluminationModel:Int() added : Material.getTexture:Texture() added : Material.loadTexture:Texture(textureFile:String) added : Material.loadMaterial:Void(matFile:String) added : Mesh.createRef:MeshRef() added : MeshRef.New(mesh:Mesh) added : Light.New(num:Int = GL_LIGHT0, x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : Light.update:Void() added : Frustum.New(left:Float = -1.0, right:Float = 1.0, bottom:Float = -1.0, top:Float = 1.0, near:Float = 1.0, far:Float = 100.0) added : Frustum.set:Void(left:Float = -1.0, right:Float = 1.0, bottom:Float = -1.0, top:Float = 1.0, near:Float = 1.0, far:Float = 100.0) added : Frustum.setNear:Void(value:Float = 1.0) added : Frustum.setFar:Void(value:Float = 100.0) added : Frustum.LEFT:Float(), Frustum.TOP:Float(), Frustum.RIGHT:Float() added : Frustum.BOTTOM:Float(), Frustum.NEAR:Float(), Frustum.FAR:Float() added : Viewport.New(), Viewport.set:Void(x:Float, y:Float, width:Float, height:Float) added : Viewport.X:Float(), Y:Float(), WIDTH:Float(), HEIGHT:Float() added : Camera.New() added : Camera.setNear:Void(value:Float = 1.0) added : Camera.setFar:Void(value:Float = 100.0) added : Camera.clsColor:Void(r:Float = 0.0, g:Float = 0.0, b:Float = 0.0, a:Float = 1.0) added : Camera.clsMode:Void(mode:Int = GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) added : Camera.getFrustum:Frustum(), Camera.getViewport:Viewport() added : Camera.getClearColor:Color(), Camera.getClearMode:Int() added : S3D.New() added : S3D.renderWorld:Void() added : S3D.createCamera:Camera() added : S3D.createLight:Light() added : S3D.loadMesh:Mesh(fileName:String) added : S3D.refMesh:MeshRef(mesh:Mesh) added : RenderWorld:Void() added : CreateCamera:Camera() added : CreateLight:Light() added : LoadMesh:Mesh(filename:String) added : CloneMesh:MeshRef(mesh:Mesh) added : PositionEntity:Void(entity:Entity, x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : TurnEntity:Void(entity:Entity, x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : MoveEntity:Void(entity:Entity, x:Float = 0.0, y:Float = 0.0, z:Float = 0.0) added : EntityX:Float(entity:Entity) added : EntityY:Float(entity:Entity) added : EntityZ:Float(entity:Entity) added : EntityPitch:Float(entity:Entity) added : EntityYaw:Float(entity:Entity) added : EntityRoll:Float(entity:Entity) added : CameraClsColor:Void(camera:Camera, r:Float = 0.0, g:Float = 0.0, b:Float = 0.0) changed : Mesh.render() calls the method Mesh.bind() automatically changed : Mesh.render() now has the parameter lights:Light[] changed : Mesh.render() now iterate a list of references for this mesh changed : ObjLoader.LoadMesh() now loads the object material and his texture changed : global OpenGL settings moved from renderWorld() to New() |
||
Farbfinsternis.tv |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sehr cool, wie aus einer kleinen Spielerei eine Engine wird. ![]() Besitze leider weder Monkey noch ein Smartphone, kann deshalb leider nicht dazu beitragen. Gutes Gelingen beim Projekt! |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, schaut alles ziemlich cool aus!
Wollte das mal in der Demo ausprobieren, nur gibt es da immer einen Fehler aufgrund des Fehlens von gles11-Wrappers... gibt es eine Möglichkeit den separat zu downloaden oder kommt man hierbei nicht ums Kaufen herum? Greetzz |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
peacemaker hat Folgendes geschrieben: Hallo, schaut alles ziemlich cool aus!
Wollte das mal in der Demo ausprobieren, nur gibt es da immer einen Fehler aufgrund des Fehlens von gles11-Wrappers... gibt es eine Möglichkeit den separat zu downloaden oder kommt man hierbei nicht ums Kaufen herum? Greetzz Mit der Demo geht das nicht, erst ab Monkey v52 |
||
Farbfinsternis.tv |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group