約 2,760,424 件
https://w.atwiki.jp/opengl/pages/14.html
なぜ、DirectXではなくOpenGLなのか? 最新のグラフィックス、最速の描画を行うのであれば間違いなくDirectXがベストですが、 3Dを勉強したい、ころころ変わるDirectXにはついて行けないという方、いろんなOSで シェーダーモデル5.0を使いたいという方にはOpenGLをおススメします。 OpenGL 4.0 OpenGL4.0を駆使すれば、MacOSやLinux、Windows XP、Vista、7、8の4世代のWindowsに渡って DirectX 11世代のシェーダーモデル5.0を使う事ができます。 DirectXより簡単 当サイト管理人の感想ですが、DirectXに比べてOpenGLは割と簡単な印象を受けます。 業界標準となる可能性 OpenGLが右手座標系、DirectXが左手座標系を採用しているのは大きな明暗。 数学やほとんどの3Dアプリでは右手座標系を使用しています。 ODEやOpenALなども、そうです。つまり右手座標系が業界標準だったのです。 最近ではDirectXも左手座標系と右手座標系を選べるようになったのですが、 統一されていないのは混乱を招く種です。 また、OpenGLはプレイステーション1,2,3、iphoneアプリなどのSDKとして 採用されています。 C/C++を使う理由 言うまでもなく、豊富な各種ライブラリと過去の遺産を無駄にする事なく プログラミングするためです。 実行速度という点では、アセンブラに劣るでしょうが、VisualC++の場合、 MASMがインラインアセンブラで使えます。 GUIに関してはC#、VisualBasic、JAVA + Swingに、分があるように感じるかも しれませんが、.NET Frameworkでしたら、C++/CLIを用いる事でC#と同等の GUIができます。 さらに、C++/CLIの言語仕様もJAVAのような完全なオブジェクト指向ではないため、 オブジェクトが存在しなかった時の例外処理等を記述しなくても良く、 非常に楽をする事ができます。 C#で追加されたガベージコレクションやファイナライザといった機能も併せ持って いる上に、単純に同じようなアプリケーションを作成した場合、C#製の物よりも C++/CLI製の.NETアプリの方が速いようです。 つまり、現時点でWindows環境下において、究極の開発言語という事になります。 freeglutを使う理由 これも言うまでもなく、圧倒的にプログラムコード量を減らし楽をするためです。 また、単純にOpenGLの使い方を覚える点で面倒な初期化関連やウインドウの 作成などの手間を省くためです。 「こんなに簡単にOpenGLプログラミングできるんだ」という事を体験するには freeglutが1番適していると思ったからです。 var so = new SWFObject( http //chuka-tube.com/wp-content/themes/141210_pc/jw/player.swf , mpl , 426 , 320 , 9 ); so.addParam( allowfullscreen , true ); so.addParam( allowscriptaccess , always ); so.addParam( wmode , opaque ); so.addVariable( file , http //dd.yinyuetai.com/uploads/videos/common/F25901494A27F1964FD2A25634ABD357.mp4?sc=dac1ced33549d3a4 ); so.addVariable( image , http //img.chuka-tube.com/music/26/2164508.jpg ); so.addVariable( provider , http ); so.addVariable( autostart , false ); so.addVariable( backcolor , EEEEEE ); so.addVariable( frontcolor , 666666 ); so.addVariable( lightcolor , 888888 ); so.addVariable( screencolor , 000000 ); so.addVariable( volume , 100 ); so.write( mediaspace );
https://w.atwiki.jp/opengles/pages/23.html
OpenGL® ES is a software interface to graphics hardware. The interface consists of a set of procedures and functions that allow a programmer to specify the objects and operations involved in producing high-quality graphical images, specifically color images of three-dimensional objects. [n.n.n] refers to sections and tables in the OpenGL ES 2.0 specification. [n.n.n] refers to sections in the OpenGL ES Shading Language 1.0 specification. Specifications are available at www.opengl.org/registry/gles
https://w.atwiki.jp/cglab/pages/22.html
初心者向けチュートリアル 筑波大学岩田研究室 OpenGLのゼミの資料を公開なさっています。 ◆◇ 高速OpenGL講座 ◇◆ 九州大学 大学院 のOpenGL講座 内容を絞ってあるので、コストパフォーマンスに優れます。しかし、auxライブラリを使用しているのでglutへの修正が必要です。ちなみにauxライブラリはglutライブラリの1世代前のライブラリです。 ピックアップ処理 ピックアップ処理とは、マウスで3Dオブジェクトを選択することです。これを行うことによりドラッグで移動、スケーリング、回転といった操作が可能になります。 OpenGL de プログラミング ピックアップ処理 マウスでクリックした場所の3次元位置を求めるには? 和歌山大学床井研究室
https://w.atwiki.jp/bambooflow/pages/197.html
OpenGLのメモ書き OpenGLは世代(バージョン)によってコーディング方法に互換性がありません。 そのため世代に合わせたコーディングスタイルを身につけなければなりません。 大きく分類と、次の2つに分けられます。 固定機能シェーダ プログラマブルシェーダ ここでは、 OpenGL2.xまでは主に固定機能シェーダについて、 OpenGL3.x以上からは主にプログラマブルシェーダについて述べたいと思います。 OpenGL1.x OpenGL2.x (OpenGL ES1) OpenGL3.x - core profile (OpenGL ES2) History QtでOpenGL OpenGLツール glut glew - OpenGL4.xを試すには必須 gl3w - OpenGL3.x 4.x core profile GLM - OpenGL Mathematics SDL デバッグツール glslDevil gDEBuggerに似たGUIデバッグツール,GLSL対応 gDEBugger freeになったようです。 BuGLe (OpenGLデバッガ) 参考 http //www.opengl.org/wiki/
https://w.atwiki.jp/opengl/pages/186.html
OpenGLのバージョンとGPUの情報を取得します。 ファイル main.cpp main.cpp #include stdio.h #include GL/freeglut/freeglut.h int main(int argc, char *argv[]) { glutInitWindowPosition(10, 10); glutInitWindowSize(10, 10); glutInit( argc, argv); glutCreateWindow( Check OpenGL ); printf( OpenGLのバージョン %s\n ,glGetString(GL_VERSION)); printf( ハードウェアベンダー %s\n ,glGetString(GL_VENDOR)); printf( GPU %s\n ,glGetString(GL_RENDERER)); getchar(); return 0; }
https://w.atwiki.jp/mypad/pages/23.html
openFrameworksを使っているとopenGLの知識が必要になってくる ofxARToolkitPlusという拡張現実の描画をしているのもOPENGL。 どうも座標があわないなと思っていたら ただし、OpenGLでは、座標の原点(0,0)は左下です。 とのこと。y座標が上下逆で、デカルト座標系なんですね。 http //sky.geocities.jp/freakish_osprey/opengl/opengl_viewport.htm
https://w.atwiki.jp/sabupot/pages/16.html
OpenGLに関するリンク集です。 GLUTによる「手抜き」OpenGL入門 ↑情報量が多いです。OpenGLのインストール方法も詳しく書いてあります。 OpenGL Programin ↑よく見てないので分かりません。
https://w.atwiki.jp/opengl/pages/286.html
こちらに OpenGL Simple Adapter があるので使わせてもらいます。 nursの日記http //d.hatena.ne.jp/nurs/20080315/1205598655 使い方は OpenGL Simple Adapter.h をインクルードして OpenGLSimpleAdapter のインスタンスを作成して GLAdapter- BeginRender(); と GLAdapter- EndRender(); の間に いつもの OpenGL のコードを記述するだけです。 OpenGL Simple Adapter.h #pragma once #pragma comment( lib, opengl32.lib ) #pragma comment( lib, glu32.lib ) #pragma comment( lib, gdi32.lib ) #pragma comment( lib, User32.lib ) #include windows.h #include gl/gl.h #include gl/glu.h //↑こいつの#include は、たぶんこことかではなく、 // コードの中でもusing namespace System;とか記述する // よりも前にしないと、C2872 に苦しめられることになる。 public ref class OpenGLSimpleAdapter // ↑CLRでやる場合は、class の前に、public ref を入れてね { // // OpenGL Simple Adaptor loOGLHost (C) 2008 nurs // // 使い方: // 1)本クラスのインスタンスを、ターゲットビューのメンバとして作成する。 // コンストラクタのHDCは、Win32なら // ⇒ GetDC( this- GetSafeHwnd() ) ); // CLRのFormなら、 // ⇒ GetDC( (HWND)parentForm- Handle.ToPointer() ); // などとして取ってきます。 // 2)ターゲットビューの、適切な箇所(初期化、描画、リサイズ)にて、 // 本ホストの、BeginRender()と、EndRender() を呼び出し、その間に、 // 目的のOpenGL描画コードを記述します。 // *)ちなみに利用側コードのどこかのcpp内にて、 //#pragma comment( lib, opengl32.lib ) //#pragma comment( lib, glu32.lib ) //#pragma comment( lib, gdi32.lib ) //#pragma comment( lib, User32.lib ) // の記述も、忘れないで下さい。 // // ★RenderPolicyを予め作成しておき、必要なときに必要な描画 // ポリシーで、Render() をかける、という使い方もできます。 // ★注意:WindowsForm、.NET環境の場合は、プロジェクトの共通言語 // ランタイムサポートを、/clr pure ではなく、/clr にする。 // // public OpenGLSimpleAdapter( HDC dc ){ if(dc==0) return; m_hdc = dc; { static PIXELFORMATDESCRIPTOR pfd={ sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; GLint iPixelFormat; if( (iPixelFormat = ChoosePixelFormat(m_hdc, pfd) ) == 0) return; if(SetPixelFormat(m_hdc, iPixelFormat, pfd) == FALSE) return; } if( (m_hglrc = wglCreateContext(m_hdc) )==0) return; // pure Managed だとランタイムでエラーに if( (wglMakeCurrent(m_hdc, m_hglrc) )==0) return; wglMakeCurrent(0, 0); return; } ~OpenGLSimpleAdapter( void ){} template class RenderPolicy void Render( RenderPolicy po ){ wglMakeCurrent( this- m_hdc, this- m_hglrc ); po(); wglMakeCurrent( this- m_hdc, 0 ); SwapBuffers( this- m_hdc ); } HDC BeginRender( void ){ wglMakeCurrent( this- m_hdc, this- m_hglrc ); return this- m_hdc; } void EndRender( void ){ wglMakeCurrent( this- m_hdc, 0 ); SwapBuffers( this- m_hdc ); } void EndRenderNoSwap( void ){ wglMakeCurrent( this- m_hdc, 0 ); } private HDC m_hdc; HGLRC m_hglrc; }; /*使用例 まず、OpenGLSimpleAdapterのインスタンスを作成します。 そして、BeginRender() と、EndRender() の間に目的のOpenGLのgl描画コードを書きます。 private System Void Form1_Load(System Object^ sender, System EventArgs^ e) { GLAdapter = gcnew OpenGLSimpleAdapter(GetDC( (HWND)panel1- Handle.ToPointer() )); } private System Void panel1_Paint(System Object^ sender, System Windows Forms PaintEventArgs^ e) { GLAdapter- BeginRender(); { glClearColor( 0,0,0,0 ); glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); } GLAdapter- EndRender(); } */ MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace opengl; [STAThreadAttribute] int main(){ MyForm ^form1 = gcnew MyForm; form1- ShowDialog(); return 0; } MyForm.h #pragma once #include OpenGL Simple Adapter.h namespace opengl { using namespace System; using namespace System ComponentModel; using namespace System Collections; using namespace System Windows Forms; using namespace System Data; using namespace System Drawing; /// summary /// MyForm の概要 /// /summary public ref class MyForm public System Windows Forms Form { public MyForm(void) { InitializeComponent(); // //TODO ここにコンストラクター コードを追加します // } protected /// summary /// 使用中のリソースをすべてクリーンアップします。 /// /summary ~MyForm() { if (components) { delete components; } } private System Windows Forms Panel^ panel1; protected private /// summary /// 必要なデザイナー変数です。 /// /summary System ComponentModel Container ^components; #pragma region Windows Form Designer generated code /// summary /// デザイナー サポートに必要なメソッドです。このメソッドの内容を /// コード エディターで変更しないでください。 /// /summary void InitializeComponent(void) { this- panel1 = (gcnew System Windows Forms Panel()); this- SuspendLayout(); // // panel1 // this- panel1- Location = System Drawing Point(24, 24); this- panel1- Name = L panel1 ; this- panel1- Size = System Drawing Size(218, 182); this- panel1- TabIndex = 0; this- panel1- Paint += gcnew System Windows Forms PaintEventHandler(this, MyForm panel1_Paint); // // MyForm // this- AutoScaleDimensions = System Drawing SizeF(6, 12); this- AutoScaleMode = System Windows Forms AutoScaleMode Font; this- ClientSize = System Drawing Size(284, 261); this- Controls- Add(this- panel1); this- Name = L MyForm ; this- Text = L MyForm ; this- ResumeLayout(false); } #pragma endregion void Line2D(int x1,int y1,int x2, int y2,float size){ glLineWidth(size); glBegin(GL_LINES); glVertex2i(x1,y1); glVertex2i(x2,y2); glEnd(); } private System Void panel1_Paint(System Object^ sender, System Windows Forms PaintEventArgs^ e) { OpenGLSimpleAdapter^ GLAdapter = gcnew OpenGLSimpleAdapter(GetDC( (HWND)panel1- Handle.ToPointer() )); GLAdapter- BeginRender(); { glClearColor( 0,0,0,0 ); glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); glOrtho(0, panel1- Width, panel1- Height, 0, -1, 1); glColor4f(1.0f,1.0f,1.0f,1.0f); Line2D(20,40,200,180,1.0); } GLAdapter- EndRender(); } }; }
https://w.atwiki.jp/pspt/pages/248.html
OpenGL OpenGLはグラフィックスハードウェアのAPI。 2次元・3次元コンピュータグラフィックス両方が扱えどのOSでも使う事ができる。 他のグラフィックスハードウェアのAPIはMS社のDirectXなどがある。 OpenGL導入の仕方(osがwindowsで開発環境がvisual c++の場合) OpenGLのHello world 二次元の図形を表示させたい! 参考 導入の仕方(osがwindowsで開発環境がvisual c++の場合) OpenGL自体はどのosにも大抵入っているが動かせるようにするにはちょっとした手続きが必要です。 まずここからglut-3.7.6-bin.zipをダウンロードし解凍しましょう。 glut32.dll glut32.lib glut.h というファイルがあるのでdllをOSが 32bitならC \Windows\System32に 64bitならC \Windows\SysWOW64に に置きましょう。 続いてglut.hを\Microsoft Visual Studio 11.0\VC\include\gl(glがなければ作る) glut32.libを\Microsoft Visual Studio 11.0\VC\lib に置きましょう。 これで#include gl/glut.h とおいてコンパイルエラーが起こらなければ成功です。 設定はこれだけです。 注意 glut.hをインクルードする時はstdio.hとstdlib.hを先頭にして下さい。 OpenGLのHello world #include GL/glut.h void display(void) { } int main(int argc, char *argv[]) { glutInit( argc, argv); glutCreateWindow("hello world"); glutDisplayFunc(display); glutMainLoop(); return 0; } void glutInit(int *argc, char **argv) GLUT および OpenGL 環境を初期化します。 引数には main の引数をそのまま渡します. X Window で使われるオプション -display などはここで処理されます. この関数によって引数の内容が変更されます. int glutCreateWindow(char *name) ウィンドウを開きます. 引数 name はそのウィンドウの名前の文字列で, タイトルバーなどに表示されます. void glutDisplayFunc(void (*func)(void)) 引数 func は開いたウィンドウ内に描画する関数へのポインタです. ウィンドウが開かれたり, 他のウィンドウによって隠されたウィンドウが再び現れたりして, ウィンドウを再描画する必要があるときに, この関数が実行されます. したがって, この関数内で図形表示を行います. void glutMainLoop(void) これは無限ループです. この関数を呼び出すことで, プログラムはイベントの待ち受け状態になります. この関数がないとウィンドウが一瞬で消えてしまいます。 図形の描写はdiplay関数内で行われます。 二次元の図形を表示させたい! 参考 GLUTによる「手抜き」OpenGL入門 http //www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html OpenGL de プログラミング http //wiki.livedoor.jp/mikk_ni3_92/
https://w.atwiki.jp/ookubo/pages/19.html
ゲームテクニック ゲームに関する情報 OpenGL の描画処理を高速化についてのkeyWard. ・ディスプレイリスト ・頂点配列 ・VBO = Vertex Buffer Object ・カリング カリング- OpenGLビュークラスを作る- OpenGL サンプル --