掲示板

DIYでカメラ遊び🔧🎨(旧「100均の自撮りレンズでチープに宙玉を楽しむ」)

fullsize_image-1.jpg

宙玉(そらたま)ってご存知ですか?実験写真家の上原ゼンジ氏が考案された、透明球を接写撮影してボケた背景と宙に浮いた水晶玉のようなもののコントラストを楽しむ写真の技法です。

http://soratama.org

私は偶然TVの番組(タモリ倶楽部)で知り、知ってから半年くらい経って、100円ショップ(ダイソー)で自撮り用にスマホにクリップする魚眼レンズを売っているのを見つけ、それを使ってスマホ用の宙玉レンズを自作することを思いつきました。

ダイソーの自撮りレンズでチープに宙玉を楽しむ
https://king.mineo.jp/my/65b720658199a3dc/reports/17535
(↑これはコメント受付終了しています)

その後継スレッドが本スレッドです。
スマホカメラの宙玉工作で始めた本スレッドですが、現在では宙玉に関しては下記のサイトマップのように役割分担して、ここでは宙玉作品に至る前の工作やテクニックに関することで、「資料室」に追記するほどまとまってもいないようなことをメモとして残したりやりとりする場にしています。


🐾【サイトマップ的なもの】

🔧🎨「DIYでカメラ遊び」(このスレ)
 a)テンプレ:宙玉を含むカメラ周りの工作のご紹介
 b)コメント欄:宙玉を含むカメラ周りの工作にまつわるお喋り

🖼「宙玉ギャラリー(旧「スマホで宙玉を撮ってみよう」)」
  >https://king.mineo.jp/my/65b720658199a3dc/reports/28448
 c)テンプレ:作品サムネイルのパッチワーク
 d)コメント欄:宙玉写真作品のアップと鑑賞の場

🗂「宙玉写真のためのDIY資料室」
  >https://king.mineo.jp/my/65b720658199a3dc/reports/36200
 e)テンプレ:スマホ宙玉の作り方のまとめ
 f)コメント欄:デジカメ(スマホ以外)やアプリを使った宙玉についての情報


カメラも写真もとくに趣味でなく、フルオートモードでしか使えなかった私ですが、このスレをきっかけにミラーレスカメラを中古で買い(笑)、カメラ周りの工作をして遊ぶようになりました。
既製品を買ってメーカーの想定範囲内で使ってみるだけでは芸がなさすぎてつまらないです。かといって誰も真似できないような凝った工作ができる腕もなく、その両極の間をお気楽にブラついています。

望遠鏡.jpg

宙玉レンズと使う材料が被っている、月も宙に浮いた球だし、という理由で自作屈折望遠鏡でスマホをコリメートさせて月を撮るということに手を出しました。
はじめは鏡筒を宙玉と同じポテチの紙筒で作っていましたが、今はプラスチック製に変えています。
反射望遠鏡に憧れがあったので、「大人の科学マガジン」の付録の反射望遠鏡にスマホがつくようにしたものもありますが、鏡筒がヤワすぎて使い勝手がよくないです。眼視で気軽に月を観るにはいいおもちゃなんですが。

月のように観察しやすいものでも、写真撮影に手を染めるとしっかりした望遠鏡とデジカメでやってみたくなるものです。近頃おもちゃのレベルではありますが私には分相応だと思われるレイメイ藤井のRXA124という反射望遠鏡を買い、拡大撮影にチャレンジしています。
今の所この望遠鏡自体にはDIY要素はあまりない(光軸調整できるように改造できるかもしれませんけど(^^))ので、自作赤道儀との絡みでコメントしてゆくつもりです。

名称未設定.jpg

左上:【格安魚眼】
レンズ 交換式カメラのレンズフィルタとしてつけられる宙玉を作ったあと、同じ手でスマホ用のアダプタレンズをフィルター化して遊べることに気づきました。
そして300円くらいで、235°魚眼のスマホ用レンズを入手して魚眼フィルター化。
本物の魚眼レンズには遠く及びませんが、値段は1/100で雰囲気を体験できます。
のちに、魚眼レンズとしては破格の安さの"Meike 6.5mm F/2.0 アニュラス 魚眼(MF)レンズfor Sony Emountカメラ【中国製】 (Sony)"をAmazonで買いました。Huginというフリーのスティッチソフトと組み合わせて360°パノラマ写真などを楽しんでいます。

左中:【立体視】
魚眼と同じ発想で、スマホ用の3D画像撮影レンズを、レンズフィルタ仕様にしてみました。画像はケラレるのでトリミングしなければなりませんが、それでもスマホで使うよりはるかに画素数の多い画像を得られます。
裸眼立体視も可能ですし、近頃は100均にも売っているスマホ用3Dグラスを使えばもっと簡単に立体風景を見ることができます。

左下:【スマホでチルト】
一眼カメラでは、全体にピントが合った商品写真を撮るために、また現実の風景をわざとピントを外してジオラマ風に写したりするために、カメラのイメージセンサに対してレンズを傾けるティルトアダプタというものがあります。
クリップレンズを首振りにして、スマホでそれに近いことができないかと考えて、スマホ用ティルトレンズを作ってみました。
ティルトさせた状態でタッチフォーカスの場所をうまく選んでやると、パンフォーカスか全ボケかしかできない私のスマホカメラでも前ボケや後ボケの写真を撮ることができます。

中:【安レンズ でボケフォト】
スチルカメラ用ではなく、監視カメラやTV用のCマウントレンズ は趣味のボケフォトには持ってこいです。一眼レフとオールドレンズ を使った本物のボケフォトはプロに、隅々までピントと露出が合った優等生写真は最新スマホに任せて、ときどきこういう写真を撮ってマッタリするのは気分が良いです(^^)

右:【万華鏡】
透明球に変えて万華鏡をカメラレンズ でのぞいてみるのも面白いです。
ボケを生かすと何が写っているのかわからなくなって、自然の景色をオブジェクトにして楽しむことができます。

名称未設定.jpg

星空を宙玉に閉じ込めた写真を撮ってみたいと思い、しかしカメラの露光時間を延ばすだけでは星が日周運動してしまう(それはそれで、面白くはありますが)ので、運動をキャンセルするためには赤道儀というものが必要になると知りました。
宙玉をきっかけとしてカメラを触りだした素人ですから、そんなことも知らなかったのですね(^^;
調べ始めるとこれも奥が深い世界で、カメラ周りのDIYとして格好の素材です。
左上:1号機:24時間タイマーを利用したAC100V電動式
左下:2号機:板2枚と蝶番、M6ねじを利用した手動式
右:3号機:重量物を載せられるようにした2号機の発展型(ヘリクロス式(http://kikuta.o.oo7.jp/02-dobdai.html))
→手動でも使えますが、電動で台天板の回転速度を地球の自転速度と一致させるために、ステッピングモーターと制御用マイコン(Arduinoを利用)を接続します。
基本的なプログラムはもうできていますが、RXA124(卓上反射望遠鏡)を使って楽しく勉強しつつブラッシュアップしてゆきたいと思っています。

名称未設定.jpg

ヘリクロス式赤道儀はさほど工作精度が求められない(したがって材料・部品がホームセンターで手にはいるような汎用品で良いので安く済む(^^))代わりに、望遠鏡を載せるテーブルを一定速度で傾けてゆくためにはジャッキのネジ送りスピードを刻々変えてやらねばならならず、さらに上の2号機のようにタンジェント関数1個だけの単純な関係式ではないため、自動化にはマイコンの力を借ります。
私はマイコンのプログラミングも電子工作も全く素人ですが、Arduinoはこの手の製品では圧倒的な人気があり、先人の資産がたくさんあるためにwebを徘徊して見よう見まねでもどうにかなります。
オープンプラットホームのおかげでハードウエアは安く、プログラム開発環境も無料です(PCは必要です)。
はるか昔に勉強した関数の微分が今になって役立ちました。
目的が違うとはいえ、天文学者でもあったニュートンが発明した微分積分という数学を使わせてもらって、これまたニュートンが発明した反射式望遠鏡を使って月を観るんだと思うと感慨深いです。

公園仰角4方位平射方位1.jpeg

宙玉専用のスレッドを別に立てた今では、このスレは閑古鳥が鳴いて私の独り言になっている感がありますがw、「ギャラリー」「資料室」と違って雑談歓迎です。
よろしければコメントをお待ちしています。



♻️本スレッドは 12/1 にタイトルを変更しました。
(旧)100均の自撮りレンズでチープに宙玉を楽しむ
 ↓
(新)DIYでカメラ遊び


1232 件のコメント
983 - 1,032 / 1,232
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

RXA124のボディーに両面テープの跡が残るのがイヤだったのと、脱落がちょい心配だったので、例のネジを使って20cm主鏡用のセルにRXA124の主鏡を取り付けました。(ネジの短さを補うために、金具をグラインダーで削って薄くしています。)
光軸調整用に、中心に事務用ポイントシールを貼り、埃除けも兼ねてカバーをつけました。ヨーグルトのフタがちょうどいいサイズでしたw
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定2.jpg

更新サボっていてすみません。
台風で半壊した小屋の始末を急いでるもので、
ちょっと趣味はお留守です。

その様子をちょこっとご紹介。
左の模式図のようにカマボコ型の小屋を3分割で描くと、
右端のC面が風に押されて奥へ5mほどずれました。
B面とC面の間の屋根と壁は当然ねじれてくしゃくしゃです。
A面とB面の間はまあまあ無事だったので、この部分だけ残して
潰れた半分を解体することにしました。

右の写真のようにC面はその形を概ね保ったまま綺麗にずれてくれたので(^^;
、またここに出入り口の吊り扉があったので、C面の壁をB面に移植しています。
トタンに内側からアルファベットをスプレーして、できるだけ丁寧に剥がし、
下地の角材を人力で運べる大きさにぶった切り。
そしてB面の位置で写真を見ながら組み立てです。

スケール1/1の模型を作ってるような気分(^^;
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
ご無沙汰しております。
ちょっくら入院生活を送ることにしました(実は半年以上前から決めていました
)ので、
https://king.mineo.jp/my/65b720658199a3dc/reports/28448/comments/1283925
DIYはしばらくお休みです。
病室ではハサミもカッターナイフも看護師詰所に預けなければならないので(^^;

近頃は読む本も技術書ばかりでしたので久々にのんびり文芸書を読もうと「天地明察」などを買って引きこもるつもりです。
入院中、フリックが苦手な事もありあんまり書き込みはしないと思います。
それではご機嫌よう💚
退会済みメンバー
退会済みメンバーさん
ビギナー
今より、動きやすい(笑)
身体になって帰って来てくださいね。

リハビリもキツいと思いますがp(´⌒`q)ファイトで
乗り切って~📣ガンバ

お帰り待ってまーす(*^ω^*)

行ってらっしゃい。
あらあら、元気になってお帰り下さいね。
パワーアップして帰って来て下さいね~待ってます♪
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

flower2.jpg

お久しぶりです。
あたたかい励ましのコメントありがとうございますm(_ _)m

病室から、マイネオ速度制限モードにて初めてのテザリング💙
スピード遅くて使えないという人の気持ちがちょっとわかったかも。(笑)

クリスマスに宙玉ギャラリーでコメントしましたように、宙玉アプリ自作への第一歩を踏み出しました。
以前にちょっとご紹介しましたprocessingという開発環境を使って、今はまだインタフェイスもありませんが元画像(左)からエフェクト画像(右)を生成する、PC上で動くコードが書けたところです。

元画像は、本当はパンフォーカスの写真を使うべきなのですがPCに残っていた写真ではそういうのがなくて、すでに後ボケしてしまってる写真でごめんなさい。
夏頃sky-ranさんのギャラリーに上げたやつです。
(遅ればせながら、掲示板受賞おめでとうございます🏆🥂🎉)

コードをお見せするにはスキルがまだまだなのですが、200行くらいの簡単なものです。処理手順は、
(1)元画像から樽型収差と呼ばれるレンズ歪みの画像を生成
(2)その画像を球面にテクスチャマッピングする
(3)元画像から透明球のハイライト画像を生成
(4)その画像を球面にテクスチャマッピングする
(5)元画像に強めのガウスフィルタをかけてボケた背景画像とする
(6)(5)→(2)→(4)の順に画像を重ねる
(7)球の中心部だけマスクしておいて、弱めのガウスフィルタを全体にかけてアンチエリアシングをする

という感じ。
元画像を球に貼るだけでは歪みが今ひとつなので(1)を行いました。
ハイライト(球のフチに白く映る環境反射)が必要かどうかは好みかと思いますが、とりあえず挑戦してみました(満足はしていませんが(^^;)。

これをAndroidアプリに移行させたいと思ってます。いづれ(笑)。
同じPCを使うやり方でもPov-rayを使うのと違うのは、Precessingの方が自由だという事ですね。例えば背景のぼかし方などは、リアルさを捨てて思い切ってアート寄りにしてもいいわけで。

近いうちに、また。入院生活バンザイ!
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

processing.png

あけましておめでとうございます。
楕円のシャボン玉ボケを玉の周りに散らしてみようとしていますが、なかなか難しいですね(^^;

↓は、その部分のコードです。

bblImg=createGraphics(width,height,P2D);
bblImg.beginDraw();
for(int i=6; i<16; i++){
for(int j=0; j<360; j+=10){
float ang=radians(j);
float len=sqrt(width*width+height*height)/30*i;
int x=int( len*cos(ang)+width/2 );
int y=int( len*sin(ang)+height/2 );
color c=srcImg.get(x,y);
float brightness=(red(c)+green(c)+blue(c))/3;
if(brightness>63 && brightness<191){
bblImg.stroke(c,map(brightness,63,191,63,127));
bblImg.strokeWeight(2);
bblImg.fill(c,map(brightness,63,191,191,63));
float bsz=map(brightness,63,191,width/10,width/6);
bblImg.pushMatrix();
bblImg.translate(x,y);
bblImg.rotate(ang+random(-0.5,0.5));
bblImg.ellipse(0,0,bsz*1.2,bsz*0.8);
bblImg.popMatrix();
}
}
}
bblImg.endDraw();
backImg.blend(bblImg,0,0,width,height,0,0,width,height,ADD);
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

スクリーンショット_2019-01-07_10.06.32.png

>う、さんへ
せっかくのおみくじパケットも含めてお見舞いいただきましてありがとうございます。病人はヒマなので、混雑時間帯を避けていれば制限モードでも不自由はない(通話回線で電話代気にしながらダイアルアップ接続してた頃から考えれば…)こともあり、手持ちパケットは一向に減らないのですけれど、花や果物だと思って頂戴いたしますよ(^^)

病気病院話は辛気臭くなっていけないのでさらっと済ませたいのですが、確かに入院生活になると体力気力がどんどんなくなっていって、治療した箇所以外が社会復帰困難になる程衰える人が結構な割合でいますね。
高齢男性はそうなりやすいみたいです。
ワタシはまだ若いおっさん(笑)で、いろんな意味で鈍感なタチですのでそういうことはないです。

ちょっと話が飛躍するようですが、今遊んでいるprocessingはコンピュータのプログラミング言語の体裁をとっていますが、職業プログラマの方が使うようなものではなくある種のおもちゃです。
例えるなら、javaで作ったアプリが本物のラジオだとすればprosessingで作ったものは電子ブロックを使って作ったラジオみたいなものです。

電子ブロックやLEGOは、ええ歳のおっさんが病室で遊ぶにはちょっとはばかられますが、PCのプログラミングは一見お仕事をしているようにも見える(笑)



クリスマス仕様のデフォルメシャーマン戦車はアマゾンの商品紹介画像からのコピペです。
そこへ雪を降らせようとしています。
雪粒の直径分布とボケ具合に対数を使ってみました。

"このままで俺の人生は終わらない。挑戦させてくれる名言集!"
https://youtu.be/ItNzhb4gvk8

ーーーーー ーーーーー

>javaで作ったアプリが本物のラジオだとすればprosessingで作ったものは電子ブロックを使って作ったラジオみたいなものです。

分かり易い例え、ありがとうございます。

ドアが開くまで叩き続けてみよう。
拓かずのドアをこじあけてみよう。
そんなめげないpayさんの姿勢が気に入ってます。

人生百年時代と言われるようになってきたこんにち、財産などの長生きリスクも考えなくてはならないわけですが、そうは言っても人生って意外と短いものです。

いい時期って案外あっけなく終わってしまうものでもあるような??
いつ、なんどき、何ごとが起こりか分からないので、ぼやぼやしている暇はないはず。
そして人生愉しんだもの勝ち。
(●^o^●)

ひらめいた事はどんどんドシドシこなして行きたいものです。
と、そんな事を年の初めに思ったのでありました。

ーーーーー

私は失敗を受け入れることが出来る。しかし挑戦しないことだけは受け入れられないのだ。


たった一度きりの人生を本当に活かさなかったら、産まれてきたかいがないじゃないか。


最大の名誉とは失敗しない事ではない。倒れても倒れても起き上がる、七転び八起きのダルマに成ることだ。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定2.jpg

さて、宙玉ギャラリーに今日アップしたモノについてです。
プログラムの基本部分は12/30のままです。
球のフチに白く映るハイライトを、processingのnoise関数で作り直しました。
不規則でありつつも全くのランダムでもない、自然界によくある造形を模倣するのによく使われるアルゴリズムの一つだそうです。
それでまず「まんが日本昔話」(古っ(^^;)のオープニングみたいな雲の雨雲版を生成し、宙玉のものと同サイズの仮想球に帯状にマッピングし、視点を90度移動させて見える画を作ります。
雲の隙間はアルファ値100%で透明、グレイの部分は輝度の足し算をして雲のムラに応じて白っぽくなります。

高度なことをプログラミングしているように見えますが、前に書いたように初心者にとっては小難しく興味も持てないコードは書かなくとも大丈夫なようにできているprocessingなので、このイメージを実現するコードくらいは誰でもすぐ書けると思います。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

12/30の簡易版が左、今回のパーリンノイズ版が右です。
玉の全周ハイライトさせずに、光の差している方向を(元画像からどうにか)推定してそこだけハイライトさせた方がいいかもしれません。

またcore i5の私のMacBookAirですら、この処理はちょっと重いので、Androidに移植する場合はここまでやるのは無理な気もしてきました。

_20190110_144440.JPG

私、(ドクターXこと、大門未知子は)失敗しないので、
payさんの手術は無事、成功でしたよ。
(^^)

それにしてもこの患者、実験では失敗だらけね。
でもそこが素敵。だってこの人、全然めげないんですもの。
そして病室でも何やら怪しい作業してるのよ。
名付けて「プログラミング X」なんですって。
(≧▽≦)

未知子のように、これからも未知なるものにどんどん挑み続けて下さいな。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
大文字のXで、プログラミングというと
X68000のXCを思い出しますね。

当時パソコンは各自プログラムして使うもの、の時代が終わり、既製品の(そして大概有料の)ソフトを使うもの、の時代になりつつあり、C言語の習得は挫折しました(^^;

_20190114_080224.JPG

サザンオールスターズのカバーで「C調言葉に御用心」
https://youtu.be/UrB4xRpJeIc

ーーーーー ーーーーー

⤴️「X68000のXC」って、シャープのこれの事ですね。
(▼∀▼)

当時の汎用コンピュータはUnixが主流で安くても数百万円したらしいけど、このポケットコンピュータはポケットマネーで買えたということで人気が沸騰したとかしなかったとか。
(間違っていたらすみません)

プログラミングの打ち込みで単調になることはないですが、コンピュータ言語にも長調と短調がありますし、シャープとフラットもあるので、コンピュータに楽譜を読み込ませる処理はややこしいところかも知れません。

ということで、C調言葉、つまりComputer言語には御用心です。
当時、サザンオールスターズのこの曲も流行っていたようです。
(^^)

_20190114_071951.JPG

チップを頂いたので、調子に乗ってもう少しだけ・・・
(≧▽≦)

江戸時代の天文学者はこういったコンピュータを用いて暦とかの計算をはじき出していたのでしょうか。
だとしたら、ローテク万歳! 大したものです。

要するにそんなに道具本位にならなくても、人間其れなりの事は出来るってことなんでしょうね。

マニュアルを鵜呑みにしたり、他人に丸投げばかりではなく、時には能動的に自分のおつむで考えなさい!
って、pay教授はおっしゃっているのかなと。
(^_-)

_20190114_072020.JPG

ENIAC
ーーーーー ーーーーー

大気圏を脱出したり、アポロを月に行かせたりはこういった計算機、演算機が使われていたらしいです。

以上、図に乗りお邪魔しました。
ではでは。
ε=ε=(ノ≧∇≦)ノ
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
解約忘れのままずるずると会員になっているAmazonPrimeの映画で、「武士の家計簿」に出てきた一場面はまさに、お城の大広間で何十人という「そろばん侍」がそろばんを弾いている姿でした。
あと、江戸時代には「算盤」という計算の道具もあったようですがあまり有名ではありませんね。
同じくアマゾンで観た「エニグマ」で、ナチスドイツの暗号解読のためにアラン・チューリングのチームが開発していた計算機もそこそこの大きさ。
計算機を作るにはまずそれを収める建物の建設から、なんて昔の話かと思いきや、現代のスパコンも主に冷却設備のために専用の建物に収められています。
量子コンピュータの時代になっても、そこのところは変わらないように思います。

江戸時代は暦や普請、年貢や商いの勘定を膨大なマンパワーを使ってやっていたわけですが、実は今も、スパコンやデータセンター、ネットワーク維持の電力消費のことは意識せずにスマホなどの端末の便利さの恩恵に預かっているんだなと改めて思いました。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
processingで書いた宙玉アプリをMacからAndroid端末へ移植する試みのメモ書き:
processing3にはAndroidModeという仕組みがあって、Android8(Oreo)で走るアプリを作ることができるようです。(むしろこの仕組みをあてにしてprocessingを開発環境に選んだ)
ですが、私の端末LuceはAndroid4.4(Kitkat)で、「できれば」これでも動作するような軽くて簡易なアプリにしたいと思っています。
Android5からカメラAPIが一新されたと聞いているので、それができるか現在は不明。
>PROCESSINGをAndroid端末で動かすには(4.0版)
>http://mslabo.sakura.ne.jp/WordPress/make/processing 逆引きリファレンス/processingをandroid端末で動かすには4-0版/
および、
>Android Studioで開発するには(AndroidMode編)
>http://mslabo.sakura.ne.jp/WordPress/make/processing 逆引きリファレンス/android-studioで開発するには(androidmode編)/
によれば、主要部分の開発はprocessingで行い、そのコードをAndroidアプリの開発環境であるAndroidStudioに持ってきてビルドするという方法で様々なバージョンのAndroidに対応したアプリにできる可能性があるようです。
多少なりともAndroidStudioを使うので、Javaの勉強は避けて通れないと思われます。
私のプログラミングの知識はPC-9801に付いてきたN88BASICで止まっていたので、歳も歳だしキビシイものがありますが、(上記のような)参考になるサイトや書籍など宙玉アプリ完成に至る(かどうかはまだ怪しい)チャレンジの足跡をここにひっそりと残してゆこうと思います。

くしくもこれが1001コメント目のようです(^^;
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

スクリーンショット_2019-01-23_16.44.34.png

Nexus5X(Android8.1)をエミュレートした様子のスクリーンショットです。

参考資料(Processingプログラムまではできているものとして):
(1)前コメントのサイト
(2)中川幸哉(著)「たった1日で基本が身につく! Androidアプリ開発超入門」技術評論社
(3)中山 清喬、 国本 大悟著「スッキリわかるJava入門 第2版」インプレス
(4)平澤章 (著)「オブジェクト指向でなぜつくるのか 第2版」日経BP


Processingがメインテーマの資料はまた別途まとめます。
(1)AndroidStudioをPCにインストールして、そこにProcessingのコードを流し込めるようにするまでに必要な作業が、PCのスクショを使って丁寧に解説してあります。
(2)Processingとは無関係の、AndroidStudioはもちろんプログラミングもビギナーのための、AndroidStudioのやさしい使い方という趣の本。
フルカラーでこれまたPCのスクショをふんだんに使っており、版も新しいので今が読み時(この手の本はすぐに古くなるので)だと思います。
(3)上2つの情報のみでもAndroid端末エミュレータ上でProcessingプログラムを動かすことはできるかもしれませんが、javaについてざっと知っておいたほうが出てくる用語や操作の意味がわかるので習得が早いし、ソフトのバージョンアップなどで細かな部分が変更になってもつまづきにくくなります。
(4)javaといえば当世のオブジェクト指向プログラミングの代名詞的言語ですが、この本ではどんな理由(メリット)があってオブジェクト指向という仕組みを利用してプログラミングするのかということが書かれています。

実は私は(4)→(3)→(2)の順に読みました。
MS-DOS&N88BASIC野郎である私には(4)はとても分かり易かったです。おかげで(3)は650ページの大部ですが3日で斜め読みで済ませました。
(1)を知ったのは去年の梅雨ごろですが、その時訳も分からず書かれてある通りにしていた作業の意味が、(4)→(3)→(2)に目を通したおかげでだいぶわかってきました。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

いい知らせと悪い知らせが一つずつあります。

まずはいい知らせ。
processingは画像処理に重きを置いた言語なので、Android端末のカメラのコントロールには外部ライブラリを利用しなければなりません。
その外部ライブラリをどうやってAndroidStudioで使えば良いのか分からなかったのですが、試行錯誤の末、コアライブラリと同様にlibsフォルダの中に登録しておけば良いことが判明しました(この例では controlP5.jar がそれに当たる)。
わかってみれば簡単なことですが、どこにも書いてないのでビギナーはたどり着くのに1日かかりました(^^;

そして悪い知らせは、
「インスタント・ラン」という、AndroidStudioでビルドしたアプリをそのままエミュレータ上で実行までしてくれる機能が、ロリポップ以降にしか提供されないとわかったことです。
なのでロリポップをターゲットにして開発し、キットカットはいきなり実機で試すことになります。まあ、Android端末のカメラはエミュレータではテストできないのでやりにくさは覚悟してたのとそう変わらないのですけれど。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

今日は敗北宣言です(^^;;

外部ライブラリなど使用しない、出来るだけシンプルなテストアプリを書き、ロリポップのエミュレータで動作することを確認したのち、実機(Luce:キットカット)にインストールしてみたのですが…インストールはできているのですがこの↑ようなエラーが出て動いてくれません(TT)

ググってみてこんな
>Android Studioで「Waiting For Debugger」が消えないときの対処法 実機デバッグ時
>http://j1-studio.com/machikou/android_studio_waiting_for_debugger/
記事があったので、処方箋:
(1)AndroidManifestの設定
(2)AndroidStudioの設定
(3)アプリの(PCのターミナルを使った完全な)アンインストール
(4)スマートフォンの再起動
全て試しましたが全滅(状況変わらず)でした。

色々やっていて感じたのは、最新のAndroidStudio3では、KitKat以前向けに作られたアプリは作りにくいようになっているということです。
特にPlayStoreにあげられるようなモノをビギナーが作るのは無理でしょう。
真面目にアップデートしてくれるアプリほど、KitKat以前をサポート外にするのもさもありなん。
野良アプリでも良いという場合は、AndroidStudioをバージョンダウンして(webに情報がたくさんあるので)勉強すればどうにかなるかもです(未確認)。

というわけで、ワタシが次に取るべき道は実機デバッグのためのLollipop端末を「安く」入手することかもしれません(笑)
あるいはLollipop以降はアプリ開発的には「地続き」のようだからいっそOreoやPie端末を買(Ry

神様、迷える子羊によき啓示を与え給え
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

スクリーンショット_2019-01-26_13.06.15.png

一晩寝て多少スッキリしたアタマで考えると、「Waiting for debugger」は消すことができました。
そうと知らずにデバッグのブレークポイントをソースコードに設定していたためで、AndroidStudioにしてみれば正常動作です。
お恥ずかしい(^^;

しかし実機のアプリ起動直後強制終了は変わらず。
多分、AndroidStudio3のbuild.gradle(↑)の赤矢印の数字(AndroidのAPIレベル)をKitKat向けに小さくして、(そうすると)青矢印のアンドロイドサポートライブラリのバージョン(が合わずにコンパイルエラーになってしまうので、それ)を適合したものに差し替えてやれば(Googleの規約を満たさないのでPlayStoreにアップすることはできませんが)、KitKatで動く自分専用の野良アプリが作れるのではないでしょうか。

web上で情報を漁っていますが今のところ私にも理解できるような記述は見つけられません。3年数ヶ月働いている私のLuceが、退役後も自作アプリで例えば赤道儀コントローラとして使えたり(タッチスクリーン・GPS・加速度センサ・磁気センサ・wifi・bluetoothそしてもちろん計算機能があるんだからかなり便利なものができそう)すると面白いのですが。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

スクリーンショット_2019-01-26_19.09.01.png

暇に明かして迷走しまくっていますが、こんな記事がありました。

>初めてのAndroidアプリ&Kotlinでハマった点の技術的原因と対応方法
>https://qiita.com/schenlybiz/items/24d97c10f62c55334f6a

Qiitaの会員ではないので内容は読めないのですが、この目次だけみれば、AndroidStudio3でPieをターゲットとしてビルドしても、KitKatの実機で動作するアプリができると取れます。

AndroidStudioの使い方をもっと勉強しないといけないようです(爆汗)
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

今日はちょっと進展しました(^^)

前にあげた、「Androidアプリ開発入門」本に載っていたサンプルのビンゴアプリの一部を使ってテストしてみたところ、初めて手持ちのLuce実機でエラーにならず動きました!

Lolipopエミュレータでは問題なし。
KitKatエミュレータではエラーにはなりませんが、数字入力の部分をタップしてもソフトキーボードが開きません(ソースコードは変えていません)。

ああ、これはKitKatにはソフトキーボードを開く命令を明示的に書かないといけないんだなと思いました。
もちろん具体的にどうすればいいのか今の自分にはわかりません。
そして駄目もとでLuceにもインストールしてみると、動いたばかりかソフトキーボードも開いたではないですか(感涙)。
テンキーボードでなくいつも使ってるGraffitiが開いたのがオモロイですが。

コンパイルの条件を設定するbuild.gradleファイルは前のコメントのと同じにしてやったので、うまくやれば今の環境で手持ちのKitKat実機で動くアプリができるんだとわかったのは前進といえるでしょう。

「うまく」と「まずく」の差がどこで生じてるのか全くわからない状況をどうにかしないと。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

昨日の進展を踏まえて、もう少し腰を据えてAndroidStudioの操作を勉強しようと、
斎藤新三(著)「Androidアプリ開発の教科書」翔泳社
を入手し、現在70/400ページほど読みました。

昨日のKitKatエミュレータの不具合(のように見えた私の理解不足(汗))も難なく解決。
やっぱ、遠回りのようでも詳しめの本を真面目に読まないといけませんな!

あと、本筋に戻りますが、宙玉アプリとして私がやりたいと思っているのは、
・起動すると(リアルに透明球があるのと同様に)宙玉エフェクトがかかったカメラ画像が表示されて、好きなタイミングでシャッターを切って画像保存する。
・オマケ機能として、端末内にある指定した画像ファイルに宙玉エフェクトをかけて保存する。
ということで、前者はカメラコントロールに外部ライブラリを利用するつもりでしたが、この本の最後の方にはもっと簡単なカメラ利用の方法が紹介してあるようです。

今日退院後初めて病院へゆき、両松葉杖から一本杖になりました👍
完全復活するとこんな悠長なことはやってられん(飯食うには働かなきゃね)ので、急ぎ読み込みたいと思います。
paysantさん
なにかプログラムを作って欲しい時はお願いできるようになるって事ですね(笑)。
あ、うそです。
勉強と回復が両立する事を願っております^^。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
自分でもそう願っております(笑)
古い端末が、たとえ停波して電話として使えなくなっても文鎮になってしまうのはもったいないと思う貧乏性なだけで。
でも自作しようというところまでモチベーションが上がるのは宙玉アプリかArduinoとの連携くらいですね。
回復の方が早ければ、途中で放り出してまた望遠鏡を触りだす気がします(^^;
>・起動すると(リアルに透明球があるのと同様に)宙玉エフェクトがかかったカメラ画像が表示されて、好きなタイミングでシャッターを切って画像保存する。

う~ん、凄い機能になりそうですね。
本格的な宙玉アプリ。

これはリアル宙玉の撮影を頑張らないと、宙玉アプリだけで、必要無くなるカモ。。。(≧▽≦)ヤバイカモ

松葉杖1本になったのですか。
良かったですね。
でも病院内と実生活では全然違いますから。どうぞ無理せず気をつけて下さい。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
あくまでも、希望・目標ですので…

本当にできたとしても、最新機種ならいざ知らず古いスマホだと計算が遅くてカクカクした表示になると思われます。
なので、宙玉の代わりに円を表示して、構図を決めてからシャッターを切ったあと宙玉描画という感じが落とし所かな? とか思ってます(^^;

Pov-rayみたいなシュミレーションでなく、それっぽく見えるような絵を作るだけなので、リアル宙玉の良さはそんな簡単には超えられないです(笑)


病院はバリアフリーですけど、自宅はバリアだらけですしね(^^;
歩きながら片手が使えるアドバンテージはありがたいです。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
ProcessingとAndroidStudioの連携について、ここ数日の勉強と試行錯誤でわかったことをいったんまとめます。
まず結論を言えば、KitKat端末向けに自作アプリを書くことは可能ですが、それはJavaのみを使う前提で、Processingも使おうとすればLolipop端末以降である必要がある、ということです。
今のところ、宙玉のようなグラフィックのメソッドを使いまくるアプリをProcessingの助けなしに作るスキルは私には無いので、残念ですが宙玉アプリ開発の対象からは(当面)KitKatをはずします。
先週、新しい実機を手に入れないとダメかも…と書きましたがその通りになってしまいました(^^;

さて、以下しばらく上記の結論に至った理由を簡単にメモしておきます。
まずAndroidOSの上でProcessingのsketch(プログラム)を走らせるために、Androidのフラグメントという仕組みを利用することが必須です。
フラグメントというのはAndroidアプリのメイン画面=メインプログラムから呼び出すことができるサブ画面=サブプログラムのようなもので、このサブプログラムにProcessingのsketchを渡すことでAndroidでProcessingを使うことができます。
フラグメントにsketchを渡す処理は、
sketch = new Sketch();
PFragment fragment = new PFragment(sketch);
fragment.setView(frame,this);
というユーザから見れば簡単なものなのですが、どうもこのPFragmentクラス(AndroidのFragmentクラスを継承して作られたProcessingの関数)の動作がKitkatとLolipop(以降)で違っているようなのです。
AndroidStudioのコンパイルは通りますが、Kitkatの場合、アプリインストール・起動直後に強制終了になってしまいます。(Lolipopは何事もなく動作します)
この3行目をコメントアウトすると強制終了しません。

(次のコメントに続きます)
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
素人考えですが、PFragmentクラスにバグがあり、Lolipop以降のAndroidはそれを賢く処理してくれているのじゃないかなと想像します(GitHubに公開してあるPFragmentクラスのコードを見て、?と思う部分があります)。

どうにか、Processingの怪しいPFragmentでなくAndroidのFragmentを使ってこの部分を書き換えられないかと、
sketch = new Sketch();
Fragment fragment = new Fragment(sketch);
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container, fragment);
transaction.commit();
頑張ってみましたが、このコードではFragment()でnewされるfragmentがPFragment()のそれと違うので、KitkatもLolipopもコンパイルが通り強制終了もしませんが肝心のsketchが動作しません。

サポートライブラリとかlayoutのxmlとかAndroidManifest.xmlとかbuild.gradleとか素人なりに調べたのですが、結局ここのところがキモかと思います。

はじめに「当面」と書いたのは、もしかしたらいづれPFragmentがバグフィクスされるかもしれないこと、またはPFragmentを避けつつsketchをフラグメントへ渡す処理をコーディングできるスキルが身に付く(ナイナイ(^^;)ことを念頭に置いています。


ああ…疲れた。
自分の良く分からない事を勉強する事ってありますよね。
そんな時リアルで教えてくれる人が居ないと、詰まった部分を通り越すのにとても時間が掛かります。
paysantさんの試行錯誤は同じようなトライアンドエラーで進んでいる姿が眼に浮かびます。
書き込み見ているのは楽しいです。

ですが・・・

書いてある内容はさっぱり理解できません(笑)
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
>かくいちさん
よくご訪問くださってありがとうございます(^^)

新知識の洪水に溺れているので(笑)…
それに、万一本気で似たようなことに取り組もうとされる方がいらっしゃってもSNSでは無い、わかりやすく優れた指南サイトがたくさんありますしね。
私のは備忘録的ブログみたいなものです。

PCやスマホのアプリ自作について、私が現在最もよく利用させていただいていておすすめのサイトはこれ↓です。

MSLABO様の、
>自己啓発。人生について考える
>http://mslabo.sakura.ne.jp/WordPress/
の中のサブトピック:
PROCESSING 逆引きリファレンス

「逆引き」の名前の通り、プログラミングでよくある処理ごとにProcessingではどうやるのかが解説してあります。
そして(AndroidMode編)としてスマホでProcessingを使ういろんなサンプルが公開されています。(AndroidStudioを開発環境としつつもProcessingを使ってスマホアプリを作るやり方を日本語で解説してあるのはここだけだと思います。)

サイトの本筋では、コンピュータって何?という初心者を対象に、ゲーム作りを題材としてプログラミングを学ぶことができる記事が書かれてあり、学習用言語としてProcessingが選ばれています。(今時の高校や大学でもはじめにProcessingを教材に使うところが多いみたいです。私が学生の頃は理系ならFORTRAN、文系ならCOBOLでした。当時パソコン持って無いけど(先日う、さんが画像を載せてくださったようなポケコンの)BASICで遊んでいた自分としては履修を楽しみにしていた「情報処理」の授業は、各自のPCがメインフレームの端末になっていて、各端末(学生)のプログラムをメインフレームが順に処理してくれるんですがその処理が遅く、なかなか自分の番に回ってこなくて待ちくたびれた記憶だけがあります(^^;)

ProcessingもAndroidStudioも上のような解説サイトの閲覧もタダなので新しいiPhone買うお金があるならPCのアップグレードと安いAndroid端末に目がいってしまいます(笑)
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

KitKatのことは残念ですが、一ついいこともありました。

そもそもKitKatにこだわっていたのは私の実機がKitKatで、実機でないとカメラの動作テストができないと思っていたからですが、実はエミュレータも進歩してカメラ動作テストもできるみたいです。
「Androidアプリ開発の教科書」にやり方が書いてありました。
(同時に解説されていた「暗黙的インテントを使ったカメラ利用」は、私がイメージしている宙玉アプリのカメラの使い方とは違っていたので今回は使いません)

早速、Processing用のスマホカメラ(その他wifi, bluetooth,GPS,多くのセンサ類)制御のためのライブラリであるKetaiライブラリを使ってAndroidStudio上でProcessingコードを書いて、Lolipopエミュレータで走らせてみました。

ワンルームマンションの一室らしきバーチャル空間を「撮影」できるようです。

mineoさんの、端末の機種変&追加購入キャンペーンチラシを横目で眺めつつ、もうしばらくエミュレータで開発頑張ってみようと思います。
でもここから先は参考にできるモノが圧倒的に英語表記になると思われ…(^^;;;
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

このスレの文脈からアプリ開発に使える安い端末を私が物色し出したことは既知
として(^^;

信用していない電子機器の防水ですが、気休めに防水機能は欲しいです。
Luceで満足しているくらいだから低スペックでも平気。
「大大盤振る舞いCP」適用が今月末で終了なので、au・デュアル・microSIM→未定・シングル・nanoSIMと変更するつもり。そのSIMを生かす端末という意味もあります。

と、思って富士通を検討しましたが、まあ撥水程度でよければ、そしてもう数千円頑張れば、モトローラの型落ちもいいですね。
余計なプリインストールアプリもなくてプレーンなAndroidに近いという評判ですし…
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

Screenshot_1549452292.png

Mac上のAndroid(Lollipop)エミュレータで動かした、宙玉アプリのスクリーンショットです。

「カクカク」どころかカメラから1フレーム読み込んで描画するまで90秒ほどもかかる激遅です(笑)

歪みの計算はやむを得ないとしても、ボカしの処理(ただのガウスフィルタなのですが)に結構時間がかかるみたいです。
ちなみにこの画像のサイズは1280*768pixelsで、640*480pixelsで試したら30秒くらいでしたから、処理時間は画像のピクセル数にほぼ比例すると思っていいでしょう。

実機でやればおそらくもう少し早くなると思いますが、これでは使えません。
ブルー君、ごめんなさい、「リアルタイムで歪む」のはスマホのプロセッサがもっと速くなる時代が来るまで無理でした(笑)
やはり「玉の代わりの円を表示して、撮影後に宙玉化する」案で行こうかと思います。

あと、このままではわざわざ自作した甲斐がないので、歪みアルゴリズムのパラメータを可変にして、普通の透明球ではあり得ない歪み方をさせる方向も探ってみたいと思っています。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
いろんなところが拙くて、まだまだ完成にはほど遠い自作宙玉アプリですが、「スマホカメラから画像を取り込んで宙玉を画面に表示する」という主要部分はできたので、そのコードと簡単な解説をメモっておきます。

AndroidStudio上でProcessingのコードを書いて、エミュレータまたは実機で走らせる方法は、前出のMSLABO様のページ:
>自己啓発。人生について考える
>http://mslabo.sakura.ne.jp/WordPress/
をご覧ください。

以下は、Processingのコード部分で、MSLABO様の手順に従えば、Sketch.java ファイルの中の記述:
public class Sketch extends PApplet { }
の{ }の中に書く内容です。

まずグローバル変数の定義と画面設定:



KetaiCamera capImg; //カメラのキャプチャイメージ
boolean isAvailable = true;

PImage srcImg; //原画
PImage clipImg; //処理範囲のクリップ画
PImage backImg; //背景画
PGraphics distImg; //レンズ歪みをかけた画
PShape distSphere; //distImgを貼り付ける球
//PGraphics maskImg; //仕上げスムージングのためのマスク


int lensWidth;
int lensHeight;

int lensCenterX;
int lensCenterY;

float[] posX;
float[] posY;
float[] posU;
float[] posV;

int[] vertexes;

int num=24; //distImg分割数
int rad; //sphere半径

public void settings(){
fullScreen(P3D);
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
初期設定(アプリ起動後1度だけ実行されます):


public void setup(){
orientation(LANDSCAPE);
imageMode(CENTER);

capImg = new KetaiCamera(this, 1280, 720, 24);
capImg.start();

//srcImg=loadImage("DSC_0612.JPG"); //test code

srcImg=createGraphics(capImg.width,capImg.height,P2D);
backImg=createGraphics(capImg.width,capImg.height,P2D);

lensWidth=min(capImg.width,capImg.height);
lensHeight=lensWidth;
lensCenterX=lensWidth/2;
lensCenterY=lensHeight/2;

clipImg=createGraphics(lensWidth,lensHeight,P2D);
distImg=createGraphics(lensWidth*2,lensHeight,P3D);

rad=(int)( lensWidth/4 );
distSphere=createShape(SPHERE,rad);

//maskImg=createGraphics(width,height,P2D);
//maskImg.beginDraw();
//maskImg.fill(0);
//maskImg.ellipse(width/2F,height/2F,rad*2*0.8F,rad*2*0.8F);
//maskImg.endDraw();

generateMesh();

}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
上で呼んだgenerateMesh()関数の本体の前半。
これが歪みを作るアルゴリズムで、後述します:



public void generateMesh(){
posX=new float[(num+1)*(num+1)];
posY=new float[(num+1)*(num+1)];
posU=new float[(num+1)*(num+1)];
posV=new float[(num+1)*(num+1)];
vertexes=new int[num*num*4];

for(int i=0; i<posX.length; i++){
posX[i]=((float)(i % (num+1))/(float)num);
posU[i]=posX[i];
}

for(int i=0; i<posY.length; i++){
posY[i]=((float)(int)(i/(num+1))/(float)num);
posV[i]=posY[i];
}

for(int i=0,j=0; i<num*num*4; i+=4,j++){
vertexes[i]=j+(int)(j/num);
vertexes[i+1]=j+(int)(j/num)+1;
vertexes[i+2]=j+(int)(j/num)+2+num;
vertexes[i+3]=j+(int)(j/num)+1+num;
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
generateMesh()関数の後半:



float k1=-0.5F;
float k2=0.5F;
float p1=0;
float p2=0;

for(int i=0; i<posX.length; i++){
posX[i]=(posX[i]-0.5F)*2;
posY[i]=(posY[i]-0.5F)*2;
posU[i]*=lensWidth;
posV[i]*=lensHeight;
float xx=pow(posX[i],2);
float yy=pow(posY[i],2);
float b=k2*pow(xx+yy,2)+k1*(xx+yy)+1;
float distX=p2*(3*xx+yy)+posX[i]*b+2*p1*posX[i]*posY[i];
float distY=p1*(3*yy+xx)+posY[i]*b+2*p2*posX[i]*posY[i];
posX[i]=lensCenterX+distX*lensWidth/2;
posY[i]=lensCenterY+distY*lensHeight/2;
}
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
generateMesh()で作った格子を入力画像clipImgに適用して、歪んだ画像distImgに変換します。
メインループ public void draw(){ }の中で呼ばれます:


public void drawDistortion(){
distImg.beginDraw();
distImg.noStroke();
distImg.beginShape(QUADS);
for(int i=0; i<vertexes.length; i++){
if(i % 4 == 0){
distImg.texture(clipImg);
}
int j=vertexes[i];
distImg.vertex(posX[j],posY[j],posU[j],posV[j]);
}
distImg.endShape();
distImg.endDraw();
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
スマホのカメラがONになっている間の割り込み処理。
ここで、カメラが受けた映像がcapImgという一枚の画像になります:



public void onCameraPreviewEvent(){
//1フレーム読み込み
capImg.read();

isAvailable = true;
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
public void draw(){
if(capImg.isStarted()){
if(isAvailable){
srcImg.set(0,0, capImg);

backImg.set(0,0, srcImg);
backImg.filter(BLUR,4); //ぼかし1


clipImg=srcImg.get((width-lensWidth)/2,(height-lensHeight)/2,lensWidth,lensHeight);

image(backImg,width/2,height/2, width, height); //背景描画

drawDistortion();
distSphere.setTexture(distImg); //歪み画像を球に貼り付け
distSphere.setStrokeWeight(0);
pushMatrix();
translate(width/2,height/2);
rotateY(PI);
rotateZ(PI);
sphereDetail(24);
shape(distSphere);
popMatrix();


//mask(maskImg);
filter(BLUR,1); //ぼかし2

isAvailable = false;
}
}
else {
capImg.start();
}
}
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター
すみません、文字数制限のためにはじめのコメントが書けませんでしたが、前のコメントがメインループで、以上7つをつないだものがProcessingコード部分です。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定.jpg

インデントもなく、色も付いてないコードだけではあんまりなので、大まかな処理の流れを図にしておきます。

カメラから1フレーム読み込んだ画像がcapImg(赤)、これをsrcImg(緑)にコピーします。
無駄なようですが、後々スマホ内のアルバムからコピーした場合も共通処理にするための伏線です。
srcImgから2つに分岐します。
一つはガウスフィルタをかけてぼかしたbackImg(黄)、もう一つは一部分を正方形に切り取ったclipImg(緑小)です。
今は切り取り範囲は固定ですが、可変にしてもいいと思います。
clipImgに歪み処理を加えてdistImg(斜めピンク)を作ります。
distImgを3Dの球にテクスチャマッピングしてdistSphere(青玉)を作ります。
最後に、backImgとdistSphereを合成し、仕上げにもう一度ぼかしをかけて宙玉画像(水色)とします。

PC上で試作していた段階では、球の中央部をぼかし処理から逃がすためのマスキング処理と、球のフチに白くハイライトを入れる処理も考えていましたが、軽くするためにやめました(マスキングはコメントアウトしてコードだけ残しています)。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

スクリーンショット_2019-02-07_13.03.45.png

webを調べる手間と時間は厭わないので少しでも安く遊ぼうというのでなければ、この本がおすすめです(MSLABO様のページと併読するといいです)。
Processingの一側面であるオブジェクト指向プログラミングはこの本では学べませんが、宙玉アプリを書く分にはオブジェクト指向のメリットはほとんどありません(PCからAndroidへの移植など間接的には大いに恩恵を受けているのですが)。
昔、BASICのLINEやCIRCLEなんていう命令を使ってパソコンでお絵描き遊びした経験がある方は、同じ要領で画像や3DCG、映像、アニメーションなどを扱えるようになります。

上記の宙玉アプリコードでは、画像にフィルタをかけるなどの加工方法、ketaiライブラリを使ってカメラから画像取り込みする手順をこの本から学ばせていただきました。

留意事項として、この本ではPGraphics、PShapeについて述べられていません。
宙玉アプリでは、2D,3Dのオブジェクトの中間結果をスクリーンに表示せずに保持しておくステップがあるのですが、そのときにPGraphics、PShapeが必要です。
それらについてはweb上を検索して勉強しないといけません。まあ、非常に簡単ですけど(^^)
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定1.jpg

さて歪みアルゴリズムのgenerateMesh()ですが、入院中webを徘徊して偶然とあるサイトに樽型歪みを作るコードが公開されているのを見つけてしまいました。
それをそっくり頂戴しています。
前半の部分は私のアタマでは到底思いつかない綺麗なコーディングです。
後半はBrownの式そのものですが、円周方向の歪みパラメータをゼロに設定してあるのでここに適当な値を入れると変な歪み具合になるはずです。
ぺゐ
初心者マークぺゐさん・投稿者
Gマスター

名称未設定2.jpg

書き忘れたことが2点ありました。

まず一つは、AndroidStudioのAndroidManifest.xmlファイルについて。
これはアプリがAndroidOSに対して渡す自己紹介文みたいなものですが、その記述に次の2項目を加えておく必要があります。

<activity android:screenOrientation="landscape”>
スクリーンを横に向けて使いますという表明。
カメラからの入力画像が横長なのでそれに合わせます。(添付図上)
<uses-permission android:name="android.permission.CAMERA”/>
アプリがカメラにアクセスすることを表明。


もう一つは、Processingのコードで、distImgがclipImgの倍の横幅の画像領域を確保していること(間違いではありません)。
clipImg=createGraphics(lensWidth,lensHeight,P2D);
distImg=createGraphics(lensWidth*2,lensHeight,P3D);


添付図下に描いたように、distImgをdistSphereにテクスチャマッピングするのはタテ:ヨコ=1:2の画像を円筒形に丸めて貼り付けるイメージなので、余白を作ってそれが球の裏側にゆくようにします。
こうしておかないとdistImgが横に引き伸ばされて映った妙な宙玉ができてしまいます。実はこれになかなか気付かず、なんか変だなと思いつつ何日も過ごしました(^^;
ペイさん
長くなったので、こっちにお返事、で、いいですか?
↑記事の邪魔になったら削除します。

板の作り直しの方法、すっかり念頭から消えていました。
ありがとうございます^^
穴あけ加工が無いと凄く楽ですからね♪
かくいちさん、ホント凄いです。

しかーし、ブルー君。。。宙玉の扱い方が多分雑みたいで、この先作り直す事が何回も有りそうで。。。それ面倒💦
本人は大切に使っているつもりなんですがね。
しかし傷はウソつかない。。。😅

昨年、レンズフィルターに玉付きのが作ってあるんですね(デジイチ用)
これをスマホ用に作り直そうかと考え中。

そうすれば玉さえ傷が付かなければ、耐久性がありますので、アクリル板より随分長持ちしそうと。

径が変わってくるので、本体ごと一からまた作り直し。。。そこが問題で(≧▽≦)

当分じっくり考えてみます。

また悩みそうならアイデア含め、相談にのって下さい。よろしくお願いします。

その時はここのスレでいいですか?
なんか、アプリ開発の記事の邪魔になりそうで。。。どこに書き込もうかと
スミマセン
コメントするには、ログインまたはメンバー登録(無料)が必要です。