From 9ad5140c355800e7d3a799027683d104bad7f0f9 Mon Sep 17 00:00:00 2001 From: Michael Kapelko Date: Mon, 17 Jul 2017 16:33:41 +0700 Subject: [PATCH] Add 2017-07 article --- 2017-07-openscenegraph-guide.png | Bin 0 -> 44226 bytes archives.html | 4 + author/opensource-game-studio.html | 97 ++++++--------- author/opensource-game-studio2.html | 18 +++ category/news.html | 84 ++++++------- feeds/all.atom.xml | 46 ++++++- feeds/news.atom.xml | 24 +++- index.html | 97 ++++++--------- index2.html | 18 +++ openscenegraph-cross-platform-guide-ru.html | 131 ++++++++++++++++++++ openscenegraph-cross-platform-guide.html | 131 ++++++++++++++++++++ 11 files changed, 490 insertions(+), 160 deletions(-) create mode 100644 2017-07-openscenegraph-guide.png create mode 100644 openscenegraph-cross-platform-guide-ru.html create mode 100644 openscenegraph-cross-platform-guide.html diff --git a/2017-07-openscenegraph-guide.png b/2017-07-openscenegraph-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4b13bbe9a6b4f6602dbca3b2d27d39fe382543 GIT binary patch literal 44226 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%0ASL-_x>Wz36jFj z-LKhmv_gJO07pV!O@K8(UhHy6W%N@7vAzq4t~R-w*v%lJ#)eXK)6d)Vf5d|4>K~Xf zk+IF6D1Qoz8Q!o7yZlw-t1WC6B%fK8)c1{et@CuzdBGZ2L|(NC8n`E;B&N(R1NeXe zJy!^ms*vAS%rZfhAtyEZc9UEJ>J(mdc^%PRs{P$!MButv2%{$fniAtx@cHgUArD3@ zL5Kc_6RmV)zrs+nuPTq*mEA4ZkhGAv|B_Xrsm%sMsuCIHAORwa>sU?;jP6^L+Btbq z`=nAh{vC6VZ+5)KE5wkX-mdRWY(=Pke$oZRgCi+4KhtNsM1REHkM|`(ex02^22$)2 zemcws|A_>H5Vj?Gtb{aWiv3^xh7A@1)OBFe2oZVToRsIVtAMfY0ERZKrb7iX$}eml zk0~FtF8XB)_kNaal;v1S^p@k*AuFl4z85v(7bH<8e^c9(TiP)t`|MKW1AicH!^#O)kE2K!Qd~BZJ^Alsrf*KvWYfpc3T}`tc1Np5QcN z6)|9>7gTowOO4E-0`UmIBr4TKK3JqCHgD#2u%XmV`&!!#T?-yW7l+zfWdl`Fm9ScZJX$W z5etE+YKTvEw#8@mjyE3Ks&U1VJM6%SFLFsc%F}__DEGqPahIYre}SQSG~L8+=s7?s z${F%8&;h8m*D$51qT9dWJ{b#u@B|!RS*TW7w2gug*XDwu+Mof9>%aKet6KQ6bJxS} zp1O6R?2~f2E`ie#b-_FQI8bZUmMn-M3u4r0CZzhby;!Ev8zETUaEAjVDpq%a3{pk- zE*E``n1TvY<4_1H>-B#-D@bqyW7<|Gnc0`=d$;fFMUqisepn%aFw4GSq$~n~t(OT* z@wxsV{MV>x#zHA5Czp-~379EK0i&-%YH)|5lp=zT$vt(uo!v=tB0_xrZGA<>)hmhE(zDlyqeSKm^->W_(s7Y8e0Kj7s zPsu|(4*;4f`PuV>CAF_X!)_V;x%!ue_UL>SZd=WyJ2GXHLDM1cG)C5MscP9t8xyl$x3D32 z@l)m`O#OvhGW=I3XY>V)R89=ls$=$`c1A}e)Xe45bv*6krfh-q$z z?q-%VutZ%6+*kB6Ca=o(u*wIZEGgeQ&4~dsBczNF2;=IS={UqcZ=cf2skU?KWU&D!+@Y zeOV@0ct=*@clRC&flDg!3V6vLAV`f^D314)2)*!ffNsEa@uBCc zUkx1SSFM(CAXWy*MyPQ?{A%q)0I9w7)

52-`e!=N>m`PkRfuzN`MRV-?R259Ir; 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 literal 0 HcmV?d00001 diff --git a/archives.html b/archives.html index c0f3def..79dcd7d 100644 --- a/archives.html +++ b/archives.html @@ -49,6 +49,10 @@ + + + + diff --git a/author/opensource-game-studio.html b/author/opensource-game-studio.html index b4d3014..25065ef 100644 --- a/author/opensource-game-studio.html +++ b/author/opensource-game-studio.html @@ -48,50 +48,30 @@
-

iOS tutorial

-
Thu 08 June 2017 - ru - -

iOS tutorial

-

This article describes problems we faced during the creation of iOS tutorial in May 2017.

-

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.

-

Native library

-

The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library?

-

We had to consider the following facts:

+

OpenSceneGraph cross-platform guide

+
Sat 01 July 2017 + ru + +

OpenSceneGraph guide

+

This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

+

June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. +In case you missed it, here's a link to the final application. Open it in your web browser.

+

We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.

+

We have been doing OpenSceneGraph cross-platform guide for two main reasons:

    -
  1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI
      -
    • There's no need for a separate library (+ application)
    • -
    • Creating a separate library is an additional work (- library)
    • -
    -
  2. -
  3. OpenSceneGraph builds libraries
      -
    • It's easier to use standard build process (+ library)
    • -
    • It's harder to create custom build process just for a single platform (- application)
    • -
    -
  4. -
  5. OpenSceneGraph uses CMake build system, which is not supported by Xcode
      -
    • Xcode project can't include CMake files (- application)
    • -
    • It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)
    • -
    -
  6. -
  7. CMake can generate Xcode project
      -
    • It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)
    • -
    • Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library)
    • -
    -
  8. +
  9. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form
  10. +
  11. Share the knowledge with OpenSceneGraph community to make it stronger
-

After evaluating the pros and cons of each approach, we decided to turn the sample application into a library and include it in Xcode project. The downside of this approach is that simulator and real device builds need separate library builds.

-

Refactoring

-

The second question we had to answer was: should there be a single source code base for all platforms or several ones, one for each platform?

-

While doing Android tutorial we used single source code base because it worked fine for desktop and Android. As we started to work through iOS tutorial, it became apparent that particular features may or may not work on some platforms. For example, one feature may work on desktop and iOS, but not Android. Another feature may work on iOS and Android, but not desktop. Since we didn't want to pollute the code with #ifdefs, we started to put each platform combination into a separate file. The number of files grew rapidly. The files were reusable, but it became extremely hard to see the whole picture.

-

At this point, we realized there's the second question. We reminded ourselves that the main purpose of the sample source code is to teach how to do basic OpenSceneGraph things, not create a reusable library with API that is stable across several years.

-

That's when our home grown feature tool came into play. With its help, we separated the code into several parts, which in the end produce just two files for each platform:

+

We believe we succeeded in both. Here's why:

    -
  1. functions.h - contains reusable classless functions
  2. -
  3. main.h - contains the rest of the sample application code
  4. +
  5. The guide repository has more stars (aka "likes") than any other repository of ours
  6. +
  7. OpenSceneGraph project leader Robert Osfield said "Great work", which means a lot
  8. +
  9. The guide already has two issues
-

Their contents differ slightly for each platform, but it's easy to see the whole picture now.

-

That's it for describing problems we faced during the creation of iOS tutorial in May 2017.

Category: News +

Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.

+

However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we promised in January.

+

That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

Category: News

@@ -105,6 +85,25 @@ +
+

iOS tutorial

+
Thu 08 June 2017 + ru + +

iOS tutorial

+

This article describes problems we faced during the creation of iOS tutorial in May 2017.

+

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up …

Category: News + +

+ + + Read More +
+
+ + + +

Pelican review

Sat 03 June 2017 @@ -247,24 +246,6 @@ to get up and running real fast.


- - - - -
Page 1 of 2
diff --git a/author/opensource-game-studio2.html b/author/opensource-game-studio2.html index a9fedcf..821d4bb 100644 --- a/author/opensource-game-studio2.html +++ b/author/opensource-game-studio2.html @@ -48,6 +48,24 @@ + + + + +

kr3

Sun 01 January 2017 diff --git a/category/news.html b/category/news.html index ed91944..fe0614d 100644 --- a/category/news.html +++ b/category/news.html @@ -47,6 +47,44 @@ +
+

OpenSceneGraph cross-platform guide

+
Sat 01 July 2017 + ru + +

OpenSceneGraph guide

+

This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

+

June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. +In case you missed it, here's a link to the final application. Open it in your web browser.

+

We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.

+

We have been doing OpenSceneGraph cross-platform guide for two main reasons:

+
    +
  1. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form
  2. +
  3. Share the knowledge with OpenSceneGraph community to make it stronger
  4. +
+

We believe we succeeded in both. Here's why:

+
    +
  1. The guide repository has more stars (aka "likes") than any other repository of ours
  2. +
  3. OpenSceneGraph project leader Robert Osfield said "Great work", which means a lot
  4. +
  5. The guide already has two issues
  6. +
+

Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.

+

However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we promised in January.

+

That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

Category: News + +

+ + +
+ + +
+ + + + +

iOS tutorial

Thu 08 June 2017 @@ -54,50 +92,16 @@

iOS tutorial

This article describes problems we faced during the creation of iOS tutorial in May 2017.

-

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.

-

Native library

-

The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library?

-

We had to consider the following facts:

-
    -
  1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI
      -
    • There's no need for a separate library (+ application)
    • -
    • Creating a separate library is an additional work (- library)
    • -
    -
  2. -
  3. OpenSceneGraph builds libraries
      -
    • It's easier to use standard build process (+ library)
    • -
    • It's harder to create custom build process just for a single platform (- application)
    • -
    -
  4. -
  5. OpenSceneGraph uses CMake build system, which is not supported by Xcode
      -
    • Xcode project can't include CMake files (- application)
    • -
    • It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)
    • -
    -
  6. -
  7. CMake can generate Xcode project
      -
    • It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)
    • -
    • Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library)
    • -
    -
  8. -
-

After evaluating the pros and cons of each approach, we decided to turn the sample application into a library and include it in Xcode project. The downside of this approach is that simulator and real device builds need separate library builds.

-

Refactoring

-

The second question we had to answer was: should there be a single source code base for all platforms or several ones, one for each platform?

-

While doing Android tutorial we used single source code base because it worked fine for desktop and Android. As we started to work through iOS tutorial, it became apparent that particular features may or may not work on some platforms. For example, one feature may work on desktop and iOS, but not Android. Another feature may work on iOS and Android, but not desktop. Since we didn't want to pollute the code with #ifdefs, we started to put each platform combination into a separate file. The number of files grew rapidly. The files were reusable, but it became extremely hard to see the whole picture.

-

At this point, we realized there's the second question. We reminded ourselves that the main purpose of the sample source code is to teach how to do basic OpenSceneGraph things, not create a reusable library with API that is stable across several years.

-

That's when our home grown feature tool came into play. With its help, we separated the code into several parts, which in the end produce just two files for each platform:

-
    -
  1. functions.h - contains reusable classless functions
  2. -
  3. main.h - contains the rest of the sample application code
  4. -
-

Their contents differ slightly for each platform, but it's easy to see the whole picture now.

-

That's it for describing problems we faced during the creation of iOS tutorial in May 2017.

Category: News +

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up …

Category: News

+ Read More +
+
Page 1 of 1
@@ -106,10 +110,6 @@

- - - -
diff --git a/feeds/all.atom.xml b/feeds/all.atom.xml index b42d7e5..b47621b 100644 --- a/feeds/all.atom.xml +++ b/feeds/all.atom.xml @@ -1,5 +1,49 @@ -Opensource Game Studiohttps://ogstudio.github.io/2017-06-08T10:00:00+07:00iOS tutorial2017-06-08T10:00:00+07:002017-06-08T10:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-06-08:/ios-tutorial.html<p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> +Opensource Game Studiohttps://ogstudio.github.io/2017-07-01T00:00:00+07:00OpenSceneGraph cross-platform guide2017-07-01T00:00:00+07:002017-07-01T00:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide.html<p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> +<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. +In case you missed it, here's …</p><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> +<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. +In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> +<p>We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.</p> +<p>We have been doing OpenSceneGraph cross-platform guide for two main reasons:</p> +<ol> +<li>Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form</li> +<li>Share the knowledge with OpenSceneGraph community to make it stronger</li> +</ol> +<p>We believe we succeeded in both. Here's why:</p> +<ol> +<li>The guide repository has more <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">stars</a> (aka "likes") than any other repository of ours</li> +<li>OpenSceneGraph project leader Robert Osfield said <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"Great work"</a>, which means a lot</li> +<li>The guide already has <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">two issues</a></li> +</ol> +<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> +<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> +<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p>OpenSceneGraph cross-platform guide2017-07-01T00:00:00+07:002017-07-01T00:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide-ru.html<p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.</p> +<p>Июнь ознаменовал собой окончание работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">кросс-платформенным руководством OpenSceneGraph</a>. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">сборку и запуск примера приложения OpenSceneGraph в вебе</a> с помощью Emscripten. +Если вы упустили этот самоучитель, то вот <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">ссылка на приложение</a> из него. Откройте …</p><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.</p> +<p>Июнь ознаменовал собой окончание работы над <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">кросс-платформенным руководством OpenSceneGraph</a>. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">сборку и запуск примера приложения OpenSceneGraph в вебе</a> с помощью Emscripten. +Если вы упустили этот самоучитель, то вот <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">ссылка на приложение</a> из него. Откройте ссылку в веб-браузере.</p> +<p>Мы начали составление руководства в феврале, как только нам удалось отобразить простую модель на мобилках и вебе. +Мы потратили 120 часов за пять месяцев на составление десяти самоучителей этого руководства.</p> +<p>Создание кросс-платформенного руководства OpenSceneGraph преследовало две основные цели:</p> +<ol> +<li>Сохранить знания о кросс-платформенной работе с OpenSceneGraph в легкодоступной и воспроизводимой форме</li> +<li>Поделиться этим знанием с сообществом OpenSceneGraph и тем самым усилить сообщество</li> +</ol> +<p>Мы уверены в том, что нам удалось достичь обе цели. И вот почему:</p> +<ol> +<li>Хранилище руководства получило больше <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">звёзд</a> (лайков), чем любое другое наше хранилище</li> +<li>Robert Osfield, лидер проекта OpenSceneGraph, оценил руководство как <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"отличную работу"</a>; это значит для нас многое</li></li> +<li>У руководства уже есть <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">два тикета</a></li> +</ol> +<p>В конце концов, мы просто рады тому факту, что изучили кросс-платформенную разработку с OpenSceneGraph и поделились этим знанием с сообществом.</p> +<p>Тем не менее, наше путешествие на этом не окончено. Используя знания руководства, мы продолжаем работу над тем, чтобы добавить в свои инструменты поддержку мобилок и веба, как мы <a href="http://opengamestudio.org/lang/ru/news/2456">обещали в январе</a>.</p> +<p>На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph.</p>iOS tutorial2017-06-08T10:00:00+07:002017-06-08T10:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-06-08:/ios-tutorial.html<p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> <p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> <p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up …</p><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> <p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> diff --git a/feeds/news.atom.xml b/feeds/news.atom.xml index 109bd4d..3c32ded 100644 --- a/feeds/news.atom.xml +++ b/feeds/news.atom.xml @@ -1,5 +1,27 @@ -Opensource Game Studio - Newshttps://ogstudio.github.io/2017-06-08T10:00:00+07:00iOS tutorial2017-06-08T10:00:00+07:002017-06-08T10:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-06-08:/ios-tutorial.html<p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> +Opensource Game Studio - Newshttps://ogstudio.github.io/2017-07-01T00:00:00+07:00OpenSceneGraph cross-platform guide2017-07-01T00:00:00+07:002017-07-01T00:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-07-01:/openscenegraph-cross-platform-guide.html<p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> +<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. +In case you missed it, here's …</p><p><img alt="OpenSceneGraph guide" src="https://ogstudio.github.io/2017-07-openscenegraph-guide.png"></p> +<p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p> +<p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten. +In case you missed it, here's a <a href="https://ogstudio.github.io/openscenegraph-cross-platform-guide/">link to the final application</a>. Open it in your web browser.</p> +<p>We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.</p> +<p>We have been doing OpenSceneGraph cross-platform guide for two main reasons:</p> +<ol> +<li>Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form</li> +<li>Share the knowledge with OpenSceneGraph community to make it stronger</li> +</ol> +<p>We believe we succeeded in both. Here's why:</p> +<ol> +<li>The guide repository has more <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/stargazers">stars</a> (aka "likes") than any other repository of ours</li> +<li>OpenSceneGraph project leader Robert Osfield said <a href="http://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74815.html">"Great work"</a>, which means a lot</li> +<li>The guide already has <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues">two issues</a></li> +</ol> +<p>Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.</p> +<p>However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we <a href="http://opengamestudio.org/lang/en/news/2456">promised in January</a>.</p> +<p>That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.</p>iOS tutorial2017-06-08T10:00:00+07:002017-06-08T10:00:00+07:00Opensource Game Studiotag:ogstudio.github.io,2017-06-08:/ios-tutorial.html<p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> <p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> <p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up …</p><p><img alt="iOS tutorial" src="https://ogstudio.github.io/2017-06-08-ios-refactoring.png"></p> <p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p> diff --git a/index.html b/index.html index aca43f1..178d4a9 100644 --- a/index.html +++ b/index.html @@ -48,50 +48,30 @@
-

iOS tutorial

-
Thu 08 June 2017 - ru - -

iOS tutorial

-

This article describes problems we faced during the creation of iOS tutorial in May 2017.

-

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up with a hackish demo that works for one person, but it's hard to create a concise example that works for everyone.

-

Native library

-

The first question we had to answer was: should the sample application be part of Xcode project or be a separately built library?

-

We had to consider the following facts:

+

OpenSceneGraph cross-platform guide

+
Sat 01 July 2017 + ru + +

OpenSceneGraph guide

+

This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

+

June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. +In case you missed it, here's a link to the final application. Open it in your web browser.

+

We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.

+

We have been doing OpenSceneGraph cross-platform guide for two main reasons:

    -
  1. Xcode project can use C++ directly (thanks to Objective-C++) without stuff like JNI
      -
    • There's no need for a separate library (+ application)
    • -
    • Creating a separate library is an additional work (- library)
    • -
    -
  2. -
  3. OpenSceneGraph builds libraries
      -
    • It's easier to use standard build process (+ library)
    • -
    • It's harder to create custom build process just for a single platform (- application)
    • -
    -
  4. -
  5. OpenSceneGraph uses CMake build system, which is not supported by Xcode
      -
    • Xcode project can't include CMake files (- application)
    • -
    • It's easy to create custom CMake file that includes OpenSceneGraph CMake file to build a single library (+ library)
    • -
    -
  6. -
  7. CMake can generate Xcode project
      -
    • It's possible to create a CMake file that builds both OpenSceneGraph and the sample application (+ application)
    • -
    • Xcode is the de-facto tool to create Xcode projects; it's easier to use standard build process (+ library)
    • -
    -
  8. +
  9. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form
  10. +
  11. Share the knowledge with OpenSceneGraph community to make it stronger
-

After evaluating the pros and cons of each approach, we decided to turn the sample application into a library and include it in Xcode project. The downside of this approach is that simulator and real device builds need separate library builds.

-

Refactoring

-

The second question we had to answer was: should there be a single source code base for all platforms or several ones, one for each platform?

-

While doing Android tutorial we used single source code base because it worked fine for desktop and Android. As we started to work through iOS tutorial, it became apparent that particular features may or may not work on some platforms. For example, one feature may work on desktop and iOS, but not Android. Another feature may work on iOS and Android, but not desktop. Since we didn't want to pollute the code with #ifdefs, we started to put each platform combination into a separate file. The number of files grew rapidly. The files were reusable, but it became extremely hard to see the whole picture.

-

At this point, we realized there's the second question. We reminded ourselves that the main purpose of the sample source code is to teach how to do basic OpenSceneGraph things, not create a reusable library with API that is stable across several years.

-

That's when our home grown feature tool came into play. With its help, we separated the code into several parts, which in the end produce just two files for each platform:

+

We believe we succeeded in both. Here's why:

    -
  1. functions.h - contains reusable classless functions
  2. -
  3. main.h - contains the rest of the sample application code
  4. +
  5. The guide repository has more stars (aka "likes") than any other repository of ours
  6. +
  7. OpenSceneGraph project leader Robert Osfield said "Great work", which means a lot
  8. +
  9. The guide already has two issues
-

Their contents differ slightly for each platform, but it's easy to see the whole picture now.

-

That's it for describing problems we faced during the creation of iOS tutorial in May 2017.

Category: News +

Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.

+

However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we promised in January.

+

That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

Category: News

@@ -105,6 +85,25 @@ +
+

iOS tutorial

+
Thu 08 June 2017 + ru + +

iOS tutorial

+

This article describes problems we faced during the creation of iOS tutorial in May 2017.

+

This February we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come up …

Category: News + +

+ + + Read More +
+
+ + + +

Pelican review

Sat 03 June 2017 @@ -247,24 +246,6 @@ to get up and running real fast.


- - - - -
Page 1 of 2
diff --git a/index2.html b/index2.html index ed10a92..0987448 100644 --- a/index2.html +++ b/index2.html @@ -48,6 +48,24 @@ + + + + +

kr3

Sun 01 January 2017 diff --git a/openscenegraph-cross-platform-guide-ru.html b/openscenegraph-cross-platform-guide-ru.html new file mode 100644 index 0000000..1a2faa0 --- /dev/null +++ b/openscenegraph-cross-platform-guide-ru.html @@ -0,0 +1,131 @@ + + + + + + + OpenSceneGraph cross-platform guide + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+

OpenSceneGraph cross-platform guide

+
+ +
Sat 01 July 2017 + en + +

OpenSceneGraph guide

+

Эта статья резюмирует создание кросс-платформенного руководства OpenSceneGraph.

+

Июнь ознаменовал собой окончание работы над кросс-платформенным руководством OpenSceneGraph. Мы опубликовали последний самоучитель (из изначально запланированных). Этот самоучитель описывает сборку и запуск примера приложения OpenSceneGraph в вебе с помощью Emscripten. +Если вы упустили этот самоучитель, то вот ссылка на приложение из него. Откройте ссылку в веб-браузере.

+

Мы начали составление руководства в феврале, как только нам удалось отобразить простую модель на мобилках и вебе. +Мы потратили 120 часов за пять месяцев на составление десяти самоучителей этого руководства.

+

Создание кросс-платформенного руководства OpenSceneGraph преследовало две основные цели:

+
    +
  1. Сохранить знания о кросс-платформенной работе с OpenSceneGraph в легкодоступной и воспроизводимой форме
  2. +
  3. Поделиться этим знанием с сообществом OpenSceneGraph и тем самым усилить сообщество
  4. +
+

Мы уверены в том, что нам удалось достичь обе цели. И вот почему:

+
    +
  1. Хранилище руководства получило больше звёзд (лайков), чем любое другое наше хранилище
  2. +
  3. Robert Osfield, лидер проекта OpenSceneGraph, оценил руководство как "отличную работу"; это значит для нас многое
  4. +
  5. У руководства уже есть два тикета
  6. +
+

В конце концов, мы просто рады тому факту, что изучили кросс-платформенную разработку с OpenSceneGraph и поделились этим знанием с сообществом.

+

Тем не менее, наше путешествие на этом не окончено. Используя знания руководства, мы продолжаем работу над тем, чтобы добавить в свои инструменты поддержку мобилок и веба, как мы обещали в январе.

+

На этом мы заканчиваем резюме о создании кросс-платформенного руководства OpenSceneGraph.

+

Category: News + +

+ + + +
+
+ + + + + +
+ + + +
+
+
+
+
+

Proudly powered by Pelican, which takes great advantage of Python.

+
+
+
+
\ No newline at end of file diff --git a/openscenegraph-cross-platform-guide.html b/openscenegraph-cross-platform-guide.html new file mode 100644 index 0000000..f0f2080 --- /dev/null +++ b/openscenegraph-cross-platform-guide.html @@ -0,0 +1,131 @@ + + + + + + + OpenSceneGraph cross-platform guide + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+

OpenSceneGraph cross-platform guide

+
+ +
Sat 01 July 2017 + ru + +

OpenSceneGraph guide

+

This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.

+

June marked the finish of OpenSceneGraph cross-platform guide with the publishing of the last (initially planned) tutorial. The tutorial describes how to build and run sample OpenSceneGraph application in Web using Emscripten. +In case you missed it, here's a link to the final application. Open it in your web browser.

+

We started to compose the guide in February when we successfully managed to render a simple model on mobile and web. +We spent 120 hours in five months to produce ten tutorials of the guide.

+

We have been doing OpenSceneGraph cross-platform guide for two main reasons:

+
    +
  1. Keep OpenSceneGraph cross-platform knowledge in easily accessible and reproducible form
  2. +
  3. Share the knowledge with OpenSceneGraph community to make it stronger
  4. +
+

We believe we succeeded in both. Here's why:

+
    +
  1. The guide repository has more stars (aka "likes") than any other repository of ours
  2. +
  3. OpenSceneGraph project leader Robert Osfield said "Great work", which means a lot
  4. +
  5. The guide already has two issues
  6. +
+

Reaching our goal of researching OpenSceneGraph cross-platform development and providing the knowledge back to the community just made us happier.

+

However, our journey does not stop here. Using the knowledge of the guide, we now continue to work on bringing our tools to support mobile and web, just as we promised in January.

+

That's it for summarizing the work we did to produce OpenSceneGraph cross-platform guide.

+

Category: News + +

+ + + +
+
+ + + + + +
+ + + +
+
+
+
+
+

Proudly powered by Pelican, which takes great advantage of Python.

+
+
+
+
\ No newline at end of file
Sat 01 July 2017OpenSceneGraph cross-platform guide
Thu 08 June 2017 iOS tutorial