FXブログ

アルファ値の定義

アルファ値の定義

一次関数の式は、『y=ax+b』という式で表せます。この式は何を表しているかというと、
直線になる、ということです。
比例のところで、比例の式はy=axで、原点を通る式になる、ということを習っていると思います。一次関数と比例の式を比べると、違いは+bのところだけになりますね。
この+bは上下に移動していることを意味します。

3 描画モデル

SVG の実装には、この章で述べる描画(画像化)モデルに従って実装されているかのようにふるまうことが求められている。 現実の実装がこのモデルに従わなくてもよいが、実装でサポートされるすべての装置に現れる結果は,このモデルに適合しなければならない。 Implementations of SVG are expected to behave as though they implement a rendering (アルファ値の定義 or imaging) model corresponding to the one described in this chapter. A real implementation is not required to implement the model in this way, but the result on any device supported by the implementation shall match that described by this model.

【 描画( rendering ):この仕様の和訳全体を通して,語「描画」は,いわゆる(グラフィックの視覚的な)“レンダリング” を意味する( rendering, render の対訳に用いられる)。 「描画」が他の意味で用いられることはない。 】

付録 適合性の要件 において、現実の実装がここでの記述から逸脱してもよい範囲を述べる。 現実問題として、出力装置の限界(例えば、表現可能な色の範囲が限られているかもしれない),あるいは精度の数学モデルを実装するにあたっての実用上の限界(例えば、実行に際しては要求されている基準が満たされる程度に曲線を直線で近似させる,など)により、実装が多少異なってくることが予想される。 The appendix on conformance requirements describes the extent to which an actual implementation may deviate from this description. In practice an actual implementation will deviate slightly because of limitations of the output device (e.g. only a limited range of colors might be supported) and because of practical limitations in implementing a precise mathematical model (e.g. for realistic performance curves are approximated by straight lines, the approximation need only be sufficiently precise to match the conformance requirements).

3.2 画家のモデル

SVG の描画では「画家のモデル」が用いられる。 出力装置に対する一連の操作は 塗り の適用により行われる。 各々の操作は、出力装置のある領域に対する塗りである。 領域が前の操作による領域と重なりあう場合は、前の塗りが部分的に, あるいは完全に隠される。 塗りが完全に不透明でなければ、出力装置に現れる結果は アルファ混色 にて述べる(数学的な)組成規則に従う。 SVG uses アルファ値の定義 アルファ値の定義 a "painters model" of rendering. Paint is applied in successive operations to the output device such that each operation paints over some area of the output device. When the area overlaps a previously painted area the new paint partially or completely obscures アルファ値の定義 アルファ値の定義 the old. When the paint is not completely opaque the result on the output device is defined by the (mathematical) rules for compositing described under Alpha Blending.

3.3 描画順序

SVG 文書片の要素には暗黙の塗り順序がある。 文書片に現れる最初の要素が最初に「塗られる」。 後続の要素は前に塗られた要素の上に塗られる。 Elements in an SVG document fragment have an implicit アルファ値の定義 アルファ値の定義 アルファ値の定義 drawing order, with the first elements in the SVG document fragment getting "painted" first. Subsequent elements are painted on top of previously painted elements.

3.4 グループの描画

g などの,要素をグループ化する要素 (コンテナ要素 を見よ)の描画においては、まず,黒地透明( transparent black )に初期化された一時的なキャンバスが別途作成され,その上にすべての子要素が塗られる。 次に,グループに フィルタ効果 が指定されているならば、それらが一時的キャンバスに適用され,キャンバスは変更される。 変更された一時的キャンバスは、グループレベルの マスキング とグループに指定された 不透明度 が計算に織り込まれた上で,背景に組成される。 Grouping elements such as the ‘g’ element (see container elements) have the effect of producing a temporary separate canvas initialized to transparent black onto which child elements are painted. Upon the completion of the group, any filter effects specified for the group are applied to create a modified temporary canvas. The modified temporary canvas is composited into the background, taking into account any group-level masking and opacity settings on the group.

3.5 要素の描画

個々の グラフィックス要素 は、あたかもそれ自身が一つのグループをなすものとして描画される。 したがって、グラフィックス要素ごとに,別々の一時的なキャンバスが用意されることになる。 グラフィックス要素は、最初に一時的なキャンバスに塗られた後(下の 図形とテキストの塗り と ラスター画像の塗り を見よ),その要素に指定された フィルタ効果 が適用され、変更された一時的なキャンバスは,その要素に指定された クリッピング, アルファ値の定義 アルファ値の定義 マスキング, オブジェクトの不透明度 が計算に織り込まれた上で,背景に組成される。 Individual graphics elements are rendered as if each graphics element represented its own group; thus, the effect is アルファ値の定義 アルファ値の定義 as if a temporary separate canvas is created for each graphics element. The element is first painted onto the temporary canvas (see Painting shapes and text and Painting raster images below). Then any filter effects specified for the graphics element are applied to アルファ値の定義 create a modified temporary canvas. The modified temporary canvas is then composited into the background, taking into account any clipping, masking and object opacity settings on the graphics element.

3.6 グラフィックス要素の種類

SVG においては、キャンバスへ描画され得るものとして,3種類の基本的な グラフィックス要素 がサポートされている: SVG supports three fundamental types of graphics elements that can be rendered onto the canvas:

  • 図形 は、直線と曲線の組み合わせを表現する。 Shapes, which represent some combination of straight line and curves
  • アルファ値の定義
  • テキストは、文字グリフの組み合わせを表現する。 Text, which represents some combination of character glyphs
  • ラスター画像は、格子状に並んだ各点に対し 色と不透明度(いわゆるアルファ)を指定する,値の配列を表現する。 ( SVG においては 適合性の要件 にて指定されるラスター画像形式のサポートが要求される。) Raster images, which represent an アルファ値の定義 アルファ値の定義 array of values that specify the paint color and opacity (often termed alpha) at a series of points on a rectangular grid. (SVG requires support for specified raster image formats under conformance requirements.)

3.6.1 図形とテキストの塗り

図形とテキストには、 フィル 操作(塗りを図形の内部に適用すること),および ストローク 操作(塗りを図形の外形線に適用すること)が可能である。 ストローク操作では オブジェクトの外形線がその中央線に据えられる。 その結果、塗りの半分は図形の内部になされ,残り半分は図形の外部になされる。 Shapes and text can be filled (i.e., apply paint to the interior of the shape) and stroked (i.e., apply paint along the outline of the shape). A stroke operation is centered on the outline of the object; thus, in effect, half of the paint falls on the interior of the shape and half of the paint falls outside of the アルファ値の定義 アルファ値の定義 shape.

ある種の図形には、指定した頂点に マーカシンボル (それ自身、図形, テキスト, 画像 の任意の組み合わせから構成され得る)を描くことができる。 それぞれのマーカシンボルは、あたかも SVG 文書木において,そのグラフィック内容がそれを利用している図形の直後に挿入されたかのように,塗られる。 マーカシンボルのグラフィック内容は、グラフィックス要素と同じ方法で描画される。 マーカシンボルはテキストには適用できない。 For certain types of shapes, marker symbols (which themselves can consist of any combination of shapes, text and images) can be drawn at selected vertices. Each marker symbol is painted as if its graphical content were expanded into the SVG document tree just after the shape object which is using the given marker symbol. The graphical contents of a marker symbol are rendered using the same methods as graphics elements. Marker symbols are not applicable to text.

最初にフィル, 次にストローク, 最後にマーカシンボルが塗られる。 各マーカシンボルは 図形の外形線に沿って, 始点から終点に向かう順番で塗られる。 The fill is painted first, then the stroke, and then the アルファ値の定義 アルファ値の定義 アルファ値の定義 アルファ値の定義 marker symbols. The marker symbols are rendered in order along the outline of the shape, from the start of the shape アルファ値の定義 to the end of the shape.

フィルとストロークは それぞれ別々の不透明度を持つ。 したがって, 図形においては、フィルとストローク操作に対し,不透明度の異なる色を別々に指定することができる。 Each fill and stroke operation has its own opacity settings; thus, you can fill and/or stroke a shape with a semi-transparently drawn solid color, with different opacity values for the fill and アルファ値の定義 stroke operations.

フィルとストローク操作は互いに全く独立した塗り操作である。 したがって,図形に対してフィルとストロークの両方を行った場合、ストロークの半分はフィルを上塗りする。 The fill and stroke operations are entirely independent painting operations; thus, if you both fill and stroke アルファ値の定義 アルファ値の定義 a shape, half of the stroke will be painted on top of part of the fill.

SVG では、フィルとストローク操作に適用できる塗りとして,次の種類のものが組み込まれている: SVG supports the following アルファ値の定義 built-in types of paint which can be used in fill and stroke operations:

  • 単色 Solid color
  • グラデーション (線型および放射型) Gradients (linear アルファ値の定義 and radial)
  • パターン Patterns

3.6.2 ラスター画像の塗り

ラスター画像が描画される際には、出力装置上の領域に合わせた標本を生成をするために,元の標本が標準的なアルゴリズムを用いて「再標本化」される。 再標本化における要件は 適合性の要件 にて論じられる。 When a raster image is rendered, the original samples are "アルファ値の定義 resampled" using standard algorithms to produce samples at the positions required on the output device. Resampling requirements are discussed under conformance requirements.

3.7 塗られた領域へのフィルタの適用

SVG においては、任意の塗り操作に対し, フィルタを適用することができる( フィルタ効果 を見よ)。 SVG allows any painting operation to be filtered. (See Filter Effects.)

この場合、まず,塗り操作が黒地透明に初期化された中間処理用キャンバスになされる。 キャンバスの大きさは アルファ値の定義 フィルタ効果 で与えられる規則に従って定められる。 しかる後, フィルタ効果 に定義される処理を適用したものが結果となる。 In this case the result must be as though the paint operations had been applied to アルファ値の定義 an intermediate canvas initialized to transparent black, of a size determined by the rules given in Filter Effects then filtered by アルファ値の定義 the processes defined in Filter Effects.

3.8 クリッピング, マスキング, オブジェクトの不透明度

SVG においては、任意の塗り操作に対し,その領域をクリッピングとマスキングを用いて出力装置の一部分に限定させることができる。 詳細は クリッピング, マスキング, 組成法 にて述べる。 SVG allows any painting operation アルファ値の定義 アルファ値の定義 to be limited to a subregion of the output device by clipping and masking. This is described in Clipping, Masking and Compositing.

クリッピングにおいては、塗りの対象となる出力装置の領域を定義するパスが利用される。 クリッピングの適用下における塗り操作では、出力装置のクリッピング領域のみが影響を受ける。 クリッピングパスを次のように考えることもできる: それは一種のマスクであり,領域外の画素はアルファ値ゼロの黒, 領域内の画素はアルファ値 1 の白となっているものである。 塗り操作におけるクリッピングの「内部」は、パスの内部を定義する規則と同じ規則により定義される。 低解像度の出力装置においては、概して,クリッピングパスにアンチエイリアス処理が施される( shape-rendering プロパティを見よ)。 クリッピングについては クリッピングパス にて述べる。 Clipping uses a path to define アルファ値の定義 a region of the output device to which paint can be applied. Any painting operation executed within the scope of the アルファ値の定義 clipping must be rendered such that only those parts of the device that fall within the clipping region are affected by アルファ値の定義 アルファ値の定義 the painting operation. A clipping path can be thought of as a mask wherein those pixels outside the clipping path are black with an alpha value of zero and those pixels inside the clipping path are white with an alpha value of アルファ値の定義 アルファ値の定義 one. "Within" is defined by the same rules used to determine the interior of a path for painting. The clipping path is typically anti-aliased on low-resolution devices (see ‘shape-rendering’. Clipping is described in Clipping paths.

マスキングにおいては、まず,参照されている SVG 要素の色チャンネルとアルファチャンネルの輝度を利用して,マスク処理に用いるためのアルファ値が生成され、そのアルファ値がマスクを適用するグラフィックのアルファ値に掛け合わせられる。 マスキングについては マスキング にてとりあげる。 Masking uses the luminance of the color channels and alpha channel in a referenced SVG element to define a supplemental set of alpha values which are multiplied to the alpha values already present in the graphics to which the mask is applied. Masking is アルファ値の定義 described in Masking.

一連の描画操作に対し, 「大域的な」不透明度を適用することにより、マスキング演算を追加指定することもできる。 この場合のマスクは、与えられた不透明度のアルファチャンネルと白色の色チャンネルを持つ,広さ無限の領域である( opacity プロパティを見よ)。 A supplemental masking operation may also be specified by applying a "global" opacity to a set of rendering operations. In this case the mask is infinite, with a color of white and an alpha channel of the given opacity value. (See the ‘opacity’ property.)

いかなる場合においても, SVG の実装は、あたかも すべての塗り操作とフィルタ演算が黒地透明に初期化された中間処理用のキャンバスに対して最初に実行されたかのように,ふるまわなければならない。 しかる後、中間処理用のキャンバスのアルファ値に,クリッピングパスによる暗黙のアルファ値, マスクのアルファ値, opacity プロパティのアルファ値が 順に掛け合わされる。 この処理結果のキャンバスが 単純アルファ組成法 により背景に組成される。 アルファ値の定義 したがって,グループ不透明度 50% の下に,不透明な赤色に続いて不透明な緑色が塗られた場合、出力装置における結果は,不透明度 50% の緑色で塗られたときと同じになる。 何故なら、出力装置に中間キャンバスが描画される前の段階で,中間キャンバス上においては不透明な緑色が赤色の塗りを完全に覆うからである。 In all cases the SVG implementation must behave as though all painting and filtering is first performed to an intermediate canvas which has been initialized to transparent black. Then, alpha values on the intermediate canvas are アルファ値の定義 multiplied by the implicit alpha values from the clipping path, the alpha values from the mask, and the alpha values from the ‘opacity’ property. The resulting canvas is composited into the background using simple alpha blending. Thus if an area of the output device is painted with a group opacity of 50% using opaque red paint followed by opaque green paint the result アルファ値の定義 is as though it had been painted with just 50% opaque green paint. This is because the opaque green paint completely obscures the red paint on the intermediate canvas before the intermediate as a whole is rendered onto the output device.

3.9 親への組成法

SVG 文書片は半透明にすることもできる。 多くの環境において(例えばウェブブラウザなど),最終的な組成の段階で、 SVG 文書片がそれ全体として半透明にされた上で,背景のキャンバス上へ混色される。 SVG document fragments can be semi-opaque. In many environments (e.g., Web browsers), the SVG document fragment has a final compositing step where the document as a whole is blended translucently into the background canvas.

アルファ値の定義

有機概念図では化合物の物理化学的物性について、主にVan Der Waals力による物性の程度を「有機性」、主に電気的親和力による物性の程度を「無機性」と呼び、これらの組み合わせで化合物の物性をとらえます。この「有機性」と「無機性」を個々の化合物について有機性値〔Organic Value = OV 〕、無機性値〔Inorganic Value = IV 〕という固有の特性値を付与し、多数の化合物を物質野へ“ロケイト”することで、領域毎に様々な傾向を確認することができます。これは逆に、未知の化合物についても、その構造式から有機性値、無機性値が求められれば、その性状の予測が得られるということを示しています。

アルファ値の定義 アルファ値の定義
領域
A 砂状結晶圏
B 針状結晶圏
C 板状結晶圏
D 板状針状結晶共存圏
軌跡
1 結晶限界線
2 溶融限界線
3 揮発限界線
4 匂限界線
5 液状限界線
6 気体限界線
アルファ値の定義 アルファ値の定義
No. α 界面活性剤、染料、他
1 0~40° 油溶性溶剤
2 10~75° 可塑剤
3 23~45° W/O SAA(HLB 3~6)
4 25~55° カチオン SAA
5 10~60° 非イオン SAA
6 40~44° 起泡助剤
7 55~75° アニオン SAA,洗浄剤
8 55~75° O/W SAA
(HLB 8~18)
9 25~35° 油溶染料,分散染料
10 35~65° 有機顔料
11 65~75° アルコール溶性染料
12 75~85° 浸透剤,湿潤剤
13 75~85° 水溶性染料
14 55~85° 水溶性高分子
2-3.有機概念図とHLB式との相関

界面活性剤の性質を表現する方法として一般に用いられているHLB(Hydrophile Lipophile Balance)値は、界面活性剤の親水基と親油基との性質の相対的な強さの比を表すものです。HLB方式において、原料の性質はHLB値の大小によって表現されますが、多種の化合物が乳化処方に含まれる場合、数値の大小だけで乳化処方の性質予測をすることは困難になります。
有機概念図では、界面活性剤に限らず、あらゆる化合物を二次元に展開して表すことが可能なため、複数混合物においてもそれぞれの化合物が占める位置関係(絶対位置,相対距離,相対位置など)から性状予測をより的確に得ることができます。
また、有機概念図における有機性値、無機性値の概念は、HLB方式における親水性、親油性の概念との相関が高く、有機性値と無機性値の比から求めた値〔IV / OV = IOB(Inorganic Organic Balance)〕とHLB値を比較すると、近似的に『HLB値 = IOB値 × 10』が成り立ちます。

アルファブレンディング

実行結果

まず、上の一覧の[ 値・式 ]欄に入っている値や式は、全て四つの要素からできていますね。これは、純粋に色の各要素、つまり左から順に RGBA を表していることをまず念頭に置きましょう。そして、アルファベットの大文字で R や G などと表記されているのは、そのまま アルファ値の定義 RGBA のどの要素なのかを表します。続けてアルファベットの小文字で s や d となっている部分は、それぞれ[ s = source ]・[ d = destination ]です。

最後のほうには、小文字の c も出てきますね。これは[ c = constant ]なのですが、とりあえず今はややこしくなるので気にせずいきましょう。まず重要なのは s アルファ値の定義 と d を使っているブレンドファクターです。

さて、ブレンドファクターの定数名には、それがどのようなブレンディングを行なう係数なのか、ヒントとなるような名称がつけられています。たとえば、一番最初に登場している gl.ZERO は、もうそのまんまの意味で全ての色要素が 0 になっていますね。次に出てくる gl.ONE も、やっぱり似たような感じで全ての要素が 1 で統一されています。

WebGL でブレンドを有効にしたとき、まず既定で設定されているブレンドファクターは、次のように指定して blendFunc メソッドを実行した場合とまったく同じになっています。

第一引数は[ 描画元の色 ]をどう扱うのかを指定するのでしたよね。描画元の色が仮に(0.5, 0.アルファ値の定義 5, 0.5, 1.0)であった場合は、これらに全て 1 が掛けられることになるので、結果は(0.5, 0.5, 0.5, 1.0)のまま、一切変化しないことになります。

一方で、第二引数に指定する[ 描画先の色 ]つまりコンテキストの色のほうはどうでしょう。第二引数には gl.ZERO が指定されているわけですから、コンテキスト上の色がどうなっていようと、全て 0 になってしまいますね。

描画色 = 描画元の色 * sourceFactor + 描画先の色 * destinationFactor

これを見ると結果は明白です。既定の設定では、描画元の色( source )だけが画面上に出力されることがわかりますね。描画先の色がどうなっていようと、全て描画元の色で上書きされてしまうわけですね。

アルファブレンドを実現する

まず、アルファブレンドを行なう前提として、コンテキスト上にもともとある色(初期化によってクリアする際の色)は、不透明な青だとここでは仮定します。不透明な青ですから、これを RGBA で表すと(0.0, 0.0, 1.0, 1.0)となりますね。

そこに、赤い色をしたポリゴンを描画しようとするとき、この赤いポリゴンを不透明度 70 %(1.0, 0.0, 0.0, 0.7)で描画するにはどうすればいいでしょうか。

青いコンテキスト上に、赤いポリゴンを不透明度 70 %で描画するわけですから、ポリゴンが描かれた場所はやや赤みがかった紫色になるはずですね。これを数値で表すと以下のようになります。

描画元(ポリゴン) + 描画先(コンテキスト) アルファ値の定義 アルファ値の定義 = 最終出力色

(1.0, 0.0, 0.0) * sFactor + (0.0, 0.0, 1.0) * dFactor = (0.アルファ値の定義 7, 0.0, 0.3)

また、描画元の色は、よく見ると色成分が 0.7 倍されていますね。描画先の色は、色成分が 0.3 倍になっています。これらのことから導き出される正解のブレンドファクターはいったいどれでしょう。

ヒントは、描画元のポリゴンのアルファ値が 0.7 であるという事実です。

まず、ポリゴンの色には、そのポリゴン自体が持つアルファ値をそのまま掛ければいいですね。ポリゴンの色に含まれるアルファ値は 0.7 なので、単純にそれを掛けてやればいいわけです。

sFactor = 描画元のアルファ値(0.アルファ値の定義 アルファ値の定義 7) [ gl.SRC_ALPHA ]

(1.0, 0.0, 0.0) * sFactor(0.7, 0.7, 0.7) = (0.7, 0.0, 0.0)

次に描画先の色です。こちらは先ほどとは違い、B 成分の 1.0 が最終的には 0.3 になってほしいわけです。ということは、1 から描画元のアルファ値を引いた値を使えばよさそうです。

dFactor = 1.0 - 描画元のアルファ値(0.7) アルファ値の定義 = (0.3) [ gl.ONE_MINUS_SRC_ALPHA ]

(0.0, 0.0, 1.0) * dFactor(0.3, 0.3, 0.3) = (0.0, 0.0, 0.3)

(0.7, 0.0, 0.0) + (0.0, 0.0, 0.3) = (0.7, 0.0, 0.3)

随分回りくどい感じがするかもしれませんが、これでアルファブレンドの計算がキチンと正確に成立することはわかりますね。sFactor には、描画元のアルファ値をそのまま掛けます。これはまさに gl.SRC_ALPHA を指定した場合の処理になります。dFactor には、描画元のアルファ値を 1 から引いた値を掛ければいいわけです。これを表す定数は gl.ONE_MINUS_SRC_ALPHA ですね。これらを総合すると、アルファブレンドを実現するためのブレンドファクターの指定は、次のようになります。

プログラムを記述する

それではアルファブレンドを行なえるようにプログラムを記述しましょう。今回は、四角形ポリゴンを 2 枚レンダリングします。一つ目のポリゴンは、テクスチャを適用し、ブレンディングは行なわずに今までどおり描画します。二つ目のポリゴンは逆に、テクスチャは貼らずに、ブレンディングを有効にしてレンダリングします。

また今回のサンプルでは自由に透明度を変化させられるようにします。これには HTML5 から採用された新しい アルファ値の定義 input タグタイプである range タイプを使います。

input type range

この input タグに id を付加しておき、javascript プログラムからループのたびに参照することで、透明度を任意に変化させながらレンダリングが行なえるようにします。ちなみに、この range タイプには最小値を 0 、最大値を 100 で設定しており、これを 100 で割った数値をシェーダにプッシュします。これはアルファ値は常に 0 ~ 1 の範囲に収まっている必要があるためです。

シェーダ内では、javascript のプログラムと同様に if ステートメントを使うことが可能です。これを利用して、テクスチャを使う場合と使わない場合とで処理を分岐するようにします。

今回は attribute 変数として頂点の[ 位置 ]・[ 色 ]・[ テクスチャ座標 ]の三つの情報を受け取ります。これは簡単ですね。さらに uniform 変数として[ 座標変換行列 ]・[ input range タイプから取得した透明度 ]の二つを受け取ります。

フラグメントシェーダに送る varying 変素も二つありますね。色情報とテクスチャ座標の情報を送るようにしています。ここで注目すべきは変数 vColor に値を設定している部分。

変数 vColor に値を設定している箇所を抜粋

頂点から入ってきた頂点色の情報と、range タイプの input タグから取得した透明度の情報とを使って、フラグメントシェーダに送る色情報を操作しています。変数の vec4 型は、xyzw や rgba での参照が可能という柔軟な仕様になっているので、それを利用して頂点のアルファ値とタグから取得したアルファ値を掛け合わせています。

こちらは若干複雑そうに見えるかもしれませんが、やっていることはそんなに難しくありません。まず uniform 変数として二つのデータが入ってきます。一つ目( sampler2D texture )はテクスチャに関する情報、もう一つ( int useTexture )アルファ値の定義 はテクスチャを使うのかどうかを表す係数です。

変数 useTexture は、変数の型が int 型になっています。つまり、プログラムからは整数値としてデータが入ってきます。これをシェーダ内で真偽値を表すデータに変換して利用します。

どういうことかと言うと、フラグメントシェーダの main 関数の中を見てください。まず最初に最終的に出力される色を格納するための変数 destColor が宣言されています。その次の行では if ステートメントを使って何かを判別していますね。

ここで使われている bool というビルトイン関数は、整数値などのデータを真偽値に変換してくれる関数です。変換された結果を参照して、テクスチャの色を使うのかどうか、処理を分岐させています。

これは、プログラムから uniform 変数を登録する際、直接真偽値を、真偽値として送ることができないからです。javascript プログラムのなかでシェーダに uniform 変数を登録する際には uniform4fv や uniform1i アルファ値の定義 を使いますよね。これらのなかに uniform1b というメソッドは存在しません。ですから直接 bool 型としてシェーダにプッシュする方法はないわけです。

これに代わる方法として uniform1i メソッドから整数値としてデータを送り、シェーダ内で真偽値に変換するやり方を採用しているというわけです。 ※まぁ、いずれにしてもわざわざ真偽値に変換しなくても、整数値を比較することだけで、処理を分岐させること自体は普通にできます。これはもう、どんなふうにソースを記述したいかというプログラマ個人の趣向の問題とも言えますね。

メインプログラムも見てみる

少し長いですが勢いそのまま javascript のプログラムのほうも見ていきます。

メインプログラムの中では、適切に attribute と uniform に関する処理を記述したあと、深度テストとテクスチャの利用を有効化しておきます。また、今回は単純な板ポリゴンの描画を行なうため、カリングは無効のままにしておきます。

自作関数 blend_type の引数に 0 を指定すれば通常のアルファブレンドが、1 を指定すれば加算合成が行なえます。アルファブレンドを行なう際のブレンドファクターの指定は先ほど解説したとおりです。加算合成のブレンドファクターは、詳細については解説しませんが blendFunc メソッドの引数をよく見て考えれば、わかると思います。

ブレンドファクターの指定が完了したら、続いてはドキュメント内の アルファ値の定義 input タグから、頂点色に掛け合わせるアルファ値を取得しておきます。

ここで使われている parseFloat 関数は、引数に与えられた数値を浮動小数点数型に変換してくれる関数です。エレメントから得られる数値は 0 ~ 100 の範囲の整数値なので、この関数を使って 0 ~ 1 の範囲に正しく収まるようにしています。

ここでは uniform 関連の処理に注意しましょう。

uniformLocation のインデックス 0 は座標変換行列、インデックス 1 が頂点のアルファ値にシェーダ内で掛け合わせるアルファ値です。インデックス 2 はテクスチャユニットの登録のために使い、インデックス 3 がテクスチャを使うかどうかを表すデータです。

一次関数について|中学生/数学

アルファはお子さまを全力でサポートします。 アルファはお子さまを全力でサポートします。


一次関数の式は、『y=ax+b』という式で表せます。この式は何を表しているかというと、
直線になる、ということです。
比例のところで、比例の式はy=axで、原点を通る式になる、ということを習っていると思います。一次関数と比例の式を比べると、違いは+bのところだけになりますね。
この+bは上下に移動していることを意味します。

一次関数の式の意味

では、一次関数の式 y=ax+b からどんなことが読み取れるのでしょうか。
先ほど、bについては「上下に移動する」と説明をいたしました。
このbは、『切片』と呼ばれます。
xを0にすると、y=ax+bの式は、y=bとなります。
xは0なので、(0.b)の点はy軸上の点です。
bをみるとこの直線がy軸上のどこを通るかがわかります。
前項の「上下の平行移動」ということを踏まえても、原点からbだけ移動した点ですから、
y軸上の点になることがわかります。

次に、aについて、aは『傾き』と呼ばれます。
xが1ずつ増えると、yはaの分だけ増えていきます。この増えかたによって直線の傾き方が決まる、ということです。
aの値が大きいほど、直線の傾斜が大きくなり(y軸に近い直線になり)、小さいほど傾斜もなだらかになります。また、aが正の数なら、直線は右上がりとなり、負の数なら右下がりの直線になります。

無料体験無料体験
資料請求資料請求

変化の割合って何?

変化の割合は、(yの増加量)÷(xの増加量)で求められる数です。
一次関数のところで習うのですが、なんかピンとこないかもしれませんね。
(xの増加量)のところを1としてみましょう。そうすると、「xが1のとき、変化の割合はyの増えた分になる」という意味になります。

ここで、前の項目のaのところをみてください。
「xが1ずつ増えると、yはaの分だけ増えていきます」とあります。
上の分と見比べると、「変化の割合はaになる」ということがわかります。

直線の場合、進み方は一定となるので、変化の割合も一定で、aと同じになります。
変化の割合を求める式は、そのままaを求める式にもなっています。
(注意点)
一次関数は直線の式になるから変化の割合=aとなりますが、直線でない場合(放物線や双曲線など)は、変化の割合が一定ではないので、その都度計算が必要になります。

一次関数の式はどうやって出すの?

解答)
傾きが3であることから、a=3であることがわかります。
この時点でこの式はy=3x+bとなります。
これが(2,4)を通るから、x=2、y=4を代入します。
4=3×2+bになります。
これを解いて、b=-2
よってこの式は、y=3x-2
となります。

解答)
xが2増えると、yは4減少します。これから変化の割合を計算します。
-4÷2=-2 ですので、a=-2になります。この時点での式は、
y=-2x+b になりますね。これに、x=4、y=1を代入します。
1=-2×4+b これを解いてb=9
よって答えはy=-2x+9となります。

一次関数の式はどうやって出すの?(2点を通る直線の式)

2点を通る直線を求めるパターンは頻繁に使います。
解き方のアプローチが2通りあるので、解きやすい方法を選んでマスターするのがいいでしょう。具体的には、
① アルファ値の定義 変化の割合からaを求めてからbを出す方法。
② 連立方程式を作り、a,bを両方いっぺんに出す方法。

解答①)
xは2から4まで増えているので、xの増加量は2、同様にyの増加量は4なので、
変化の割合=4÷2=2 よってaは2になります。
この時点で、求める式は y=2x+bになります。
この式に(2,5)(4,9)のどちらでもいいので好きなほうを代入して、bを出します。
(2,5)を選んだとして、
5=2×2+b よってb=1
したがって、直線の式は y=2x+1 となります。

解答②)
直線の式 y=ax+b に(2,5)を代入して1つ式を作り、同じように(4,9)をつかってもう一つ式を作ります。

この連立方程式を解くと、a=2、b=1となります。
よって求める式は、 y=2x+1 となります。

グラフの交点ってどうやって求めるの?

一次関数の問題の中で、「2つの直線の交点を求めなさい」という問題もよく出てきます。
仮にその2つの直線を、直線m、直線nとし、その交点をpとします。
点pは、直線m上の点ですので、直線mの式に代入しても成り立ちます。
同様に、点pは、直線n上の点でもありますので、直線nの式に代入しても成り立ちます。
よって、点pは、直線m、nのどちらに代入しても成り立ちます。
これを言い換えると、2つの式を同時に満たす数が、点pの値、つまり、連立方程式の解ということになります。

無料体験無料体験
資料請求資料請求

一次関数の利用が難しい…


一次関数は幅広く応用問題があります。「長方形の辺上を点pが動く」なんていう問題だったり、列車の運行状況をダイヤグラムで表してあったり、水槽に水を入れたり抜いたり、
グラフで囲まれた図形の面積云々・・・電気料金などなどいろいろな形で問題が出されます。

数学の問題は一次関数に限らず、まず文章からどんな式が作れるか、が第一関門になります。
それがたまたまy=ax+bの形になれば、一次関数の式となり、グラフが直線になる、ということがわかる、という流れになります。
式さえ作れれば、その式を使って問題を解いていけばいいので、あとは解き方や、計算に慣れていくことが重要です。
「連立方程式の利用」や「一次関数の利用」が難しいと感じる生徒はたくさんいますが、そのほとんどの生徒が「式さえできてしまえばできる」といいます。
まずは、文章からちゃんと式を作ることができるように頑張ってみましょう。

一次関数は、問題の中に連立方程式を必要としたり、また二次関数と複合したりと様々な問題を出しやすい分野でもあります。
一次関数に限った話ではありませんが、色々な問題をたくさん解いてみることが重要です。
一度経験したことのあるパターンの問題なら解きやすいですし、またそうでない問題でも、ほかの問題で考えて解いた分の経験を生かして、解答できることが多くなるでしょう。

さて、この記事をお読み頂いた方の中には
「中学生になってから苦手な科目が増えた」
「部活が忙しくて勉強する時間がとれない」
「このままだと高校受験が心配」
といった、お子さまの勉強に関するお悩みを持たれている方も多いのではないでしょうか。
中学生は授業のペースがどんどん早くなっていき、単元がより連鎖してつながってきます。
そのため、一つの単元につまづいてしまうと、そこから連鎖的に苦手意識が広がってしまうケースが多いのです。

家庭教師のアルファが提供する完全オーダーメイド授業は、一人ひとりのお子さまの状況を的確に把握し、学力のみならず、性格や生活環境に合わせた指導を行います。もちろん、受験対策も志望校に合わせた対策が可能ですので、合格の可能性も飛躍的にアップします。 アルファ値の定義
「教育を通じて社会のできたを増やす」をミッションとする私たちは、ADHDや自閉症などの発達障害を持つ中学生のお子さまの指導にも対応しています。
中学生のお子さまの勉強についてお困りの方は、是非一度、プロ家庭教師専門のアルファの指導を体験してみてください。下のボタンから、無料体験のお申込みが可能です。

無料体験無料体験
資料請求資料請求

こちらの記事の監修者

浅井保 (あさい たもつ)
・北海道大学文学部卒
・家庭教師のアルファ 講師部長
・山手中央高等学院 学院長

データ分析基礎知識サイト

回帰分析は予測をすることが目的のひとつでした。身長から体重を予測する、母親の身長から子供の身長を予測するなどです。相関関係を「Y=aX+b」の一次方程式で表せたとすると、定数の a (傾き)と b (y切片)がわかっていれば、X(身長)からY(体重)を予測することができます。 以下の回帰直線の係数(回帰係数)はエクセルで描画すれば簡単に算出されますが、具体的にはどのような式で計算されるのでしょうか。

単回帰分析の実際

相関係数 correl (Yのデータ範囲,Xのデータ範囲) 傾き slope (Yのデータ範囲,Xのデータ範囲) 切片 intercept (Yのデータ範囲,Xのデータ範囲) 決定係数 rsq (Yのデータ範囲,Xのデータ範囲)

相関係数とは

(1)XとYの共分散(偏差の積和の平均)とは
「XとYの共分散(偏差の積和の平均)」という概念がわかりづらいと思うので、説明をしておきます。 先ほども使用した以下の15個のデータにおいて、X,Yの平均は、それぞれ5.73、5.33となります。1番目のデータs1は(10,10)ですが、「偏差」とはこのデータと平均との差のことを指しますので、それぞれ(10−5.73,10ー5.33)=(4.27,4.67)となります。グラフで示せば、RS、STの長さということになります。

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる