OpenGLプログラミング

OpenGL Programming ブックへようこそ。 OpenGL は 3D グラフィックスの描画に使用するAPIです。 OpenGL はプログラミング言語ではありません。 OpenGL アプリケーションは、一般的に、C言語またはC++で書かれます。 OpenGL の役割は、魅力的で、リアルな3Dグラフィックスを、最小限の労力で描画できるようにすることです。 APIは通常、GPUと連携をとってハードウェア アクセラレーション レンダリングを実現するために使用されます。

このwikibookへの 参加貢献 は自由で、 奨励されています: フリードキュメンテーションの精神で書かれていて、全人類に帰属するものです。 気軽に印刷したり、学校やプロフェッショナルクラスに教えたり、テキストを改善し、コメントを書き、新しいセクションを執筆してください。

私たちは貢献者を探しています。 OpenGLについて知っていることがあれば、お気軽にコメントを残したり、TODOセクションを拡張したり、新しいセクションを書いてくださいね!

Wikipedia
ウィキペディアOpenGLの記事があります。

はじめに編集

  1. この文書について
  2. OpenGLの歴史と進化

OpenGLのセットアップ編集

Modern OpenGL編集

"Modern" OpenGL の範囲は、 OpenGL 2.1+, OpenGL ES 2.0+,および WebGLで、 プログラマブルなパイプラインやシェーダが付属するものです。

The basics arc編集

01 チュートリアル 01: newcomer's introduction, first dive into shaders 02 チュートリアル 02: adding more robustness to our code, transparency
03 チュートリアル 03: passing information to shaders: attributes, varying and uniforms 04 チュートリアル 04: transformation matrices: positioning and rotating
05 チュートリアル 05: adding the 3rd dimension: a cube, plus a camera 06 チュートリアル 06: textures: displaying a wooden cube
07 OBJ format: loading Suzanne the monkey from Blender 08 Navigation: navigate in 3D space and manipulate objects in our model viewer

Tutorial_drafts: ideas and notes for upcoming tutorials

The lighting arc編集

This series of tutorials is a C++ port of the GLSL wikibook Basic Lighting tutorials.

01 Diffuse Reflection: about per-vertex diffuse lighting and multiple light sources of different kinds 02 Specular Highlights: about per-vertex lighting
03 Two-Sided Surfaces (about two-sided per-vertex lighting) 04 Smooth Specular Highlights (about per-pixel lighting)
05 Two-Sided Smooth Surfaces (about two-sided per-pixel lighting) 06 Multiple Lights (about for-loops for handling multiple light sources)

This series of tutorials is a C++ port of the GLSL wikibook Basic Texturing tutorials.

01 Textured Spheres: about texturing a sphere 02 Lighting Textured Surfaces: about textures for diffuse lighting
03 Glossy Textures: about gloss mapping 04 Transparent Textures: about using alpha textures for discarding fragments, alpha testing, and blending
05 Layers of Textures: about multitexturing

This series of tutorials is a C++ port of the GLSL wikibook tutorials about Textures in 3D.

01 Lighting of Bumpy Surfaces: about normal mapping 02 Projection of Bumpy Surfaces: about parallax mapping
03 Cookies: about projective texture mapping for shaping light 04 Light Attenuation: about texture mapping for light attenuation and lookup tables in general
05 Projectors: about projective texture mapping for projectors

There are more tutorials to port at the GLSL wikibook!

The scientific arc編集

01 Graph 01: plotting a simple function, using vertex buffer objects and point sprites 02 Graph 02: plotting a graph from data in a texture
03 Graph 03: plotting borders and axes, clipping 04 Graph 04: plotting a three-dimensional graph
05 Graph 05: plotting a surface with hidden line removal

And more to come.

Selected topics編集

01 Arcball: intuitive object rotation with the mouse 02 Bounding box: draw a cube around your object for editing or debugging purposes
03 2D-on-3D: hardware-accelerated 2D programming 04
Video Capture: capture your animation using apitrace (C++) or JavaScript (WebGL)
05 Tea time: generating a HD teapot from Bézier surfaces 06 Stencil buffer: masking and combining
07 Quadrics: creating simple shapes with a bit of maths 08 Basic text: rendering text using the FreeType library
09 Optimized text rendering: using a texture atlas containing all glyphs 10 Object selection: unprojecting coordinates and object identification using the stencil buffer
11 Anti-Aliasing: smoothing lines

The post-processing arc編集

01 Concepts: how to perform full-screen post-processing, first example with a simple animated wave 02 ???: next effect to be decided!

Mini-portal編集

This series shows how to implement a teleportation system similar to Valve's Portal, step-by-step, using OpenGL.

01 Mini-Portal: a first working see-through portal 02 Mini-Portal Smooth: smooth transition, understanding the camera
03 Mini-Portal Recursive: recursive portals - display portals within portals 04 Mini-Portal Optimization: optimization with scissors

Glescraft編集

This series shows how to render a voxel based world, similar to Minecraft.

01 Glescraft 1: basic voxel rendering 02 Glescraft 2: removing unnecessary voxel faces
03 Glescraft 3: texturing, lighting, fog, transparency 04 Glescraft 4: first person camera controls
05 Glescraft 5: drawing only what is on screen 06 Glescraft 6: adding and removing voxels
07 Glescraft 7: using geometry shaders

Using the accumulation buffer編集

01 Tutorial 01: motion blur 02 Tutorial 02: full-screen supersampling anti-aliasing
03 Tutorial 03: depth of field 04 Tutorial 04: order-independent transparency

Cutting-edge OpenGL編集

If you do not need to target mobile devices or the web, you can upgrade to OpenGL 4.x. It notably introduces 3 new kinds of shaders: Geometry, Tessellation Control and Tessellation Evaluation.

01 Tutorial 01: modify and create vertices on the fly with geometry shaders 02 Tutorial 02: dynamic mesh quality with tesselation

and lots of other features.

Code quality編集

01 Debugging: tips to help debug your OpenGL code 02 Performances: measuring and improving your application perfs

Appendices編集

Legacy OpenGL 1.x編集

"Legacy" OpenGL is about OpenGL 1.x and OpenGL ES 1.x, with a fixed pipeline and no shaders.

Starting Tutorial編集

  1. Setting Up A Programming Environment On Windows 
  2. Setting Up OpenGL In The Programming Environment 
  3. Drawing Primitives 
    1. Immediate Mode
    2. Display Lists
    3. Vertex Arrays
  4. Basic Transformations 
    1. Translation
    2. Rotation
    3. Scaling
    4. Custom Transformations

Basics編集

  1. Structure of a Typical OpenGL Application  
  2. Drawing Rectangles  
  3. Drawing Lines and Points
  4. Drawing Simple 2D Shapes  
  5. OpenGL Naming Conventions  
  6. Using Color  
  7. Viewing Transformations  
  8. Drawing Simple 3D Objects
  9. Perspective versus Orthographic Projections

Intermediate編集

  1. Smoothing Polygons with Normals
  2. Adding Lights
  3. Using Materials
  4. Using Textures
  5. Using Mipmaps
  6. Drawing Complex Polygons Using Tessellation

Advanced編集

  1. Optimizing OpenGL Code
  2. Drawing Shadows
  3. Drawing Using Quadrics
  4. Drawing Using NURBS and Curves
  5. Ambient Occlusion

Appendices編集

  1. Coordinate Transformations
  2. Understanding Transformation Matrices
  3. OpenGL Library Reference. functions and type reference for gl.h glu.h and glut.h
  4. Why OpenGL Exists and What It's Good For
  5. Migrating from 1.x to 2.x: how to upgrade your code to use modern OpenGL

Wikibooks編集

Related WikiBooks:

  • GLSL Programming : wikibook on the use of the OpenGL Shading Language (GLSL) in Unity 3 and Blender 2.5, with much information on lighting and texturing
  • Blender 3D: Noob to Pro: comprehensive book on using the Blender 3D modeling environment

Ports編集

The following websites provide conversion of the tutorials to other programming languages or platforms:

Freely-licensed documentation and samples編集

Non-freely-licensed documentation編集

Websites編集

Further reading編集

  • OpenGL Architecture Review Board, et al: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 2, Fifth Edition, Addison-Wesley, ISBN 0-321-33573-2
  • OpenGL Architecture Review Board, et al: OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4, Addison-Wesley, ISBN 0-321-17383-X
  • Wright, Richard S. Jr and Lipchak, Benjamin: OpenGL SuperBible, Third Edition, Sams Publishing, ISBN 0-672-32601-9

{ テンプレート:Status