/*
** 初期化
*/
static void init(void)
{
... 省略 ...
/* 初期設定 */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* 背景を白にする */
... 省略 ...
/* 光源の初期設定 */
// glEnable(GL_LIGHTING); /* 光源を無効化 */
... 省略 ...
/* シェーダプログラムの適用 */
// glUseProgram(gl2Program);
glUseProgram(0); /* シェーダプログラムの適用を無効化 */
}
/*
** シーンの描画
*/
static void scene(void)
{
static const GLfloat diffuse[] = { 0.6f, 0.1f, 0.1f, 1.0f };
static const GLfloat specular[] = { 0.3f, 0.3f, 0.3f, 1.0f };
/* 材質の設定 */
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0f);
#if 1
/* 1枚の4角形を描く */
glNormal3d(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3d(1.0, 0.0, 0.0); /* 赤 */
glVertex3d(-1.0, -1.0, 0.0);
glColor3d(0.0, 1.0, 0.0); /* 緑 */
glVertex3d( 1.0, -1.0, 0.0);
glColor3d(0.0, 0.0, 1.0); /* 青 */
glVertex3d( 1.0, 1.0, 0.0);
glColor3d(1.0, 1.0, 0.0); /* 黄 */
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
#else
glutSolidTeapot(1.0);
#endif
}
|
/*
** 初期化
*/
static void init(void)
{
... 省略 ...
/* 初期設定 */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* 背景を白にする */
... 省略 ...
/* 光源の初期設定 */
// glEnable(GL_LIGHTING); /* 光源を無効化 */
... 省略 ...
/* シェーダプログラムの適用 */
glUseProgram(gl2Program); /* シェーダプログラムの適用を有効化 */
}
/*
** シーンの描画
*/
static void scene(void)
{
static const GLfloat diffuse[] = { 0.6f, 0.1f, 0.1f, 1.0f };
static const GLfloat specular[] = { 0.3f, 0.3f, 0.3f, 1.0f };
/* 材質の設定 */
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0f);
#if 1
/* 1枚の4角形を描く */
glNormal3d(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3d(1.0, 0.0, 0.0); /* 赤 */
glVertex3d(-1.0, -1.0, 0.0);
glColor3d(0.0, 1.0, 0.0); /* 緑 */
glVertex3d( 1.0, -1.0, 0.0);
glColor3d(0.0, 0.0, 1.0); /* 青 */
glVertex3d( 1.0, 1.0, 0.0);
glColor3d(1.0, 1.0, 0.0); /* 黄 */
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
#else
glutSolidTeapot(1.0);
#endif
}
|
void main(void)
{
// 頂点位置
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
// 頂点色
gl_FrontColor = vec4(1.0, 0.0, 0.0, 1.0); /* 【実験1】直接的に与えた色(赤) */
// gl_FrontColor = gl_Color; /* 【実験2】OpenGLアプリケーションから渡された色 */
// gl_FrontColor = vec4(1.0) - gl_Color; /* 【実験3】OpenGLアプリケーションから渡された色の反転色 */
}
|
void main (void)
{
// フラグメントの色
// gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = gl_Color; /* バーテックスシェーダから渡された色 */
}
|
/*
** 初期化
*/
static void init(void)
{
... 省略 ...
/* 初期設定 */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* 背景を白にする */
... 省略 ...
/* 光源の初期設定 */
// glEnable(GL_LIGHTING); /* 光源を無効化 */
... 省略 ...
/* シェーダプログラムの適用 */
glUseProgram(gl2Program);
}
/*
** シーンの描画
*/
static void scene(void)
{
static const GLfloat diffuse[] = { 0.6f, 0.1f, 0.1f, 1.0f };
static const GLfloat specular[] = { 0.3f, 0.3f, 0.3f, 1.0f };
/* バーテックスシェーダに渡す値 */
float valVertC = 0.0;
GLint valVertLoc;
/* バーテックスシェーダに値を渡す */
valVertLoc = glGetUniformLocation(gl2Program, "valVert");
glUniform1f(valVertLoc, valVertC);
/* 材質の設定 */
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0f);
#if 1
/* 1枚の4角形を描く */
glNormal3d(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3d(1.0, 0.0, 0.0); /* 赤 */
glVertex3d(-1.0, -1.0, 0.0);
glColor3d(0.0, 1.0, 0.0); /* 緑 */
glVertex3d( 1.0, -1.0, 0.0);
glColor3d(0.0, 0.0, 1.0); /* 青 */
glVertex3d( 1.0, 1.0, 0.0);
glColor3d(1.0, 1.0, 0.0); /* 黄 */
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
#else
glutSolidTeapot(1.0);
#endif
}
|
uniform float valVert; /* OpenGLアプリケーションから渡される値を格納する変数 */
void main(void)
{
// 頂点位置
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
// 頂点色
if( gl_Vertex.x < valVert ) { /* 【実験1】モデリング座標値 gl_Vertex と比較 */
// if( gl_Position.x < valVert ) { /* 【実験2】クリッピング座標値 gl_Position と比較 */
gl_FrontColor = vec4(1.0, 0.0, 0.0, 1.0); /* 赤 */
}
else {
gl_FrontColor = vec4(0.0, 1.0, 0.0, 1.0); /* 緑 */
}
}
|
void main (void)
{
// フラグメントの色
// gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = gl_Color; /* バーテックスシェーダから渡された色 */
}
|
| → | → | → | |||||
| 説明図 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
| 実験1 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
| 実験2 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
/*
** 初期化
*/
static void init(void)
{
... 省略 ...
/* 初期設定 */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* 背景を白にする */
... 省略 ...
/* 光源の初期設定 */
// glEnable(GL_LIGHTING); /* 光源を無効化 */
... 省略 ...
/* シェーダプログラムの適用 */
glUseProgram(gl2Program);
}
/*
** シーンの描画
*/
static void scene(void)
{
static const GLfloat diffuse[] = { 0.6f, 0.1f, 0.1f, 1.0f };
static const GLfloat specular[] = { 0.3f, 0.3f, 0.3f, 1.0f };
/* フラグメントシェーダに渡す値 */
float valFragC = 150.0;
GLint valFragLoc;
/* フラグメントシェーダに値を渡す */
valFragLoc = glGetUniformLocation(gl2Program, "valFrag");
glUniform1f(valFragLoc, valFragC);
/* 材質の設定 */
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0f);
#if 1
/* 1枚の4角形を描く */
glNormal3d(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3d(1.0, 0.0, 0.0); /* 赤 */
glVertex3d(-1.0, -1.0, 0.0);
glColor3d(0.0, 1.0, 0.0); /* 緑 */
glVertex3d( 1.0, -1.0, 0.0);
glColor3d(0.0, 0.0, 1.0); /* 青 */
glVertex3d( 1.0, 1.0, 0.0);
glColor3d(1.0, 1.0, 0.0); /* 黄 */
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
#else
glutSolidTeapot(1.0);
#endif
}
|
void main(void)
{
// 頂点位置
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
|
uniform float valFrag; /* OpenGLアプリケーションから渡される値を格納する変数 */
void main (void)
{
// フラグメントの色
// gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
if( gl_FragCoord.x < valFrag ) { /* フラグメント(ピクセル)座標値 gl_FragCoord と比較 */
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0); /* 黄 */
}
else {
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); /* 紫 */
}
}
|
| → | → | → | |||||
| 説明図 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
| 実験 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
/*
** 初期化
*/
static void init(void)
{
... 省略 ...
/* 初期設定 */
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); /* 背景を白にする */
... 省略 ...
/* 光源の初期設定 */
// glEnable(GL_LIGHTING); /* 光源を無効化 */
... 省略 ...
/* シェーダプログラムの適用 */
glUseProgram(gl2Program);
}
/*
** シーンの描画
*/
static void scene(void)
{
static const GLfloat diffuse[] = { 0.6f, 0.1f, 0.1f, 1.0f };
static const GLfloat specular[] = { 0.3f, 0.3f, 0.3f, 1.0f };
/* フラグメントシェーダに渡す値 */
float valFragC = 150.0;
GLint valFragLoc;
/* フラグメントシェーダに値を渡す */
valFragLoc = glGetUniformLocation(gl2Program, "valFrag");
glUniform1f(valFragLoc, valFragC);
/* 材質の設定 */
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100.0f);
#if 1
/* 1枚の4角形を描く */
glNormal3d(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
glColor3d(1.0, 0.0, 0.0); /* 赤 */
glVertex3d(-1.0, -1.0, 0.0);
glColor3d(0.0, 1.0, 0.0); /* 緑 */
glVertex3d( 1.0, -1.0, 0.0);
glColor3d(0.0, 0.0, 1.0); /* 青 */
glVertex3d( 1.0, 1.0, 0.0);
glColor3d(1.0, 1.0, 0.0); /* 黄 */
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
#else
glutSolidTeapot(1.0);
#endif
}
|
varying float addxy; /* フラグメントシェーダに渡す値を格納する変数 */
void main(void)
{
// 頂点位置
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
// フラグメントシェーダに渡す値
addxy = ( ( gl_Vertex.x + gl_Vertex.y ) + 2.0 ) / 4.0; /* 【実験1】モデリング座標値 gl_Vertex を利用 */
// addxy = ( ( gl_Position.x + gl_Position.y ) + 2.0 ) / 4.0; /* 【実験2】クリッピング座標値 gl_Position を利用 */
}
|
uniform float valFrag; /* OpenGLアプリケーションから渡される値を格納する変数 */
varying float addxy; /* バーテックスシェーダから渡される値を格納する変数 */
void main (void)
{
// フラグメントの色
// gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
if( gl_FragCoord.x < valFrag ) { /* ピクセル座標値 gl_FragCoord と比較 */
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0) * addxy; /* 黄 */
}
else {
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0) * addxy; /* 紫 */
}
}
|
| → | → | → | |||||
| 説明図 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
| 実験1 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |
| 実験2 | ![]() |
→ | ![]() |
→ | ![]() |
→ | ![]() |