Hi Fernando, > Hi Alex, i'm sad to hear that AlienOpenGL is not working for you, i'm > currently not mainting it. IMO opinion the Croquet OpengL and Igor's > native boost OpenGL are far better choices for interfacing with > OpenGL.
I am also sad. Unfortunately, me, as a teacher, I could not ask new students to pursue on making alienOpenGL work. I personally do not have the knowledge, and it is important that the students see their progress. Being stuck on how to interface with OpenGl could have dramatic effects. In any case, doing a basic 3d engine is not that complicated (I did one in assembly when I was 15 :-). So we did one and Ricardo is happy about the result. > Regarding the boost, it highly depends on the 3D application being > built. > http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node207.html#SECTION000181100000000000000 Thanks for the link. > Regarding the tool that you mentioned, how do you simulate 3D, in the > 2D Morphic framework? I'm finding hard to understand how can you > achieve a Morphic cube. The only thing we took from Morph is how to draw a polygon. Nothing more. We have some transformation matrixes that do the projection. We had to do a bit of maths, but nothing really unfeasible. Ricardo is working on doing a demo. I hope we will be able to share it soon. Alexandre > > On Tue, Mar 15, 2011 at 7:29 PM, Alexandre Bergel > <alexandre.ber...@me.com> wrote: >>> Great. What about the usual "native code" speed boost? Are you writing a >>> plugin, or is it all Smalltalk code? >> >> It is all Smalltalk code. We are not against native libraries, however we >> could not make it run. And so, after several months of intensive tries. So, >> in order to make some progress, we coded a 3d engine in Smalltalk. Actually, >> this is not difficult (for basic functionalities such as light, cubes, >> camera -- no texture and complex light rendering). I did a 2d engine for >> Mondrian. So having a 3d engine should not be that hard (actually it is >> not). The nice advantage, that it should work on the ipad, iphone, web, ... >> >> Other things, I would be surprise to have a significant boost by using >> OpenGL for rendering objects if all the matrix computations are realized in >> Smalltalk. Anyone can comment on it? >> >> Cheers, >> Alexandre >> >>> >>> >>> >>> ________________________________________ >>> From: pharo-project-boun...@lists.gforge.inria.fr >>> [pharo-project-boun...@lists.gforge.inria.fr] On Behalf Of Ricardo Jacas >>> [ricardo.ja...@gmail.com] >>> Sent: Tuesday, March 15, 2011 11:07 AM >>> To: Pharo-project@lists.gforge.inria.fr >>> Subject: Re: [Pharo-project] Lumiere on Linux? >>> >>> Hi guys, as Alex said we are currently working on a quite simple 3d >>> library entirely based on Morph. >>> Right know there is only cubes and "3d lines" to play as we please, i >>> will add some screenshots as soon as i have some spare time :) >>> >>> 2011/3/13 Schwab,Wilhelm K <bsch...@anest.ufl.edu>: >>>> Using libGL.so.1 gives similar results :( >>>> >>>> >>>> >>>> ________________________________________ >>>> From: pharo-project-boun...@lists.gforge.inria.fr >>>> [pharo-project-boun...@lists.gforge.inria.fr] On Behalf Of Lemuus >>>> [lem...@gmail.com] >>>> Sent: Saturday, March 12, 2011 9:48 PM >>>> To: Pharo-project@lists.gforge.inria.fr >>>> Subject: Re: [Pharo-project] Lumiere on Linux? >>>> >>>> I think that the correct choice is libGL.so,but I'm just guessing. >>>> >>>> On Sat, Mar 12, 2011 at 9:43 PM, Schwab,Wilhelm K >>>> <bsch...@anest.ufl.edu<mailto:bsch...@anest.ufl.edu>> wrote: >>>> I tried the 1.2 one-click with Lumiere. Following the collaboractive book, >>>> >>>> Gofer it >>>> squeaksource: 'Lumiere'; >>>> package: 'ConfigurationOfLumiere'; >>>> load. >>>> ( Smalltalk globals classNamed:'ConfigurationOfLumiere' ) perform: >>>> #loadDefault. >>>> >>>> led to a warning about DisplayList(??), but seemed to work otherwise. >>>> Trying an example such as #testRenderingSphere gave an error trying open >>>> OpenGL.framework, which I had trouble finding on Linux. Changing >>>> AlienOpenGLLibrary>>libraryName to answer 'libglut.so.3' gets it to the >>>> point of a segment fault, shown below. Is glut the correct choice, or do >>>> I need to get or specify some other library? >>>> >>>> Bill >>>> >>>> >>>> >>>> >>>> Segmentation fault >>>> >>>> Smalltalk stack dump: >>>> 0xbfd1714c I AlienOpenGLLibrary>glMatrixMode: 2033044028: a(n) >>>> AlienOpenGLLibrary >>>> 0xbfd17170 M [] in AlienOpenGLLibraryExamples>testRenderingSphere >>>> 2033042940: a(n) AlienOpenGLLibraryExamples >>>> 0xbfd17190 M BlockClosure>ensure: 2033043980: a(n) BlockClosure >>>> 0xbfd171b4 M AlienOpenGLLibraryExamples>testRenderingSphere 2033042940: >>>> a(n) AlienOpenGLLibraryExamples >>>> 0xbfd171d4 I AlienOpenGLLibraryExamples class>run: 2024758496: a(n) >>>> AlienOpenGLLibraryExamples class >>>> 0xbfd171f0 M AlienOpenGLLibraryExamples class>? 2024758496: a(n) >>>> AlienOpenGLLibraryExamples class >>>> 0xbfd17228 I Compiler>evaluate:in:to:notifying:ifFail:logged: 2032491124: >>>> a(n) Compiler >>>> 0xbfd17268 I [] in >>>> OBTextMorphEditorWithShout(SmalltalkEditor)>evaluateSelection 2025101912: >>>> a(n) OBTextMorphEditorWithShout >>>> 0xbfd17284 M BlockClosure>on:do: 2032491080: a(n) BlockClosure >>>> 0xbfd172b8 I OBTextMorphEditorWithShout(SmalltalkEditor)>evaluateSelection >>>> 2025101912: a(n) OBTextMorphEditorWithShout >>>> 0xbfd172d0 M [] in OBPluggableTextMorphWithShout(PluggableTextMorph)>doIt >>>> 2024962936: a(n) OBPluggableTextMorphWithShout >>>> 0xbfd172f8 I [] in >>>> OBPluggableTextMorphWithShout(PluggableTextMorph)>handleEdit: 2024962936: >>>> a(n) OBPluggableTextMorphWithShout >>>> 0xbfd17318 I OBTextMorphWithShout(TextMorph)>handleEdit: 2024964024: a(n) >>>> OBTextMorphWithShout >>>> 0xbfd17340 I OBPluggableTextMorphWithShout(PluggableTextMorph)>handleEdit: >>>> 2024962936: a(n) OBPluggableTextMorphWithShout >>>> 0xbfd1735c M OBPluggableTextMorphWithShout(PluggableTextMorph)>doIt >>>> 2024962936: a(n) OBPluggableTextMorphWithShout >>>> 0xbfd17378 M OBDefinitionPanel(OBTextPanel)>perform:orSendTo: 2024940940: >>>> a(n) OBDefinitionPanel >>>> 0xbfd173a8 I [] in ToggleMenuItemMorph(MenuItemMorph)>invokeWithEvent: >>>> 2031928172: a(n) ToggleMenuItemMorph >>>> 0xbfd173c8 M BlockClosure>ensure: 2032477540: a(n) BlockClosure >>>> 0xbfd173f0 I CursorWithMask(Cursor)>showWhile: 2002515888: a(n) >>>> CursorWithMask >>>> 0xbfd17418 I ToggleMenuItemMorph(MenuItemMorph)>invokeWithEvent: >>>> 2031928172: a(n) ToggleMenuItemMorph >>>> 0xbfd1743c I ToggleMenuItemMorph(MenuItemMorph)>mouseUp: 2031928172: a(n) >>>> ToggleMenuItemMorph >>>> 0xbfd17458 M ToggleMenuItemMorph(MenuItemMorph)>handleMouseUp: 2031928172: >>>> a(n) ToggleMenuItemMorph >>>> 0xbfd17474 M MouseButtonEvent>sentTo: 2032130572: a(n) MouseButtonEvent >>>> 0xbfd17490 M ToggleMenuItemMorph(Morph)>handleEvent: 2031928172: a(n) >>>> ToggleMenuItemMorph >>>> 0xbfd174c0 M MorphicEventDispatcher>dispatchDefault:with: 2032130556: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd174e0 M MorphicEventDispatcher>dispatchEvent:with: 2032130556: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd17500 M ToggleMenuItemMorph(Morph)>processEvent:using: 2031928172: >>>> a(n) ToggleMenuItemMorph >>>> 0xbfd17534 M MorphicEventDispatcher>dispatchDefault:with: 2032130556: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd17554 M MorphicEventDispatcher>dispatchEvent:with: 2032130556: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd17574 M MenuMorph(Morph)>processEvent:using: 2031927856: a(n) >>>> MenuMorph >>>> 0xbfd17594 M MenuMorph(Morph)>processEvent: 2031927856: a(n) MenuMorph >>>> 0xbfd175b0 M MenuMorph>handleFocusEvent: 2031927856: a(n) MenuMorph >>>> 0xbfd175d8 M [] in HandMorph>sendFocusEvent:to:clear: 2002449320: a(n) >>>> HandMorph >>>> 0xbfd175f4 M [] in PasteUpMorph>becomeActiveDuring: 2003523448: a(n) >>>> PasteUpMorph >>>> 0xbfd17610 M BlockClosure>on:do: 2032130460: a(n) BlockClosure >>>> 0xbfd1763c M PasteUpMorph>becomeActiveDuring: 2003523448: a(n) PasteUpMorph >>>> 0xbfd17660 M HandMorph>sendFocusEvent:to:clear: 2002449320: a(n) HandMorph >>>> 0xbfd17688 M HandMorph>sendEvent:focus:clear: 2002449320: a(n) HandMorph >>>> 0xbfd176ac M HandMorph>sendMouseEvent: 2002449320: a(n) HandMorph >>>> 0xbfd176d0 M HandMorph>handleEvent: 2002449320: a(n) HandMorph >>>> 0xbfd176fc M HandMorph>processEvents 2002449320: a(n) HandMorph >>>> 0xbfd17714 M [] in WorldState>doOneCycleNowFor: 2004924588: a(n) WorldState >>>> 0xbfd17738 M Array(SequenceableCollection)>do: 2001081712: a(n) Array >>>> 0xbfd17754 M WorldState>handsDo: 2004924588: a(n) WorldState >>>> 0xbfd17770 M WorldState>doOneCycleNowFor: 2004924588: a(n) WorldState >>>> 0xbfd1778c M WorldState>doOneCycleFor: 2004924588: a(n) WorldState >>>> 0xbfd101bc M WorldState>doOneSubCycleFor: 2004924588: a(n) WorldState >>>> 0xbfd101d8 M PasteUpMorph>doOneSubCycle 2003523448: a(n) PasteUpMorph >>>> 0xbfd10200 I MenuMorph>invokeModalAt:in:allowKeyboard: 2031927856: a(n) >>>> MenuMorph >>>> 0xbfd1022c I MenuMorph>invokeModal: 2031927856: a(n) MenuMorph >>>> 0xbfd10250 I MenuMorph>invokeModal 2031927856: a(n) MenuMorph >>>> 0xbfd10274 I >>>> OBPluggableTextMorphWithShout(PluggableTextMorph)>yellowButtonActivity: >>>> 2024962936: a(n) OBPluggableTextMorphWithShout >>>> 0xbfd10298 I OBTextMorphWithShout(TextMorphForEditView)>mouseDown: >>>> 2024964024: a(n) OBTextMorphWithShout >>>> 0xbfd102b4 M OBTextMorphWithShout(Morph)>handleMouseDown: 2024964024: a(n) >>>> OBTextMorphWithShout >>>> 0xbfd102d0 M MouseButtonEvent>sentTo: 2031927788: a(n) MouseButtonEvent >>>> 0xbfd102ec M OBTextMorphWithShout(Morph)>handleEvent: 2024964024: a(n) >>>> OBTextMorphWithShout >>>> 0xbfd10328 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd10348 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd10368 M OBTextMorphWithShout(Morph)>processEvent:using: 2024964024: >>>> a(n) OBTextMorphWithShout >>>> 0xbfd103a8 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd103c8 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd103e8 M TransformMorph(Morph)>processEvent:using: 2024963800: a(n) >>>> TransformMorph >>>> 0xbfd10428 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd10448 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd10468 M OBPluggableTextMorphWithShout(Morph)>processEvent:using: >>>> 2024962936: a(n) OBPluggableTextMorphWithShout >>>> 0xbfd104a8 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd104c8 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd104e8 M OBGroupingMorph(Morph)>processEvent:using: 2024957608: a(n) >>>> OBGroupingMorph >>>> 0xbfd10528 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd10548 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd10568 M OBSystemWindow(Morph)>processEvent:using: 2024944124: a(n) >>>> OBSystemWindow >>>> 0xbfd105a8 M MorphicEventDispatcher>dispatchMouseDown:with: 2031927596: >>>> a(n) MorphicEventDispatcher >>>> 0xbfd105c8 M MorphicEventDispatcher>dispatchEvent:with: 2031927596: a(n) >>>> MorphicEventDispatcher >>>> 0xbfd105e8 M PasteUpMorph(Morph)>processEvent:using: 2003523448: a(n) >>>> PasteUpMorph >>>> 0xbfd10610 M PasteUpMorph>processEvent:using: 2003523448: a(n) PasteUpMorph >>>> 0xbfd10630 M PasteUpMorph(Morph)>processEvent: 2003523448: a(n) >>>> PasteUpMorph >>>> 0xbfd10650 M HandMorph>sendEvent:focus:clear: 2002449320: a(n) HandMorph >>>> 0xbfd10674 M HandMorph>sendMouseEvent: 2002449320: a(n) HandMorph >>>> 0xbfd10698 M HandMorph>handleEvent: 2002449320: a(n) HandMorph >>>> 0xbfd106c4 M HandMorph>processEvents 2002449320: a(n) HandMorph >>>> 0xbfd106dc M [] in WorldState>doOneCycleNowFor: 2004924588: a(n) WorldState >>>> 0xbfd10700 M Array(SequenceableCollection)>do: 2001081712: a(n) Array >>>> 0xbfd1071c M WorldState>handsDo: 2004924588: a(n) WorldState >>>> 0xbfd10738 M WorldState>doOneCycleNowFor: 2004924588: a(n) WorldState >>>> 0xbfd10754 M WorldState>doOneCycleFor: 2004924588: a(n) WorldState >>>> 0xbfd10770 M PasteUpMorph>doOneCycle 2003523448: a(n) PasteUpMorph >>>> 0xbfd10790 I [] in Project class>spawnNewProcess 2004397340: a(n) Project >>>> class >>>> 2025126836 s [] in BlockClosure>newProcess >>>> >>>> Most recent primitives >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> at:put: >>>> basicNew >>>> new: >>>> at:put: >>>> at:put: >>>> value:value: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> basicNew >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> basicNew: >>>> at:put: >>>> at:put: >>>> basicNew: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> species >>>> new: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> species >>>> new: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> basicNew: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> basicNew: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> new >>>> value:value: >>>> value:value: >>>> basicNew >>>> size >>>> basicNew >>>> byteAt:put: >>>> byteAt:put: >>>> bitXor: >>>> size >>>> species >>>> basicNew: >>>> replaceFrom:to:with:startingAt: >>>> basicNew: >>>> replaceFrom:to:with:startingAt: >>>> replaceFrom:to:with:startingAt: >>>> basicNew: >>>> basicNew >>>> at:put: >>>> species >>>> basicNew: >>>> replaceFrom:to:with:startingAt: >>>> replaceFrom:to:with:startingAt: >>>> size >>>> at:put: >>>> species >>>> basicNew: >>>> replaceFrom:to:with:startingAt: >>>> size >>>> size >>>> size >>>> perform:withArguments: >>>> perform:withArguments: >>>> species >>>> basicNew >>>> new: >>>> value: >>>> perform:withArguments: >>>> at:put: >>>> perform:withArguments: >>>> species >>>> new: >>>> species >>>> new: >>>> species >>>> new: >>>> replaceFrom:to:with:startingAt: >>>> newMethod:header: >>>> at:put: >>>> at:put: >>>> at:put: >>>> objectAt:put: >>>> objectAt:put: >>>> objectAt:put: >>>> objectAt:put: >>>> basicNew >>>> size >>>> objectAt: >>>> basicNew >>>> objectAt: >>>> at:put: >>>> at:put: >>>> at:put: >>>> at:put: >>>> value >>>> objectAt: >>>> size >>>> objectAt: >>>> objectAt: >>>> objectAt: >>>> objectAt: >>>> objectAt: >>>> objectAt:put: >>>> objectAt: >>>> objectAt:put: >>>> withArgs:executeMethod: >>>> basicNew >>>> perform: >>>> basicNew >>>> @ >>>> basicNew >>>> primCreateRenderer:x:y:w:h: >>>> millisecondClockValue >>>> signal >>>> primSignal:atMilliseconds: >>>> millisecondClockValue >>>> wait >>>> primGetNextEvent: >>>> millisecondClockValue >>>> wait >>>> signal >>>> millisecondClockValue >>>> primSignal:atMilliseconds: >>>> millisecondClockValue >>>> wait >>>> signal >>>> wait >>>> at:put: >>>> primRender:getProperty: >>>> basicNew >>>> primLoadLibrary: >>>> basicNew: >>>> sizeFieldPut: >>>> unsignedLongAt:put: >>>> basicNew >>>> new: >>>> value >>>> value >>>> basicNew: >>>> sizeFieldPut: >>>> unsignedLongAt:put: >>>> basicNew >>>> at:put: >>>> primFindSymbol: >>>> basicNew: >>>> sizeFieldPut: >>>> addressFieldPut: >>>> primFFICallResult:with: >>>> Aborted >>>> >>>> >>>> >>>> >>>> >>> >>> >>> >>> -- >>> lets reign all together >>> >>> >> >> -- >> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >> Alexandre Bergel http://www.bergel.eu >> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >> >> >> >> >> >> >> > -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.