hpprc/jawiki-books huggingface dataset:
高等学校看護 疾病と看護/薬物の作用

薬物(やくぶつ)とは、ヒトや動物などの生体に与えたときに何らかの作用をおよぼす物質のことである。単に薬(くすり)や薬品(やくひん)という場合もある。 薬物のうち、病気の治療やケガの治療などの医療の目的に用いる薬品を医薬品という。 医学では、単に「薬」と言った場合は、毒薬や劇薬なども含む。

薬物が、それを与えた生物体に及ぼす作用を薬理作用(やくりさよう)という。 ここでいう作用とは、薬物による生体の何らかの変化のことであり、生体にとって有益か不利かは、作用の定義に問わない。
薬物を投与した場合、生体の器官・組織・細胞などの機能が促進される場合、その作用を興奮作用(こうふんさよう)という。 薬物を投与した場合、生体の器官・組織・細胞などの機能が低下される場合、その作用を抑制作用(よくせいさよう)という。

薬物が生体に投与されると、薬物は生体のさまざまな部位に作用をするが、薬物は部位によって作用の強さが異なる。 そして、特定の器官や組織に、強く作用が現れることがある。このことを選択的作用(せんたくてきさよう)という。
ジギタリスという植物にふくまれるジゴキシンと呼ばれる成分は、心臓の心筋の作動を強める強心作用をもつが、骨格筋には、ほとんど影響しない。
一般の多くの細胞や組織、器官において作用する場合、その作用を一般作用(いっぱんさよう)という。 消毒薬用のフェノールなど。

薬の、治療目的の作用のことを主作用(しゅさよう)という。
治療目的以外の作用を副作用(ふくさよう、英: side effect)という。(生体に有利か不利かは問わない)。
これらとは別に以下の用語がある。
その薬の投与によって起こる、生体に有害な作用を有害作用(ゆうがいさよう、英: adverse reaction)という。
薬物の、ある作用が、主作用か副作用かは、治療目的によって変わる。たとえばモルヒネを鎮痛薬として用いる場合、服用者に生じる便秘は副作用である。いっぽう、下痢症状に対する下痢止めとして、モルヒネを用いる場合は便秘は主作用である。
副作用と有害作用は異なる概念なので混同しないように。

薬物の作用のうち、最初に現れると考えられる作用を直接作用(ちょくせつさよう)という。または一次作用ともいう。
直接作用の結果、他の器官に2次的におよぼす作用を間接作用(かんせつさよう)という。または二次作用とも言う。

強心剤のジギタリスには、投与で心臓が働き血液の循環が改善された結果、腎臓による血液のろ過量が増え、尿量が増えるという利尿作用がある。この場合の利尿作用が間接作用にあたる。

薬物の投与した部位の付近にのみ限定して現れる作用を局所作用(きょくしょさよう)という。 局所作用を持つ薬物としては、たとえば外傷に対する軟膏。ほかには散瞳薬、局所麻酔薬などがある。
薬物が吸収されて、血流の循環により全身に運ばれて全身に現れる作用を全身作用(ぜんしんさよう)という。
I2P

I2P (Invisible Internet Project) とは、アプリケーションが送るメッセージを匿名化するオーバーレイ・ネットワークを構築するソフトウェアである。これを使用することで匿名で(2ちゃんねるのようなIPによる追跡が可能なものではなく)ウェブサーフィングやチャット、ブログ、ファイル転送などを行うことができる。I2Pは複数のオープンソースソフトウェアライセンスの下で公開されている。I2Pの名称は Invisible Internet Project (不可視インターネットプロジェクト) を由来とし、検閲のない自由な社会を形成しようと努力している人達を支えるために2003年から開発が始められた。
(※ただし、I2PはJAVA実行環境が必須なので、事前にJAVAランタイムを導入しておくこと)
I2Pを通してウェブサーフィングやeepsites(I2P内のみ閲覧ができるサービス)の閲覧を行いたい場合、ブラウザのプロキシ設定を変更する
高等学校工業 原動機/送風機と圧縮機

気体を吸込み、吸込んだ気体を圧力を上昇させて、吐出し口から吐出す機械が、送風機および圧縮機である。 送風機と圧縮機の違いは、圧力の上昇値の違いで分類される。送風機と圧縮機の境目は、100kPaの圧力上昇が境目である。100kPa以下の圧力上昇値のものを送風機と言う。100kPa以上の圧力上昇値のものを圧縮機(compressor)という。送風機の中で、圧力上昇が10kPa以下のものをファン(fan)と言い、圧力上昇が10kPa~100kPaのものをブロワ(blower)という。つまり、まとめると、以下のようになる。
送風機、圧縮機ともにターボ型と容積型がある。

羽根が取り付いた状態のときに、羽根の向きを羽根の内側から外側へと見たときの向きが、回転方向と同じ方向を向くのを、前向き羽根という。羽根が半径方向を向いているのを、径向き羽根という。羽根の向きが、内側から外側へと見たときに、回転方向と反対向きになる羽根を後ろ向き羽根という。

軸流送風機(axial fan)とは、吸い込みは軸方向に吸込み、吐き出しは軸方向に吐出す送風機である。原理や構造は軸流ポンプと類似している。羽根車の形状は、プロペラファンなどが多い。 低圧で大容量である。 小型のものは、家庭用の台所や居間などにある換気扇などで用いられることが多い。 冷房で用いられることのある、扇風機で見かけることの多いプロペラ式の扇風機は、たいていは軸流式送風機の一種である。
軸流圧縮機(axial compresser)は、多段にすることで圧縮性能を高めている。多段化する場合は、原理的には、軸方向に羽根車を増設すれば済むので、多段化がしやすい。 動翼と静翼が、交互に配置している。静翼の羽根の向きは、動翼とは反対向きである。固定翼の逆向きの羽根の目的は、動翼による気体の速度を圧力へと変換する目的と、動翼による流れの旋回を軸方向へと整流する目的である。 出口に近づくほど羽根を太くするなどして、流路を狭めていく事によって、圧縮性能を高めている。 ガスタービン、ジェットエンジンなどの分野に多様されている。
羽根は、軸方向に長く半径方向に短い羽根を多数、備え付けている。この羽根は前向き羽根である。 低圧で大風量である。
ラジアル型では、羽根が半径方向に向いた径向き羽根であり、平板の羽根が、軸中心から放射上に付いている。
後ろ向き羽根の送風機のこと。 効率が良い。


二葉ブロワ(two lobe blower)は、ケーシング内に、まゆ形の2個の回転子が取り付けられている。回転子が回ることで、密閉空間が移り行くので、それを利用して、気体を吐出す方式である。 ルーツブロワ(roots blower)とも呼ばれる。 ケーシングと各ロータとの間には隙間が設けてあり、ロータ同士の間にも隙間がある。このため、羽根の磨耗防止のための潤滑油が不要になる。(軸受の潤滑など、他の用途の潤滑は必要。)用途は、油による汚染を嫌う用途で用いられることが多い。
ベーン圧縮機(vane compressor)は、ベーンポンプと類似の原理の圧縮機である。一般にロータがケーシング内に偏心して置かれており、ロータにはベーン羽根を納めるための溝が多く、つけられており、スプリングによりベーンがケーシングへと押し付けられて密閉を行い。ロータの回転とともにベーンも回転して、気体を吐出し口へと圧送する圧縮機である。ベーンとケーシングが接触する摺動面には、潤滑油による潤滑が必要である。
ねじ圧縮機(screw compressor)は1対をなす、2個のロータがある。ロータの向きは同じ向きである。それぞれ雄ロータと雌ロータと呼ばれる。2個のロータが、歯間に気体をはさみ、回転とともに、吐出し口へと圧送する。 給油式のものと、無給油式のものがある。給油式は、2個のロータが接触し、油で潤滑および密封をさせる方式のものである。圧縮性能は、給油式のほうが高い。

原理は、ピストン式の容積ポンプと類似している。シリンダ内を往復するピストンによって、直接、圧縮をするので、さまざまな気体が圧縮できる。また、圧縮比を高く、とれる。圧縮された気体は、吐き出し弁を通って吐出される。 冷凍機用の圧縮機として、用いられることがある。

低流量のときにおこりやすい振動現象のサージングは、圧縮機や送風機でも同様に発生するので注意が必要である。 起動時や停止時の弁の状態についても、注意が必要である。詳しくは、各製品の製品カタログや、作業手順書などで確認のこと。
高等学校工業 原動機/油空圧機器

油圧機器は、鉱物油などを作動液として、油圧モータや油圧シリンダ などのアクチュエータに仕事をさせる機械である。 パスカルの原理を応用することで、大きな力を出すことが出来る。
油圧は油を循環させて使うので、装置全体を油圧回路という。
油圧機器の全体の構造は、主に以下の部品からなる。
フィルタは油タンクにあり、摩耗くずなどがタンク内に入らないようにしている。 油タンクには通気口が上部にある。
一般に引火性や燃焼性があるので、火気や高温に注意が必要である。低温にも注意が必要である。低温では、粘度が上がる。なので、冬場などは、ヒーターなどで適温まで上げたり、あるいは暖機運転が必要である。 作動油の分類は、主要成分により3種類に分類される。石油系と合成系と水性系である。
錆止め剤や酸化防止剤を添加したもの。別名は、鉱物系作動油とも呼ばれる。 引火性があるので、火気に注意する必要がある。また、高温での使用にも注意が必要である。このような理由から消防法の危険物の適用を受ける。
50°以上では、合成系作動油を用いるのが一般である。
難燃性が高い。 ゴムや樹脂に対する腐食性があり、ニトリルゴムやウレタンゴムなどを侵すので、これらの材料を用いている油圧機器には使用できない。(シール材などで、ニトリルゴムやウレタンゴムは用いられることが多い。) シール材にゴムを用いる場合は、フッ素ゴムなどを用いる必要がある。

難燃性はリン酸エステルと比べると劣るが、一般石油系と比べると難燃性は高い。 シール材やパッキン類には、一般石油系のものが使用できる。ただし、フェノール樹脂およびブチルゴムを侵すので注意が必要。 生分解性がある。

約40%が水。添加剤として、増粘剤や錆止め剤、摩耗防止剤や消泡剤などが加えられている。 潤滑性は劣る。 水分の蒸発により、濃度変化をするため、濃度管理が必要。高温では用いない。高温で用いない理由は、水分の蒸発が、高温では激しくなるためである。50°以下で使用するのが望ましいとされる。 難燃性は高い。

油圧機器には、油タンクからアクチュエータへ作動油を送るための油圧ポンプが取り付いている。 歯車ポンプやベーンポンプが用いられることが多い。 いずれも容積型ポンプである。 歯車ポンプは、内接形歯車ポンプも、外接形歯車ポンプも、ともに油圧ポンプとして用いられている。
アクチュエータには油圧シリンダや油圧モータが用いられる。
油圧シリンダの種類には、単動シリンダと複動型シリンダがある。単動は、行き行程のみ油圧により働かせて、戻り行程はピストンの自重やスプリング力などの油圧以外の力で戻るシリンダである。 複動シリンダは、行き行程と戻り行程の両方とも油圧の働きによって作動するシリンダである。シリンダの両側に油の流入口があるのが複動シリンダの特徴である。
ピストンロッドがピストンの片側にのみ付いた方式のシリンダを、片ロッド形という。片ロッド型では、作動流体からの受圧面積が、ピストンの左右でロッドの断面積のぶんだけ異なるので、よってピストンの行きと戻りの動作特性が異なる。
ピストンロッドがピストンの両側に付いた方式のシリンダを両ロッド形という。通常、ロッドの太さは同じである。両側の受圧面積が同じなので、ピストンの行きと戻りは同じ動作特性である。

シリンダの流出側も、圧力が残っている。これを背圧という。背圧による抵抗のぶんだけ、シリンダが外部に与える力が下がる。

油圧モータには、歯車モータ、ベーンモータやアキシャル形ピストンモータなどがある。構造は、容積式ポンプと原理は類似している。 油圧モータは、圧油の力を、回転運動に変換する機械である。

油タンクには、送り出す油をためるだけでなく、戻ってくる油を回収して溜めることにも使う。


圧力が高くなった時に、油タンクへと油を戻すための弁。油タンクからアクチュエータへの流路から、分岐して配置する。構造は、スプリングなどでポペット弁と呼ばれる栓を押し付ける構造。調整用ハンドルで、設定圧を調整しているのが一般である。
油タンクからアクチュエータへの流路に直列に配置し、弁の出口側の2次側の圧力が高まると、流路を閉じて、結果的に2次側への流量が減ったことから2次圧も下がるので、このようにして圧を下がる弁。

アクチュエータに入る流量を制御することで、アクチュエータを制御する方式。
アクチュエータから出てくる流量を制御することで、アクチュエータを制御する方式。
OpenGLプログラミング/モダンOpenGL チュートリアル 02

さて、理解のための動作例はできたので、新しい機能やさらなる堅牢性の追加にとりかかれます。
以前のシェーダーは、できるだけ簡単になるように意図的に最小限にしていましたが、実世界の例ではもっと付属コードを使用します。

最初に追加するものは、シェーダをロードするためのより便利な方法です:外部ファイルのロードがとても簡単になるはずです(Cの文字列としてコードにコピーペーストするよりも)。 それに加えて、こうすることでCコードを再コンパイルせずにGLSLコードを変更できるようになります!
まず、ファイルを文字列としてロードする関数が必要になります。 基本的なC言語のコードで、ファイルのサイズに割り当てられたバッファの中にファイルの内容を読み取ります。
現時点でシェーダにエラーがある場合、プログラムは何のエラーかを特に説明することなく、ただ停止します。 infologを使用することで、OpenGLからより多くの情報を得ることができます:
GLES2関数だけを使用する場合、アプリケーションはデスクトップとモバイルデバイスの両方にほぼ移植可能です。 対処する問題がまだひと組あります:
The #version needs to be the very first line in some GLSL compilers (for instance on the PowerVR SGX540), so we cannot use #ifdef directives to abstract it in the GLSL shader. Instead, we'll prepend the version in the C++ code:
私たちはすべてのチュートリアルで同じバージョンのGLSLを使用するため、これが最も簡単な解決策です。
#ifdef と精度のヒントは、次のセクションで説明します。
これらの新しいユーティリティ関数と知識を使って、シェーダのロードとデバッグのための別の関数を作ることができます:
これでもうシェーダーをシンプルに使用してコンパイルできます:
同様にリンクエラーも表示します:
これらの新しい関数を、 shader_utils.cppに配置します。
これらの関数の記述を可能な限り少なくしようとしている点にお気づきでしょうか: OpenGL Wikibookの目標は、OpenGLがどのように動作するかを理解することであって、開発しているツールキットの使用方法を理解することではありません。
shader_utils.hヘッダファイルを作成しましょう:
triangle.cpp内の新しいファイルを参照 :
そして Makefileの中で :
頂点バッファオブジェクト(VBO)を使用して、グラフィックカードに頂点を直接格納することは、良い習慣です。
そのうえ、 "client-side arrays"のサポートはOpenGL 3.0以降は公式に削除され、WebGLには存在せず、そして低速なので、少し単純さには欠けても、今のうちからVBOを使用してみましょう。 たまたま出くわした既存のOpenGLコードで使用されていたりするかもしれないですから、両方の方法について知っておくことが重要です。
2つのステップでこれを実装します:
グローバル変数を作成 (#includeの下) してVBOハンドルを格納する:
init_resourcesで、 triangle_verticesを定義しているところに移動して、ひとつ(1)のデータバッファを作成し、それを現在のアクティブなバッファにします:
さて、このバッファに頂点をプッシュすることができます。 データの編成方法や使用される頻度を指定します。 GL_STATIC_DRAW は、このバッファにはあまり頻繁に書き込みはせず、そしてGPUが自身のメモリ内にコピーを保持する必要があるということを示しています。 VBOに新しい値を書き込むことは常に可能です。フレームあたりに1度かそれ以上頻繁にデータを変更する場合は、GL_DYNAMIC_DRAWまたはGL_STREAM_DRAWを使用することができます。
どんな時でも、アクティブなバッファの設定解除を、このように行えます:
とりわけ、C言語の配列を常に直接渡す必要がある場合は、アクティブバッファを無効にしていることを確認してください。
onDisplayで、コードを少し適合させます。 glBindBufferを呼び出して、 glVertexAttribPointerの最後の2つのパラメータを変更します :
終了時のクリーンアップを忘れずにやっておきましょう:
今はもう、シーンを描画するたびに、OpenGLがすべての頂点をGPU側で既に持っていることになります。 数千ポリゴンもの大きなシーンの場合、これは莫大なスピードアップになりえます。
一部のユーザーが持っているグラフィックカードは、OpenGL 2をサポートしていない可能性があります。 これはおそらくプログラムをクラッシュさせたり、不完全なシーンを表示したり、といったことにつながります。 GLEWを使用してこれを確認することができます(glewInit()の呼び出しが成功した後に):
注意点として、一部のチュートリアルは2.0付近のカードでしか動作しないこともあり、たとえばIntel 945GMが公式でサポートしているOpenGL 1.4以外はシェーダのサポートが限定的です。
他のOpenGLのコードの中で、次のようなヘッダーに出会うかもしれません:
OpenGLの拡張機能をロードする必要がない場合で、 かつヘッダが十分に最近のものである場合は、GLEWの代わりにこれを使用することができます。 私たちのテストによると、Windowsユーザーは古いヘッダを持っているかもしれず、GL_VERTEX_SHADERなどのようなシンボルを見失ってしまうので、これらのチュートリアルではGLEWを使用します(プラス私たちが拡張をロードするときのための準備にもなります)。
GLEWとGLeeの比較については、 APIs, Libraries and acronyms セクションもご覧ください。
ユーザーの報告によると、Intel 945GM GPUのGLEWのかわりにこのテクニックを使用することで、シンプルなチュートリアルでは不完全なOpenGL 2.0サポートをバイパスすることができたそうです。 GLEW自体は部分的なサポートを有効にすることもでき、glutInitを呼び出す前に glewExperimental = GL_TRUE;を追加することで行えます。
今私たちのプログラムはさらにメンテナンスしやすくなっていますが、やっていることは以前とまったく同じです! そういうわけで透明度でちょっと実験しながら、 "昔のテレビ "のエフェクトをつけて三角形を表示してみましょう。
まず、GLUTをアルファといっしょに初期化します:
その後、OpenGLで透明度(デフォルトではオフです)を明示的に有効にします:
そして最後に、フラグメントシェーダを変更し、アルファの透明度を定義します:
mod と floor は一般的な数学演算子で、偶数か奇数のどちらのラインにいるかの判断に使用しています。 したがって、2つに1つラインが透明になり、他は不透明になります。
OpenGLプログラミング/モダンOpenGL チュートリアル 03

素の座標を超えるものがプログラムで必要になるかもしれません。 例えば:色。 OpenGLにRGBカラー情報を渡してみましょう。
私たちは座標を渡すときに attributeを使用してきましたが、そのように色のための新しい属性を追加することができます。 私たちのグローバルを変更してみましょう:
そして init_resources:
今 onDisplay処理手続の中で、3つの頂点のそれぞれについて、1 RGBカラーを渡すことができます。 私は黄色、青、赤を選びましたが、自由にあなたの好きな色を使用してかまいません :)
関数の最後で、属性に関しては完了したと、OpenGLに一度伝えます:
最後に、頂点シェーダでも、それを宣言します:
この時点で、プログラムを実行すると、次のようになります:
まだv_colorを使用していなかったためです。
問題は:フラグメントシェーダで色をつけたいのであって、頂点シェーダではないのです! 今からやり方を見ていきましょう ...
属性を使用する代わりに、 varying 変数を使用します。 それは次のようなものです:
つまり2つのシェーダ間の通信チャネルです。 それが補間される理由を理解するために、例を見てみましょう。
新しいvarying、たとえば f_colorを、両方のシェーダで宣言する必要があります。
triangle.v.glsl で:
そして triangle.f.glsl で:
(注:GLES2を使用している場合は、下記の移植性のセクションを確認してください。)
結果を見てみましょう:
ワオ、実際に3色以上になっています!
OpenGLが各画素の頂点の値を補間しています。 これが{0}varying{/0}という名前の理由です: 各頂点ごとに変化し、そしてさらに各フラグメントごとに変化します。
Cコードではvaryingを宣言する必要はありませんでした - Cコードとvaryingの間のインターフェイスがないからです。
glVertexAttribPointer関数をより良く理解するために、ひとつのC配列のなかに両方の属性を混在させてみましょう:
glVertexAttribPointerの第5要素は strideで、属性の各セットがどれくらい長さなのかをOpenGLに伝えます - この場合には浮動小数点数で5です:
ちょうど同じように動作します!
注意点として、色に関してのものは配列の3つめの要素で始まり (2 * sizeof(GLfloat))、最初の色の場所がその最初の要素の{1}オフセット{/1}になります。
なぜ (GLvoid*)なのでしょう ? お見せしたように、OpenGLの初期のバージョンでは、ポインタをCの配列に直接渡すことが可能でした(バッファオブジェクトではなく)。 これはもう廃止されていますが、 glVertexAttribPointer プロトタイプは変わらず残っているので、まるでポインタを渡すようなことをしますが、本当はオフセット渡しています。
娯しみのための代替案:
最初のカラーオフセットを指定するための offsetof の使い方に注意しましょう。
attribute変数の反対は、 uniform 変数です:すべての頂点で同じになります。 Cコードからそれらを定期的に変更できることに気をつけましょう - しかし、頂点のセットを画面上に表示されるときはいつでも、uniformは一定です。
Cコードから三角形のグローバル透明度を定義したいとしましょう。 属性と同様に、それを宣言する必要があります。 Cコードのグローバル:
次にCコードでそれを宣言します(プログラムをリンクした後の状態で):
注:シェーダコード内の特定の配列要素を、 uniform_name、例えば "my_array[1]"などでターゲットすることもできます !
加えて、uniformにおいて、varyingでない値を明示的に設定します。 さあ、 onDisplayでリクエストして、三角形の不透明度をごくわずかにしましょう:
今、この変数をフラグメントシェーダで使用することができます:
注:コード内でuniformを使用しない場合、 glGetUniformLocationはそれを認識せず、失敗します。
前のセクションでは、GLES2が精度のヒントを必要とすることを述べました。 これらのヒントは、データにどのくらいの精度を求めるのかをOpenGLに伝えます。 指定できる精度は:
例えば、 lowpは色に使用されることが多く、そして頂点には highp の使用を推奨します。
各変数の精度を指定することができます:
または、デフォルトの精度を宣言することもできます:
残念ながら、これらの精度のヒントは、従来のOpenGL 2.1では動作しないので、それらをインクルードするのはGLES2の場合のみにする必要があります。
GLSLにはCプリプロセッサに似たプリプロセッサが含まれています。 #define や #ifdefのようなディレクティブを使用することができます。
フラグメントシェーダだけは、浮動小数点において明示的な精度を必要とします。 精度は頂点シェーダでは暗黙的に highpになります。 フラグメントシェーダでは、 highpを使用できない場合があり、これは GL_FRAGMENT_PRECISION_HIGH マクロを使用してテストできます 。
私たちはすでに、 create_shaderユーティリティ関数を通じてマクロ処理ディレクティブを先頭に追加しています:
シェーダーローダーを改善してGLES2のデフォルトの精度を定義することもでき、そしてOpenGL 2.1では精度の識別子を無視することもできます(なので、必要に応じて特定の変数の精度を設定することもできます):
エラーメッセージを表示する際に、GLSLコンパイラはその行数のうちのこれらの前に付加された行をカウントすることに留意してください。 残念なことに、#line 0に設定しても、このコンパイラ行カウントはリセットされません。
さて、透明度を行ったり来たり変化させることができれば、かなり素敵です。 これを達成するために、
main内で、 "idle"関数を glutDisplayFunc(...)の後に宣言しましょう:
新しい idle関数を追加しましょう
また、 onDisplayでglUniform1fの呼び出しも削除しましょう。
最後に、Cのmathライブラリの使用を宣言する必要があります:
そしてMakefileの中で:
コンパイルして実行しましょう ...
私たちは最初のアニメーションにたどりつきました !
OpenGLの実装は一般的に、物理画面のバッファを更新する前に、画面の垂直リフレッシュを待ちます - これは垂直同期と呼ばれています。 その場合、三角形は毎秒60回(60 FPS)レンダリングされます。 垂直同期を無効にした場合、三角形を連続的に更新するようになり、その結果プログラムのCPU使用率が高くなってしまいます。 垂直同期には、視点の変更を使用してアプリケーションを作成するときに再び出会います。
高等学校工業 原動機/内燃機関の原理

クランク機構などの回転機構につながったピストンの位置について、そのピストンに膨張・圧縮などの力が加わっても、クランクへの回転トルクとして寄与しない位置にある状態を死点(してん、dead center)という。 クランク機構などの回転機構につながったピストンがシリンダ内のもっとも奥に押し込まれ、クランク軸側から遠い状態を上死点(じょうしてん、top dead center,略称はTDC)という。 ピストンがシリンダ内のもっとも手前側に引き出されクランク軸側に近い状態を下死点(かしてん、bottom dead center略称はBDC)という。 ピストンが上死点から下死点へと移動する距離を行程(こうてい、stroke)という。行程という言葉は別の意味にも用いられる事があるので、場合によっては区別のため、上死点から下死点までのピストンの移動距離のことを、「ピストン行程」とか「行程距離」などと呼ぶ場合もある。
ピストンが上死点から下死点へ移動するまでの間に、ピストンが押しのける容積を行程容積という。ピストン内の気体が排気弁などから排出される際、その気体の容積を、行程容積に換算した値を排気量という。一般に排気量は行程容積に等しい。
ピストンの断面積を A として、上死点から下死点までの距離を S とした場合、行程容積 V_s は次の式になる。
なお、内燃機関などの燃焼機関で排気量という用語を用いることが多いが、燃焼機関でなくてもピストンが押しのける容積に排気量という言葉を用いる場合がある。たとえば気体用のポンプなどで排気量という言葉を用いる場合がある。
ピストンが上死点にあるときに、シリンダ内に残っている隙間の容積をすきま容積という。内燃機関の場合は、すきま容積のことを燃焼室容積ともいう。内燃機関では、ピストンが上死点にあるときのシリンダ内の残りの空間のことを燃焼室という。 行程容積とすきま容積を合わせた容積をシリンダ容積という場合がある。 行程容積にすきま容積を足した容積を、すきま容積で割った値を圧縮比(compression ratio)という。
圧縮比の式について
としたとき、圧縮比εの式は
となる。圧縮比は、ガソリン機関では4~10の程度であり、ディーゼル機関では12~24の程度である。 ディーゼル機関では圧縮点火という仕組みから圧縮比がガソリン機関よりも大きくなる。
科目「機械設計」でも、自動車以外の一般のクラッチを扱う。wikibooksの本科目「原動機」でのクラッチの説明は、主に自動車などの内燃機関のクラッチについて説明をすることにする。
クラッチとは、エンジンで発生した動力(トルク)を、変速機(トランスミッション)以降の駆動軸へと伝えるために、機構の接続と遮断などを行う断続装置である。クラッチの取り付け位置は、通常は、エンジンとトランスミッション(変速機)の間に取り付けられている。
クラッチがつながっている状態では、エンジンの力が トランスミッションに伝わるので駆動ができる。 クラッチが切り離されている状態では、エンジンの力がトランスミッションに伝わらないので駆動がされない。 クラッチは、エンジンの始動や変速レバーの操作などで使われる。エンジンでは一気に負荷が掛かるとエンジンが停止してしまうので、徐々に負荷をかけていく必要がある。そのため、エンジンの始動や、レバー操作の際に、クラッチが必要になる。
高等学校工業 原動機/ガソリン機関

燃料のガソリンの燃焼方法は、電気火花により火花点火をする方式である。ガソリン機関(gasoline engine)では、クランク機構を用いて、シリンダから回転力を取り出している。 エンジンの構造には、4サイクル機関(four cycle gasoline engine)と2サイクル機関(two cycle gasoline engine)との2方式がある。
圧縮比は、ガソリン機関では4~10の程度である。
4ストロークガソリン機関(four cycle gasoline engine)の作動は、吸気・圧縮・膨張・排出の4行程である。 クランク軸の2回転で吸気・圧縮・膨張・排出を行う。 吸気弁の開閉により、混合ガスの吸気を行う。排気弁の開閉により燃焼ガスの排出を行う。 弁の開閉タイミングの制御は、カムまたはコンピュータ制御で行われている。点火タイミングの制御はコンピュータ制御などで行う。
4ストローク機関の行程はつぎの4行程からなる。
吸気弁が開く時期は、シリンダ内のピストンが上死点(最も押し込まれた位置)付近の位置から、下死点(もっともピストン内が広くなる位置)までの間の時期に、吸気弁が開く。吸気によって空気と燃料の混合気体を吸い込む。吸い込んだ後に弁は閉じて、圧縮行程に移る。
吸気弁を閉じ、そしてピストンがシリンダ内を圧縮する。(ピストンが下死点から上死点へと向かう。) この行程の間は、吸気弁、排気弁は閉じたままである。
圧縮行程の終わりの、ピストンが上死点に達する直前または直後に、電気火花で混合気に点火して燃焼させる。燃焼ガスの膨張により推進力を得る。そのシリンダ内圧の圧力でピストンを押してクランクを回し仕事をする。この行程では、吸気弁、排気弁は閉じている。
膨張行程の終わりに排気弁を開く。ピストンの回転に伴い、燃焼済みのガスが押し出される。 排気行程が終わると共に、排気弁を閉じる。この行程では、吸気弁は閉じている。
排出行程のあと、再び吸気・圧縮・膨張(爆発)・排出の行程が、以上と同様に行われる。 上死点および下死点での、クランクの回転の持続はフライホイールにより蓄えられた回転エネルギーに頼る。
クランク軸の1回転で吸気・圧縮・膨張・排気を行う。 シリンダ下部に穴を2個、設け、それぞれ吸気口および排気口としたもの。 吸気を行うときには、排気口も開かれており、吸気した気体によって燃焼済みガスの排気も押しのけて追い出す。この吸気で排気を追い出す仕組みを掃気(そうき、scavenging)という。掃気は、2サイクル機関の特徴の一つである。
2ストローク機関では、ピストンが上死点に近づくとピストン自身で吸気口および排気口を閉じる構造になっている。
ピストンが下死点にある時に、吸気口が開かれ、混合ガスが入る。 そのまま、クランクの回転が進みピストンが上死点へと進むと、吸気口と排気口がピストンによって塞がれる。 混合気の点火時期は、ピストンが上死点の近くにいるときに点火され、混合気が燃焼・膨張する。
混合気の燃焼による内圧の上昇によってピストンが押され、膨張工程となる。ピストンがクランク軸側へ移動したことにより、排気口と続いて吸気口が開いて掃気をして、圧縮行程へと移る。
シリンダは、シリンダブロックとシリンダヘッドから、なっている。
シリンダブロックは、ピストンが煽動する部分の構造部分である。シリンダヘッドは、すきま容積(燃焼室)の構造部分である。 シリンダブロックとシリンダヘッドとの間のガス漏れを防ぐため、ガスケットを挟んで、シリンダブロックとシリンダヘッドを取り付ける。
耐摩耗性が要求される。シリンダ内面に、シリンダライナという耐摩耗性のある部品(材質は、たとえばクロムめっき)を圧入する場合がある。
ピストンは金属製である。 ピストンには、金属製のピストンリングが3本から4本ほど、ピストンに取り付けるための溝がある。上部の2~3本はコンプレッション・リング(圧縮リング、compression ring)である。気密性を保つためのリングである。 下部の残りの1~2本のリングはオイルリング(oil ring)である。シリンダ壁との間に油膜を作るとともに、余分な油が燃焼室に入らない様に、かき落とすためのリングである。
クランク軸とピストンとをつなぐための部品である。コネクティング・ロッドは金属製である。
膨張行程でえられた回転力の一部を蓄える部品。回転運動を蓄えて、回転運動を円滑に行う。はずみ車はクランク軸に取り付けられている。
4行程機関の吸気と排気は、吸気バルブや排気バルブの開閉を通して行う。 弁の開閉時期の制御は、クランク軸と連動したカム機構やベルト機構などで制御されている。
シリンダ上方に吸気弁、排気弁を備えた頭上弁式のものをOHV式(overhead valve)という。
ノッキングの対策の際、オクタン価が重視される。オクタン価の大きい燃料ほど、ノッキングを起こしにくい。 オクタン価(octane number)とは、ガソリン成分中でイソパラフィン系のイソオクタンのオクタン価を 100として、ノルマルパラフィン系のノルマルヘプタンのオクタン価を 0 として、この両方を様々な割合で混合した標準試料と同じアンチノック性をオクタン価で表す。イソオクタンの方がガソリンエンジンでは、耐ノック性が高い。
高等学校工業 原動機/ディーゼル機関

ピストンによって空気を圧縮し高温高圧の空気とし、シリンダ内の高温空気に燃料を噴射して自然着火させる機関をディーゼル機関 (diesel engine) という。ディーゼル機関では、燃料の点火は行われない。燃料としては、軽油・重油などが用いられる。 作動行程は、吸気(intake) ・ 圧縮(compression) ・ 膨張(power) ・ 排気(exhaust)からなる。
圧縮によって、おおむね、シリンダ内の気体は、以下の様な状態になる。
4サイクル機関と2サイクル機関とが、ディーゼル機関には、ある。
4サイクルディーゼル機関の行程を示す。
ピストンが上死点から下死点へと向かう間に、吸気弁が開き、空気だけをシリンダ内に吸い込む。空気の吸込み後、吸気弁を閉じる。排気弁は、この行程では、閉じたままである。
吸気で弁が閉じた後、クランクの回転により、下死点から上死点へとピストンが移動して、シリンダ内の空気が圧縮され、高温・高圧の状態になる。排気弁は、この行程の間は、閉じたままである。
高温のシリンダ内の空気中に燃料を噴射する。シリンダ内は高温なので、燃料は自然着火して、混合気が膨張する。ピストンは下死点へと押し下げられる。 吸気弁は、この行程では、閉じたままである。排気弁は、この行程では、閉じたままである。

排気弁を開く。燃焼ずみのガスが排気される。クランクの回転により、ピストンは下死点から上死点へと移動するので、ピストンの移動によって、排気が押し出される。吸気弁は、この行程では、閉じたままである。 排気が終わった後に排気弁を閉じて、吸気行程へと移る。

点火しないディーゼル機関でもノッキングは起こる。この場合は、点火が遅いことが原因である場合が多い。 セタン価の高い燃料が、ディーゼル機関では要求される。「オクタン価」は、ガソリンエンジン用の燃料の価数なので、ディーゼル機関ではオクタン価は用いられない。
ディーゼルエンジンで用いる軽油や重油では、ガソリンエンジンとは逆に、自己着火のしやすさが要求される。
セタン価(Cetane number)とは、耐ノック性が比較的高いn-セタンのセタン価を100として、耐ノック性が低いイソセタンのセタン価を15とした試料の軽油と、同一の耐ノック性を示すようなセタンとイソセタンとの混合物中に含まれるセタンの割合(容量比)を、その試料のセタン価とする。一般に、セタン価は45以上は必要である。
高等学校工業 機械設計/機械要素と装置/カム

カム(cam)は、回転軸に取り付けられる機械要素の一種である。形が非対称な輪郭を持つ板状の物あるいは立体形状の物で、カムを回転させることで、カムに接触したフォロワ(follower)と言われる機械要素に、様々な運動をさせる機械要素である。
カムの側を、他のものを動かすことから、原動節あるいは原節という。フォロワのように他の原動節の動きによって、動きを与えられる側を、従動節あるいは従節という。
カムとフォロワなどをまとめて、カム機構やカム装置などと呼ぶ。カムの輪郭曲線を平面曲線で表せるものを平面カムという。輪郭曲線が平面内に無く、輪郭曲線が3次元曲線になるカムを立体カムという。
平面カムのうち、回転板をカムとした物を板カムという。 フォロワの先端には、摩耗を減らすため、ころを付ける場合がある。
従動節を往復運動させるカム機構を直動カム(translation cam)という。 従動節に特殊形状を持たせたカム機構を反対カム(reverse cam)や逆カムなどという。
円筒に溝を彫ったカム。円柱カムともいう。
円錐に溝を彫ったカム。
球に溝を彫ったカム。
円筒などの回転体の端面が特殊な形状のカム。
回転軸に対して、斜めに板を取り付けたカム。
グラフによって、カムの回転角を横軸の値で表し、フォロワの動きを縦軸の値で表したグラフのことをカム線図(cam diagram)という。左図の場合、線図のT1とT3に対応する時期に、フォロワは動き、T2とT4ではフォロワは静止する。
高等学校工業 機械設計/機械要素と装置/圧力容器

おもに金属製の容器を対象に考える。 ガスタンクなど、圧力のある流体を容器に詰めたものを圧力容器という。 容器に詰める流体の種類は、気体や液体、蒸気などである。 実際の容器には、バルブなどが付いていて、バルブを開くことで、内部の流体を取り出す。なので、バルブを閉めることで、内圧を高いまま維持できるなら、一般には圧力容器と見なす。 なお、容器の外側から圧力がかかる場合も、圧力容器という場合もあるが、今回の考察では外側からの圧力は考えないとしよう。 また、なお、ボイラーの規格で第一種圧力容器などが規定されているが、今回の本ページの解説では、工業規格には立ち入らず、圧力容器の定義は素朴な直感的定義とする。
内圧によって容器にかかる応力が均一に見なせる場合の容器を薄肉容器(うすにくようき)という。 「薄肉」容器と言っても、容器が壊れない程度には厚さを持っている。この場合の薄肉とは、応力が均一に見なせるという意味である。 容器の壁の内側のほうが外側よりも応力が大きいので、厚さが大きくなってくると、応力は、だんだん一定とは見なせなくなってくる。このような応力が一定とは見なせないほど厚さが大きい場合は厚肉容器(あつにくようき)という。
では、内圧と応力の関係を考えよう。まず薄肉容器から計算をする。 厚肉容器の応力の理論も、薄肉の場合の応力の理論が、理論的基礎になっている。なので、まず薄肉容器の応力の理論を理解する必要がある。

具体的には、金属管の円形の直管を想定して頂きたい。直管部の端はバルブなどで閉じてるとしよう。 管の大きさは実験室レベルとして、管の軸の向きは水平方向の向きとしよう。 さて、円筒の長さは管内径に対しては、十分に長いと仮定する。 また、内圧によるひずみ変化が無視できるほどには、応力が小さいとする。(管の垂直方向の上部と下部との重力差の影響を考えると、計算がやっかいなので。)
こう仮定すれば、応力は半径方向のみになる。応力の方向は、管壁に垂直であり,円筒管だから、つまり管内壁の各部に、半径方向の向きに応力がかかる。 バルブにかかる応力の影響は、管が管径に対して十分に長いと仮定してるので、バルブ部分は応力計算から無視できる。
内壁に掛かる力の方向を考えると、力はベクトルであり向きを持っているから、これを考慮して、内壁に掛かる合計の力を考えないといけない。そして、その合計の力が応力に関わる。(合計の力の厳密な証明は、最終的には、管の中心を通る断面と交わる管の面積を考える必要がある。この結果の算出方法として、三角関数やベクトルなどを駆使して、管壁にかかる力のベクトルを積分して計算する方法もあるが、高校レベルをやや超えるので、本節では、結果の計算法を用いるとする。)
さて、管の長さをL[mm]とする。 まず、合計の力を考えるには、管の中心を通る断面と管内部の交わる面積DL[mm]に、外部との差圧の圧力p[MPa]を掛けた値pDLになる。(pDLになる理由は、証明がベクトルの積分を用いるので省略。代わりに、直感的に考え、説明図などを書籍や外部サイトなどで探して、納得いくまで直感的に考えよ。) 合計の力F[N]は
である。 管の断面積は、管の厚さをt[mm]として、断面積は、
である。 応力σ[MPa]は、断面積2tL[mm]に均一に掛かると仮定して、(薄肉なので、均一に応力が掛かると仮定できる。)
である。
管の厚さに関する、JIS規格の配管に関する規格であるスケジュール番号(Sch)は、このような応力計算を元に定義されている。 なお、実務の際は、安全率を考慮して、応力の計算結果よりも大きめの耐久性を持たせておく必要のあることを、忘れないように。

軸方向の応力の考察は、円周方向の考察では省略したが、実は、簡単に計算できる。 まず、軸方向の応力を考えるには、管の端部は容器と一体になっていないといけない。この場合、容器からの流体の取り出し用のバルブは軸端部以外の、端部から離れた円周上の箇所に、バルブなどをつけることになる。 応力集中については、計算の簡単化のため、今回は応力集中は考えないとする。
さて、圧力が容器におよぼす軸方向の合計の力F[N]は、 軸方向の内径の断面積 π D 2 / 4 {\displaystyle \pi D^{2}/4} に、圧力p[MPa]を掛けたものになる。 軸方向の応力で考える断面積は「軸方向の断面積」を考えることに注意。前の節の円周方向の応力で考えた「断面積」は、円周方向の断面積なので、混同してはならない。 さて、軸方向の合計の力F[N]を式で表せば、
である。
軸方向の断面で考えた管の断面積は、(これは内径の断面積でなく、管の断面積である。混同しないように注意。)
である。(管の厚さが薄いので、断面積は、管の内周に厚さを掛けた値で近似できるとする計算法が、薄肉圧力容器の軸方向応力での、一般的な計算方法である。)
こうすれば、軸方向の応力σtは、
である。 実務の際は、安全率を考慮して、応力の計算結果よりも大きめの耐久性を持たせておく必要のあることを、忘れないように。
圧力容器の実際の設計では、応力以外にも、疲労強度や熱応力など、様々な検討項目および検証項目がある。内部流体の種類によっては、化学腐食などの影響も検証しなければならない。
高等学校工業 機械設計/機械要素と装置/ベルト

ベルト伝導は、離れた2軸をつなげて便利である。平ベルトには滑りがある。
ベルトとプーリにに歯をもたせ、噛みあうようにして滑りを防いだ、歯付ベルトがある。
ベルトの掛け方には、平行がけの他に、たすきがけ(「十字がけ」とも言う)などがある。
平行掛けの場合、2個のプーリの径をそれぞれD1[mm]およびD2[mm]とすると、ベルトの長さLと巻きかけ角度θは、以下の式になる。φはプーリの共通接線が、プーリの中心を通る線となす角度である。2個のプーリのプーリ中心間の距離をa[mm]とする。すると、

arcsin {\displaystyle \arcsin } とは三角関数 sin {\displaystyle \sin } の逆関数である。 つまり、
のときに、
という式で、 arcsin {\displaystyle \arcsin } は定義される。 sinの逆関数が sin − 1 {\displaystyle \sin ^{-1}} と表記される場合もある。
長さの近似式として、上の長さの式の中にあるcosの、べき級数展開の2次の項までの近似式を用いて、ベルトの長さの近似式を用いる場合もある。cosの2次までの展開式は、
である。長さの近似式は、結果的には、
となる。
OpenGLプログラミング/モダンOpenGL チュートリアル 04

このチュートリアルでは、変換行列の世界に飛び込んでいき、それで三角形を移動したり、拡大縮小したり、回転させることができるようになります。
テンプレート:Wikibooks ここにあるのが行列を扱うときに覚えておくべきひとかじりです:
これらの乗算を行うためには、数学ライブラリが必要になります。 シェーダには内蔵の簡単な行列演算用のサポートが付属しますが、通常はCコードから行列を操作する必要があります シェーダが各頂点ごとに実行されることから、それはまた、より効率的でもあるので、事前に行列を計算する方が良いでしょう。
このチュートリアルでは、 OpenGL Mathematics (GLM) ライブラリを使用し、これはC++で書かれています。 GLMはGLSLと同じ規則を使用する傾向があり、そのためスタートしやすくなっています。 その資料では、非推奨のOpenGL 1.xやGLU関数を置き換える、 OpenGL 1.x and GLU functions, such as glRotate, glFrustum , gluLookAt, なども説明していて、既にそれらを使用しているのであれば役に立つはずです。
代替案も存在し、 libSIMDx86などがあります (ちなみに、x86以外のプロセッサ上でも動作します )。 あなた自身の行列コードを書くこともでき、それほど長くはないので、 mesa-demos-8.0.1/src/egl/opengles2/tri.cという例をMesa3D demosで見てみましょう。
注:私たちはC++を使用しているため、私たちのプログラムも同様にC + +切り替える必要あります - 申し訳ありませんが、最初からそれを行うためには最初のチュートリアルを編集する必要があります。 実際には、 triangle.c を triangle.cppへ名前を変更する必要があるだけです。
GLMは、ヘッダのみのライブラリなので、Makefileを変更する必要はなく、ヘッダが標準パスにインストールされてさえいればかまいません。 DebianやUbuntuのもとでGLMをインストールするには:
これでもうGLMのヘッダを追加することができます:
私たちの変換行列は、3Dの頂点のためのものです。 たとえ現時点で2Dでも、Z = 0の3Dポイントとして三角形を描いていきます。 いずれにしても、次のチュートリアルでは3Dオブジェクトに移っていきます :)
triangle.cppのOpenGLに、これ(頂点ごとに3つの要素)を定義してみましょう:
そのあと, in init_resources()内で
onDisplay()内で頂点配列の設定を変更します
'attribute_coord2d'のもうひとつの出現箇所もそれに応じて置き換えて、新しい座標を使用するようシェーダーに伝えます:
GLMには、回転、平行移動、拡大縮小の行列を計算する組み込み関数が付属しています。 変換行列を onIdle()に追加して、変換と組み合わせて順回転を計算させてみましょう:
前のチュートリアルで見たように、新しいuniformを、 glUniformMatrix4fvで追加します :
GLMを使用しない場合、次のように、GLfloat[16]配列へのポインタを渡すだけで十分です:
頂点シェーダはちょうど上で見たように行列を頂点に掛けなければなりません:
まだアスペクト比の問題があることに注意しましょう(16:9モニタのフルスクリーンでテレビ番組を見ているような)。 次のチュートリアルでは、モデル- ビュー-投影行列を用いて、これを修正していきます。
行列を逆の順序で適用することについて述べたことを覚えているでしょうか? ? この例では、まず回転させ、つぎに平行移動させています。
逆回りの方法でそれをやってみましょう:三角形を移動させた後に回転させることになり、原点を中心にではなく自身の中心の周りに回転させることを意味します。
OpenGLプログラミング/モダンOpenGL チュートリアル 05

三角形のアニメーションも楽しいですが、私たちがOpenGLを学んでいるのは3Dグラフィックスを表示するためです。
キューブを作成してみましょう!
キューブは、3D空間では8頂点です(前面に4点、背面に4点)。 triangle を cubeにリネームしてもよいでしょう。 また fade バインディングもコメントアウトしましょう。
さてキューブの頂点を書いてみましょう。 この写真のように(X、Y、Z)座標系を配置します。 これらをオブジェクトの中心に関連づけて書いていきます。 クリーンになり、後でその中心の周りに立方体を回転させることができるようになります:
注:ここで、Z座標はユーザーの手前向きです。 BlenderではZが上(高さ)のような他の規約を見ることもあるかもしれませんが、OpenGLのデフォルトはYが上です
黒いカタマリよりは良いものを表示するために、色も定義しましょう:
グローバルバッファのハンドルも忘れずに: :
私たちのキューブは6つの面を持っています。 2つの面が頂点を共有することもあります。 そのうえ、面を2つの三角形の組み合わせとして記述します(合計で12の三角形)。
そこで、elementというコンセプトを紹介します: glDrawElementsを、 glDrawArraysの代わりに使用します。 これは、頂点配列を参照するインデックスの集合をとります。 glDrawElementsを使って、順序を任意に指定でき、さらに同じ頂点を複数回指定することもできます。 私たちは、これらのインデックスをIndex Buffer Object(IBO)に格納します。
すべての面を同様の方法、ここでは反時計回りで指定したほうがよいのは、テクスチャマッピング(次のチュートリアル参照)と照明(三角形の法線が正しい道を指し示す必要があるので)で重要となるからです。
再びバッファオブジェクトを使用していますが、 GL_ARRAY_BUFFERの代わりに GL_ELEMENT_ARRAY_BUFFER を使用していることに注意してください。
私たちの立方体を描画するために、 onDisplay内でOpenGLに指示することができます:
glGetBufferParameteriv を使用してバッファサイズを取得します。 この方法では、 cube_elementsを宣言する必要はありません。
今、正方形の前面を見ることができますが、キューブの他の面を見るには、それを回転させる必要があります。 前面の三角形の1つ(または両方!)を除去することによって覗き見ることもできます。 :)
今までは、オブジェクトの座標で作業し、オブジェクトの中心を指定していました。 複数のオブジェクトを組み合わせて、3Dの世界で各オブジェクトを配置するには、変換行列を計算することになり、それには:
また、これはアスペクト比の問題の面倒もみてくれます。
目標は、MVPと呼ばれるグローバル変換行列を計算することで、各頂点にそれを適用することで画面上の最終的な2Dのポイントを取得します。
2Dスクリーン座標は[-1,1]区間であることに注意してください。 これらを[0、screen_size]に変換するために第4のマトリックスでないステップがあり、 glViewPortによってコントロールします。
歴史上の注意:OpenGL 1.xは、 glMatrixMode(GL_PROJECTION) と glMatrixMode(GL_MODELVIEW)を介してアクセス可能な、2つの組み込み行列を持っていました。 ここでは、それらを置き換えて、そのうえでカメラを追加しています:)
私たちのコードにonIdle 関数を追加し、前のチュートリアルの fade uniform を更新しましょう。 mvp uniform を代わりに渡します。
Start: 各フェーズの開始時には、単位行列という、まったく変換を行わない行列があり、これは glm::mat4(1.0f)を使用して作成します。
Model: キューブを少し背景のほうに押して、カメラと混ざらないようにします:
View: GLM には gluLookAt(eye, center, up)の再実装も用意されています 。eyeはカメラの位置で、centerはカメラが指す場所、upはカメラの上側です(傾いた場合のため)。 少し上方にあるオブジェクトを中心にもってきて、カメラとまっすぐにしてみましょう:
Projection: GLM には gluPerspective(fovy, aspect, zNear, zFar)の再実装も用意されています。 fovyはレンズの角度、aspectは画面のアスペクト比(幅/高さ)、zNearとzFarはクリッピング平面(最小/最大の深さ)で、両方とも正の値、zNearは通常ゼロに等しくはない小さな値です。 見える必要があるのは正方形までなので、zFarには10を使用することができます:
screen_width と screen_height はウィンドウのサイズを定義するための新しいグローバル変数です:
結果:
それをシェーダに渡すことができます:
そしてシェーダ内で:
オブジェクトをアニメーションにするために、モデル行列の前に追加の変換をシンプルに適用することができます。
キューブを回転させるために、 onIdle内に次のものを追加することができます :
伝統的な飛行回転キューブができました!
GLUTウィンドウのサイズ決定のサポートには、 glutReshapeFuncを使用することができます:
注:サイズ変更時にシーンがびくつく傾向があります - それがどこに起因するのかは私には解明できませんでした。