GLSLによるジオメトリシェーダ
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
----
#contents
----
void glProgramParameteri(GLuint program, GLenum pname, G...
#code(C){{
/*!
*/
inline GLuint LinkGLSLProgram(GLuint vs, GLuint gs, GLuin...
{
GLuint program = glCreateProgram();
glAttachShader(program, vs);
glAttachShader(program, gs);
glAttachShader(program, fs);
glProgramParameteriEXT(program, GL_GEOMETRY_INPUT_TYPE_E...
glProgramParameteriEXT(program, GL_GEOMETRY_OUTPUT_TYPE_...
glProgramParameteriEXT(program, GL_GEOMETRY_VERTICES_OUT...
glLinkProgram(program);
GLint charsWritten, infoLogLength;
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLeng...
char * infoLog = new char[infoLogLength];
glGetProgramInfoLog(program, infoLogLength, &charsWritte...
printf(infoLog);
delete [] infoLog;
GLint linkSucceed = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &linkSucceed);
if(linkSucceed == GL_FALSE){
glDeleteProgram(program);
return 0;
}
return program;
}
}}
#code(C){{
struct rxGLSL
{
};
/*!
*/
inline rxGLSL CreateGLSLFromFile(const string &vs, const ...
GLint input_type, GLint output_type, GLint verte...
{
rxGLSL glsl;
glsl.VertProg = vs;
glsl.GeomProg = gs;
glsl.FragProg = fs;
glsl.Name = name;
GLuint v, g, f;
v = CompileGLSLShaderFromFile(GL_VERTEX_SHADER, vs.c_str...
g = CompileGLSLShaderFromFile(GL_GEOMETRY_SHADER, gs.c_s...
f = CompileGLSLShaderFromFile(GL_FRAGMENT_SHADER, fs.c_s...
if(vertex_out < 0){
glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &vertex_...
}
glsl.Prog = LinkGLSLProgram(v, g, f, input_type, output_...
return glsl;
}
}}
GLint nc, nv;
glGetIntegerv(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, &...
cout << "maximum number of components : " << nc << endl;
glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &nv);
cout << "max output vertices : " << nv << endl;
OpenGL Ver. 4.1.0
Glew Ver. 1.5.7
maximum number of components : 1024
max output vertices : 1024
varying in vec4 gl_FrontColorIn[gl_VerticesIn];
varying in vec4 gl_BackColorIn[gl_VerticesIn];
varying in vec4 gl_FrontSecondaryColorIn[gl_VerticesIn];
varying in vec4 gl_BackSecondaryColorIn[gl_VerticesIn];
varying in vec4 gl_TexCoordIn[gl_VerticesIn][];
varying in float gl_FogFragCoordIn[gl_VerticesIn];
varying in vec4 gl_PositionIn[gl_VerticesIn];
varying in float gl_PointSizeIn[gl_VerticesIn];
varying in vec4 gl_ClipVertexIn[gl_VerticesIn];
varying out vec4 gl_FrontColor;
varying out vec4 gl_BackColor;
varying out vec4 gl_FrontSecondaryColor;
varying out vec4 gl_BackSecondaryColor;
varying out vec4 gl_TexCoord[];
varying out float gl_FogFragCoord;
void EmitVertex();
void EndPrimitive();
varying float Alpha;
varying vec3 Nrm;
varying in float Alpha[3];
varying in vec3 Nrm[3];
varying out vec3 LightPos;
LightPos = ...
EmitVertex();
varying vec3 LightPos;
#code(C){{
/*!
@file simple.vs
@author Makoto Fujisawa
@date 2011
*/
#version 120
uniform vec3 eyePosition;
void main(void)
{
float shine = gl_FrontMaterial.shininess;
vec3 P = (gl_ModelViewMatrix*gl_Vertex).xyz;
vec3 emissive = Ke;
vec3 ambient = Ka*La;
float diffuseLight = max(dot(L, N), 0.0);
vec3 diffuse = Kd*Ld*diffuseLight;
vec3 H = normalize(L+V);
float specularLight = pow(max(dot(H, N), 0.0), shine);
if(diffuseLight <= 0.0) specularLight = 0.0;
vec3 specular = Ks*Ls*specularLight;
gl_FrontColor = vec4(emissive+ambient+diffuse+specular, ...
gl_Position = gl_Vertex;
}
}}
varying in vec4 gl_PositionIn[gl_VerticesIn];
varying in vec4 gl_FrontColorIn[gl_VerticesIn];
void EmitVertex();
void EndPrimitive();
#code(C){{
/*!
@file simple.gs
@author Makoto Fujisawa
@date 2011
*/
#version 120
#extension GL_EXT_geometry_shader4 : enable
void main(void)
{
vec3 mg = vec3(0.0);
for(int i = 0; i < gl_VerticesIn; ++i){
mg += gl_PositionIn[i].xyz;
}
mg /= float(gl_VerticesIn);
vec3 v, p;
for(int i = 0; i < gl_VerticesIn; ++i){
gl_FrontColor = gl_FrontColorIn[i];
v = mg-gl_PositionIn[i].xyz;
p = gl_PositionIn[i].xyz+0.2*v;
gl_Position = gl_ModelViewProjectionMatrix*vec4(p, 1);
EmitVertex();
}
EndPrimitive();
}
}}
#code(C){{
/*!
@file simple.fs
@author Makoto Fujisawa
@date 2011
*/
#version 120
void main(void)
{
gl_FragColor = gl_Color;
}
}}
#ref(geometry_shader1.jpg)
#ref(glsl_geometry.zip)
終了行:
----
#contents
----
void glProgramParameteri(GLuint program, GLenum pname, G...
#code(C){{
/*!
*/
inline GLuint LinkGLSLProgram(GLuint vs, GLuint gs, GLuin...
{
GLuint program = glCreateProgram();
glAttachShader(program, vs);
glAttachShader(program, gs);
glAttachShader(program, fs);
glProgramParameteriEXT(program, GL_GEOMETRY_INPUT_TYPE_E...
glProgramParameteriEXT(program, GL_GEOMETRY_OUTPUT_TYPE_...
glProgramParameteriEXT(program, GL_GEOMETRY_VERTICES_OUT...
glLinkProgram(program);
GLint charsWritten, infoLogLength;
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLeng...
char * infoLog = new char[infoLogLength];
glGetProgramInfoLog(program, infoLogLength, &charsWritte...
printf(infoLog);
delete [] infoLog;
GLint linkSucceed = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &linkSucceed);
if(linkSucceed == GL_FALSE){
glDeleteProgram(program);
return 0;
}
return program;
}
}}
#code(C){{
struct rxGLSL
{
};
/*!
*/
inline rxGLSL CreateGLSLFromFile(const string &vs, const ...
GLint input_type, GLint output_type, GLint verte...
{
rxGLSL glsl;
glsl.VertProg = vs;
glsl.GeomProg = gs;
glsl.FragProg = fs;
glsl.Name = name;
GLuint v, g, f;
v = CompileGLSLShaderFromFile(GL_VERTEX_SHADER, vs.c_str...
g = CompileGLSLShaderFromFile(GL_GEOMETRY_SHADER, gs.c_s...
f = CompileGLSLShaderFromFile(GL_FRAGMENT_SHADER, fs.c_s...
if(vertex_out < 0){
glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &vertex_...
}
glsl.Prog = LinkGLSLProgram(v, g, f, input_type, output_...
return glsl;
}
}}
GLint nc, nv;
glGetIntegerv(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, &...
cout << "maximum number of components : " << nc << endl;
glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &nv);
cout << "max output vertices : " << nv << endl;
OpenGL Ver. 4.1.0
Glew Ver. 1.5.7
maximum number of components : 1024
max output vertices : 1024
varying in vec4 gl_FrontColorIn[gl_VerticesIn];
varying in vec4 gl_BackColorIn[gl_VerticesIn];
varying in vec4 gl_FrontSecondaryColorIn[gl_VerticesIn];
varying in vec4 gl_BackSecondaryColorIn[gl_VerticesIn];
varying in vec4 gl_TexCoordIn[gl_VerticesIn][];
varying in float gl_FogFragCoordIn[gl_VerticesIn];
varying in vec4 gl_PositionIn[gl_VerticesIn];
varying in float gl_PointSizeIn[gl_VerticesIn];
varying in vec4 gl_ClipVertexIn[gl_VerticesIn];
varying out vec4 gl_FrontColor;
varying out vec4 gl_BackColor;
varying out vec4 gl_FrontSecondaryColor;
varying out vec4 gl_BackSecondaryColor;
varying out vec4 gl_TexCoord[];
varying out float gl_FogFragCoord;
void EmitVertex();
void EndPrimitive();
varying float Alpha;
varying vec3 Nrm;
varying in float Alpha[3];
varying in vec3 Nrm[3];
varying out vec3 LightPos;
LightPos = ...
EmitVertex();
varying vec3 LightPos;
#code(C){{
/*!
@file simple.vs
@author Makoto Fujisawa
@date 2011
*/
#version 120
uniform vec3 eyePosition;
void main(void)
{
float shine = gl_FrontMaterial.shininess;
vec3 P = (gl_ModelViewMatrix*gl_Vertex).xyz;
vec3 emissive = Ke;
vec3 ambient = Ka*La;
float diffuseLight = max(dot(L, N), 0.0);
vec3 diffuse = Kd*Ld*diffuseLight;
vec3 H = normalize(L+V);
float specularLight = pow(max(dot(H, N), 0.0), shine);
if(diffuseLight <= 0.0) specularLight = 0.0;
vec3 specular = Ks*Ls*specularLight;
gl_FrontColor = vec4(emissive+ambient+diffuse+specular, ...
gl_Position = gl_Vertex;
}
}}
varying in vec4 gl_PositionIn[gl_VerticesIn];
varying in vec4 gl_FrontColorIn[gl_VerticesIn];
void EmitVertex();
void EndPrimitive();
#code(C){{
/*!
@file simple.gs
@author Makoto Fujisawa
@date 2011
*/
#version 120
#extension GL_EXT_geometry_shader4 : enable
void main(void)
{
vec3 mg = vec3(0.0);
for(int i = 0; i < gl_VerticesIn; ++i){
mg += gl_PositionIn[i].xyz;
}
mg /= float(gl_VerticesIn);
vec3 v, p;
for(int i = 0; i < gl_VerticesIn; ++i){
gl_FrontColor = gl_FrontColorIn[i];
v = mg-gl_PositionIn[i].xyz;
p = gl_PositionIn[i].xyz+0.2*v;
gl_Position = gl_ModelViewProjectionMatrix*vec4(p, 1);
EmitVertex();
}
EndPrimitive();
}
}}
#code(C){{
/*!
@file simple.fs
@author Makoto Fujisawa
@date 2011
*/
#version 120
void main(void)
{
gl_FragColor = gl_Color;
}
}}
#ref(geometry_shader1.jpg)
#ref(glsl_geometry.zip)
ページ名: