﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Doc%3AJA%2F2.6%2FManual%2FGame_Engine%2FPython_API%2FVideoTexture</id>
	<title>Doc:JA/2.6/Manual/Game Engine/Python API/VideoTexture - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Doc%3AJA%2F2.6%2FManual%2FGame_Engine%2FPython_API%2FVideoTexture"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Game_Engine/Python_API/VideoTexture&amp;action=history"/>
	<updated>2026-05-14T20:03:40Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Game_Engine/Python_API/VideoTexture&amp;diff=134903&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Game_Engine/Python_API/VideoTexture&amp;diff=134903&amp;oldid=prev"/>
		<updated>2018-06-28T20:47:25Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 20:47時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Game_Engine/Python_API/VideoTexture&amp;diff=134902&amp;oldid=prev</id>
		<title>wiki&gt;Sato: Created page with &quot;{{Page/Header|2.5|Doc:JA/2.5/Manual/Game Engine/Python API/Bullet physics|Doc:JA/2.5/Manual/Game Engine/Features}}  =The VideoTexture module= &lt;code&gt;VideoTexture&lt;/code&gt;モジュ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Game_Engine/Python_API/VideoTexture&amp;diff=134902&amp;oldid=prev"/>
		<updated>2012-02-12T12:54:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Page/Header|2.5|Doc:JA/2.5/Manual/Game Engine/Python API/Bullet physics|Doc:JA/2.5/Manual/Game Engine/Features}}  =The VideoTexture module= &amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;モジュ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Page/Header|2.5|Doc:JA/2.5/Manual/Game Engine/Python API/Bullet physics|Doc:JA/2.5/Manual/Game Engine/Features}}&lt;br /&gt;
&lt;br /&gt;
=The VideoTexture module=&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;モジュールを使うと、ゲームの実行中にテクスチャを操作できます。テクスチャに使えるソースはいくつかあります、ビデオファイル、イメージファイル、ビデオキャプチャ、メモリバッファ、カメラレンダー、またはこれらの混合です。ビデオファイルとイメージファイルは、ファイル名の代わりにURLを指定することでインターネットからロードできます。さらに、それらのイメージをGPUに送る前にフィルタを適用し、blue screen、color band、gray、normal mapなどの映像効果をかけることもできます。&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;はイメージやビデオをロードするのにFFmpegを使用しており、FFmpegがサポートしているフォーマットは&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;でもすべてサポートされています。以下はサポートしているフォーマットの一部です。&lt;br /&gt;
&lt;br /&gt;
*AVI&lt;br /&gt;
*Ogg&lt;br /&gt;
*Xvid&lt;br /&gt;
*Theora&lt;br /&gt;
*dv1394 camera&lt;br /&gt;
*video4linux capture card (this includes many webcams)&lt;br /&gt;
*videoForWindows capture card (this includes many webcams)&lt;br /&gt;
*JPG&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
==動作の仕組み==&lt;br /&gt;
原理は簡単です。まず、すでに存在しているテクスチャをオブジェクトと名前によって指定し、次に動的コンテントを持ったテクスチャを作成して、二つのテクスチャをGPU内で入れ替えます。ゲームエンジンはテクスチャが交換されたことには気づかず、通常通りにオブジェクトを表示します。それでいて、あなたがテクスチャをコントロールできるようになっているわけです。使用を終えると、新しいテクスチャは削除され、古いテクスチャが復帰します。&lt;br /&gt;
&lt;br /&gt;
このページでは簡単な例を使って&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;モジュールを解説します。&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
==ゲームの準備==&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;モジュールを使う前に、適切なテクスチャをもったオブジェクトがなくてはいけません。&lt;br /&gt;
&lt;br /&gt;
たとえば、ゲームの中に、本物の番組を流しているテレビを配置したいとします。テレビのオブジェクトを作成し、画面の部分には別個のテクスチャをUVマッピングで適用します。たとえば“&amp;lt;code&amp;gt;tv.png&amp;lt;/code&amp;gt;”というテクスチャだとしましょう。このテクスチャの内容はここでは重要ではありませんが、おそらく電源が切れている画面のような、暗いグレーにすると良いでしょう。テレビの電源を入れなければならないとき、ビデオキャプチャカードからの映像を使った動的テクスチャが作成されるようにします。それを&amp;lt;code&amp;gt;tv.png&amp;lt;/code&amp;gt;と入れ替えれば、テレビは本物同様になります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;が入れ替えられるテクスチャの作り方は二通りあります。&lt;br /&gt;
#単純なUVテクスチャ。&lt;br /&gt;
#テクスチャチャンネルを持ったBlenderマテリアル。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;はテクスチャのレベルで動作するので、ゲームエンジンがもっている凝ったテクスチャ機能も使えます。GLSL、multi-texture、custom shadersなど。&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
==例==&lt;br /&gt;
たとえば、ゲーム内のあるオブジェクトが、一つまたはそれ以上の面に対してマテリアル／イメージを適用されており、そこにビデオを表示したいとします。&lt;br /&gt;
&lt;br /&gt;
最初のステップは&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクトの作成です。これは一度だけ実行されるスクリプトで行うことにしましょう。ゲームがスタートした時点では、ビデオはテクスチャを更新しない限り表示されないかもしれません。これについてはあとで触れます。通常、スクリプトはビデオを表示させるオブジェクトに付加します。そうするとオブジェクトの参照を簡単に取得できます。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 import VideoTexture&lt;br /&gt;
 &lt;br /&gt;
 contr = GameLogic.getCurrentController()&lt;br /&gt;
 obj = contr.owner&lt;br /&gt;
 &lt;br /&gt;
 if not hasattr(GameLogic, 'video'):&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“&amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;”属性をチェックするのは、テクスチャの作成を一度だけにするためです。&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===マテリアルの取得===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     matID = VideoTexture.materialID(obj, 'IMvideo.png')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture.materialID()&amp;lt;/code&amp;gt;は便利な関数で、これにより&amp;lt;code&amp;gt;video.png&amp;lt;/code&amp;gt;をテクスチャとして使っているマテリアルを取得します。この方法はBlenderマテリアルでもUVテクスチャでも使えます。UVテクスチャの場合は、そのテクスチャが適用されている面に付随する内部的なマテリアルを呼び出します。Blenderマテリアルの場合は、そのテクスチャを第一テクスチャとして使っているマテリアルを呼び出します。&lt;br /&gt;
&lt;br /&gt;
“&amp;lt;code&amp;gt;IM&amp;lt;/code&amp;gt;”の接頭辞は、探しているのがテクスチャであると示すためのものです。マテリアルの場合は“&amp;lt;code&amp;gt;MA&amp;lt;/code&amp;gt;”を先頭につけます。たとえば、このオブジェクト上で&amp;lt;code&amp;gt;VideoMat&amp;lt;/code&amp;gt;という名前のマテリアルを探す場合、コードは以下のようになります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     matID = VideoTexture.materialID(obj, 'MAVideoMat')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===テクスチャの作成===&lt;br /&gt;
&amp;lt;code&amp;gt;VideoTexture.Texture&amp;lt;/code&amp;gt;クラスは、動的テクスチャをGPUにロードする&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクトを作成します。コンストラクタは必須の引数1つと、オプションの引数3つをとります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;gameObj&amp;lt;/code&amp;gt;&lt;br /&gt;
:ゲームオブジェクト。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;materialID&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;VideoTexture.materialID()&amp;lt;/code&amp;gt;で返されるのと同じマテリアルインデックス。0にすると最初のマテリアルになります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;textureID&amp;lt;/code&amp;gt;&lt;br /&gt;
:複数のテクスチャが存在すす場合のテクスチャインデックス。0にすると最初のチャンネルになります。&lt;br /&gt;
:UVテクスチャの場合はこの値は常に0にします。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;textureObj&amp;lt;/code&amp;gt; &lt;br /&gt;
:再使用したいテクスチャを持つ&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクト。&lt;br /&gt;
:この引数を使う場合、そのテクスチャ上にはいかなるソースも作成するべきではありません。また、テクスチャを更新する必要もありません。得られるテクスチャはマテリアルにもテクスチャにも使用できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.video = VideoTexture.Texture(obj, matID)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===テクスチャを永続的にする===&lt;br /&gt;
以前にオブジェクトに対して&amp;lt;code&amp;gt;GameLogic&amp;lt;/code&amp;gt; “&amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;”属性を割り当てましたが、その理由は、&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;はゲームの実行中に永続的でなければならないからです。ローカル変数はスクリプトの終わりで消去され、同時にGPUテクスチャも消去されます。&amp;lt;code&amp;gt;GameLogic&amp;lt;/code&amp;gt;モジュールオブジェクトは永続的にしたいオブジェクトを保存するのに便利なのです。&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===ソースを作成する===&lt;br /&gt;
&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクトを得ることができましたが、テクスチャのソースがないので、これだけでは何もできません。&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;で使用可能な種類の中から、ソースオブジェクトを作成する必要があります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;VideoFFmpeg&amp;lt;/code&amp;gt;&lt;br /&gt;
:動画。&lt;br /&gt;
:ビデオファイル、ビデオキャプチャ、ビデオストリーミング&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;ImageFFmpeg&amp;lt;/code&amp;gt;&lt;br /&gt;
:静止画&lt;br /&gt;
:イメージファイル、ウェブ上のイメージ&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;ImageBuff&amp;lt;/code&amp;gt;&lt;br /&gt;
:メモリ上のイメージ&lt;br /&gt;
:CGI、グラフィックアプリケーション&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;ImageViewport&amp;lt;/code&amp;gt;&lt;br /&gt;
:ビューポートの全体または一部（つまりアクティブカメラによるレンダリングイメージ）&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;ImageRender&amp;lt;/code&amp;gt;&lt;br /&gt;
:アクティブでないカメラによるレンダリングイメージ&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;ImageMix&amp;lt;/code&amp;gt;&lt;br /&gt;
:上記のうちの二つ、またはそれ以上の混合&lt;br /&gt;
&lt;br /&gt;
この例ではソースとしてシンプルなビデオファイルを使います。&amp;lt;code&amp;gt;VideoFFmpeg&amp;lt;/code&amp;gt;コンストラクタはファイル名を引数に取ります。ファイルの場所についての混乱を避けるため、&amp;lt;code&amp;gt;GameLogic.expandPath()&amp;lt;/code&amp;gt;を使ってファイルのフルパスを取得します。ここでビデオファイルは.blendファイルと同じディレクトリにあるとします。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     movie = GameLogic.expandPath('//trailer_400p.ogg')&lt;br /&gt;
     GameLogic.video.source = VideoTexture.VideoFFmpeg(movie)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ビデオソースオブジェクトを作ったら、それを&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクトの&amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;属性に割り当てることで、ソースのセットアップと永続化を行います。ソースオブジェクトそのものも永続的になります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;のソースはいつでも変更できます。たとえばゲームの進行中に二つの映像を切り替えたい場合、以下のようにします。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.mySources[0] = VideoTexture.VideoFFmpeg('movie1.avi')&lt;br /&gt;
     GameLogic.mySources[1] = VideoTexture.VideoFFmpeg('movie2.avi')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
そして実行中に再割り当てします。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.video.source = GameLogic.mySources[movieSel]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===ソースのセットアップ===&lt;br /&gt;
&amp;lt;code&amp;gt;VideoFFmpeg&amp;lt;/code&amp;gt;ソースはムービーの再生をコントロールする属性がいくつかあります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt;&lt;br /&gt;
:[start,stop] (''floats'').&lt;br /&gt;
:ビデオの再生範囲。始めからの秒数で指定します。デフォルトではビデオ全体です。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;repeat&amp;lt;/code&amp;gt;&lt;br /&gt;
:(''integer'').&lt;br /&gt;
:リピート回数。-1で無制限にリピートします。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;framerate&amp;lt;/code&amp;gt;&lt;br /&gt;
:(''float'').&lt;br /&gt;
:相対的なフレームレート。1.0より小さくすると遅くなり、大きくすると速くなります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;scale&amp;lt;/code&amp;gt;&lt;br /&gt;
:(''bool'').&lt;br /&gt;
:Trueにすると高速なニアレストネイバーアルゴリズムで拡大します。&lt;br /&gt;
:テクスチャに使うビデオの幅と高さは2の乗数でなければいけません。そうでない場合、指定した方法でスケーリングされます。デフォルトでは正確ですが遅い&amp;lt;code&amp;gt;gluScaleImage()&amp;lt;/code&amp;gt;関数を使います。一番良いのは最初からビデオを適切な大きさにしておくことです。そうすれば実行時にはスケーリングの必要がなくなります。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;flip&amp;lt;/code&amp;gt;&lt;br /&gt;
:(''bool'').&lt;br /&gt;
:Trueにするとイメージは上下に反転されます。&lt;br /&gt;
:FFmpegからのイメージは常に上限判定している状態なので、この属性はデフォルトでTrueになっています。&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt;&lt;br /&gt;
:ビデオをGPUに送る前にフィルタを適用します。&lt;br /&gt;
:&amp;lt;code&amp;gt;VideoTexture&amp;lt;/code&amp;gt;フィルタオブジェクトのうちのひとつを指定します。デフォルトではイメージは何も変更されずにGPUに送られます。ビデオにアルファチャンネルが存在している場合は、それは自動的にロードされてGPUに送られます。 &lt;br /&gt;
&lt;br /&gt;
ここでは&amp;lt;code&amp;gt;scale&amp;lt;/code&amp;gt;属性をTrueにしましょう。なぜなら&amp;lt;code&amp;gt;gluScaleImage()&amp;lt;/code&amp;gt;は本当に遅くて、リアルタイムビデオには向いていないからです。ビデオの縦横がもともと2の乗数になっている場合は、この設定は何の影響もありません。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.video.source.scale = True&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===Play the video===&lt;br /&gt;
これでビデオを再生する準備ができました。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.video.source.play()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ビデオの再生はバックグラウンドプロセスではありません。テクスチャを更新して初めて再生されます。よって、毎フレーム実行されるスクリプトで&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;オブジェクトのcode&amp;gt;refresh()&amp;lt;/code&amp;gt;メソッドを呼び出す必要があります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 if hasattr(GameLogic, 'video'):&lt;br /&gt;
     GameLogic.video.refresh(True)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ビデオソースが停止している場合は、&amp;lt;code&amp;gt;refresh()&amp;lt;/code&amp;gt;は何の効果もありません。&amp;lt;code&amp;gt;refresh()&amp;lt;/code&amp;gt;の引数は、テクスチャを再計算する必要があるかどうかを指定するフラグです。ビデオ再生の場合は、あきらかにTrueでしょう。&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===ビデオのステータスをチェックする===&lt;br /&gt;
&lt;br /&gt;
ビデオソースクラス（VideoFFMpegなど）は&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;という属性を持っています。ビデオが再生中の場合、この値は2です。停止している場合は3です。よっで今回の例では、&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 if GameLogic.video.source.status == 3:&lt;br /&gt;
     #ビデオは止まっている&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===高度なワークフロー===&lt;br /&gt;
&amp;lt;code&amp;gt;Texture.refresh()&amp;lt;/code&amp;gt;メソッドでTrueを指定すると、一度GPUに送られたイメージは次のフレームでは無効化され、ソースから新しくロードされます。このやり方では、Pythonでイメージが使用できなくなるという副作用があります。よってソースの&amp;lt;code&amp;gt;refresh()&amp;lt;/code&amp;gt;メソッドを手動で呼び出すという方法もあります。&lt;br /&gt;
&lt;br /&gt;
高度なワークフローの例は以下のようになります。&lt;br /&gt;
*Pythonでイメージバッファを使う （テクスチャには影響しない）:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     GameLogic.video.refresh(False)&lt;br /&gt;
     image = GameLogic.video.source.image&lt;br /&gt;
     # imageはRGBAピクセルのバイナリ列&lt;br /&gt;
     # ... imageを使う&lt;br /&gt;
     # 次のフレームのため無効にする&lt;br /&gt;
     GameLogic.video.source.refresh()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pythonで使うため、GPUにはダウンロードせずにイメージをソースからロードする:&lt;br /&gt;
     # テクスチャのほうのrefreshを呼んでいないことに注意&lt;br /&gt;
     # テクスチャオブジェクトを使わずにソースオブジェクトだけを作成することもできます&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
     image = GameLogic.video.source.image&lt;br /&gt;
     # ... imageを使う&lt;br /&gt;
     GameLogic.video.source.refresh()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*もしメッシュに適用されているマテリアルが二つ以上あり、特定のマテリアルのテクスチャを修正したい場合、マテリアルのIDを取得します。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
matID=VideoTexture.materialID(gameobj,&amp;quot;MAmat.001&amp;quot;) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
GLSLマテリアルは2チャンネル以上のテクスチャを持つことができます。テクスチャはテクスチャスロットの順番に応じて特定されます。ここでは2としましょう。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
tex=VideoTexture.Texture(gameobj, matID, 2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
===デモのダウンロード===&lt;br /&gt;
[http://home.scarlet.be/~tsi46445/blender/VideoTextureDemo.zip デモファイル]をダウンロードできます。&lt;br /&gt;
{{clr}}&lt;br /&gt;
[[Category:Script]]&lt;br /&gt;
&lt;br /&gt;
==高度なデモ==&lt;br /&gt;
[http://www.graphicall.org/ftp/ben2610/VideoTextureDemo2video.blend このデモ]は、同じテクスチャ上で二つのビデオを交互に使うデモンストレーションです。このデモを使うにはelephant dreamの予告編（teaser）のビデオファイルが必要です。他のファイルで置き換えることもできます。&lt;br /&gt;
&lt;br /&gt;
[http://www.graphicall.org/ftp/ben2610/VideoTextureDemo2videoMix.blend このデモ]は&amp;lt;code&amp;gt;ImageMix&amp;lt;/code&amp;gt;ソースを使ったデモンストレーションです。&amp;lt;code&amp;gt;ImageMix&amp;lt;/code&amp;gt;は他の&amp;lt;code&amp;gt;Texture&amp;lt;/code&amp;gt;ソースを必要とします。たとえば&amp;lt;code&amp;gt;VideoFFmpeg&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ImageFFmpeg&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;ImageRender&amp;lt;/code&amp;gt;など。これらのソースを&amp;lt;code&amp;gt;setSource()&amp;lt;/code&amp;gt;でセットして、&amp;lt;code&amp;gt;setWeight()&amp;lt;/code&amp;gt;でそれぞれの相対的な重みを設定します。重みは0から255で、すべてのソースの重みの合計が255にならなければいけません。&amp;lt;code&amp;gt;ImageMix&amp;lt;/code&amp;gt;はすべてのソースを重みに応じて合成します。元になる複数のソースは、すべて同じサイズ（一番近い2の乗数にスケーリングされた後で）でなけれはいけません。そうでない場合、コンソールでPythonのエラーが出ます。&lt;br /&gt;
&lt;br /&gt;
{{clr}}&lt;br /&gt;
&lt;br /&gt;
{{Page/Footer|Doc:JA/2.5/Manual/Game Engine/Python API/Bullet physics|Doc:JA/2.5/Manual/Game Engine/Features}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Game engine]]&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:API's]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Sato</name></author>
		
	</entry>
</feed>