本文整理汇总了C++中GLSLShader::AddUniform方法的典型用法代码示例。如果您正苦于以下问题:C++ GLSLShader::AddUniform方法的具体用法?C++ GLSLShader::AddUniform怎么用?C++ GLSLShader::AddUniform使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GLSLShader
的用法示例。
在下文中一共展示了GLSLShader::AddUniform方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onInit
void onInit() {
//tex = loadImage("../textures/texture.png");
tex = loadImage("../textures/dots.png");
tex2 = loadImage("../textures/dots.png");
ctv = new CTextureViewer(0, "../shaders/textureViewer.vs", "../shaders/textureViewer.frag");
ctv->setTexture(tex);
ctv->setTexture2(tex2);
hist.LoadFromFile(GL_VERTEX_SHADER, "../shaders/histogram.vs");
hist.LoadFromFile(GL_FRAGMENT_SHADER, "../shaders/histogram.frag");
hist.CreateAndLinkProgram();
hist.Use();
//Create uniforms and attributes (filled later)
hist.AddAttribute("vPosition");
hist.AddUniform("tex");
hist.AddUniform("textureWidth");
hist.AddUniform("textureHeight");
hist.UnUse();
initTex();
initPointVBO();
initHistogramFBO();
}
示例2: InitShaders
void InitShaders(void)
{
shader.LoadFromFile(GL_VERTEX_SHADER, "../CGE_solarsystem/shader.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "../CGE_solarsystem/shader.frag");
shader.CreateAndLinkProgram();
shader.Use();
shader.AddAttribute("vVertex");
shader.AddAttribute("vUV");
shader.AddUniform("MVP");
shader.AddUniform("textureMap");
glUniform1i(shader("textureMap"), 0);
shader.UnUse();
GL_CHECK_ERRORS
}
示例3: OnInit
//OpenGL initialization
void OnInit() {
//set the instance modeling matrix
M[0] = glm::translate(glm::mat4(1), glm::vec3(-5,0,-5));
M[1] = glm::translate(M[0], glm::vec3(10,0,0));
M[2] = glm::translate(M[1], glm::vec3(0,0,10));
M[3] = glm::translate(M[2], glm::vec3(-10,0,0));
GL_CHECK_ERRORS
//load the shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_GEOMETRY_SHADER, "shaders/shader.geom");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//create and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add attribute and uniform
shader.AddAttribute("vVertex");
shader.AddUniform("PV");
shader.AddUniform("M");
shader.AddUniform("sub_divisions");
//set values of constant uniforms at initialization
glUniform1i(shader("sub_divisions"), sub_divisions);
glUniformMatrix4fv(shader("M"), 4, GL_FALSE, glm::value_ptr(M[0]));
shader.UnUse();
GL_CHECK_ERRORS
//setup quad geometry
//setup quad vertices
vertices[0] = glm::vec3(-5,0,-5);
vertices[1] = glm::vec3(-5,0,5);
vertices[2] = glm::vec3(5,0,5);
vertices[3] = glm::vec3(5,0,-5);
//setup quad indices
GLushort* id=&indices[0];
*id++ = 0;
*id++ = 1;
*id++ = 2;
*id++ = 0;
*id++ = 2;
*id++ = 3;
GL_CHECK_ERRORS
//setup quad vao and vbo stuff
glGenVertexArrays(1, &vaoID);
glGenBuffers(1, &vboVerticesID);
glGenBuffers(1, &vboIndicesID);
glBindVertexArray(vaoID);
glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
//pass the quad vertices to buffer object
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attribute array for position
glEnableVertexAttribArray(shader["vVertex"]);
glVertexAttribPointer(shader["vVertex"], 3, GL_FLOAT, GL_FALSE,0,0);
GL_CHECK_ERRORS
//pass the quad indices to element array buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//set the polygon mode to render lines
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
GL_CHECK_ERRORS
cout<<"Initialization successfull"<<endl;
}
示例4: OnInit
//.........这里部分代码省略.........
glGenVertexArrays(1, &cubeVAOID);
glGenBuffers(1, &cubeVBOID);
glGenBuffers(1, &cubeIndicesID);
//unit cube vertices
glm::vec3 vertices[8]={ glm::vec3(-0.5f,-0.5f,-0.5f),
glm::vec3( 0.5f,-0.5f,-0.5f),
glm::vec3( 0.5f, 0.5f,-0.5f),
glm::vec3(-0.5f, 0.5f,-0.5f),
glm::vec3(-0.5f,-0.5f, 0.5f),
glm::vec3( 0.5f,-0.5f, 0.5f),
glm::vec3( 0.5f, 0.5f, 0.5f),
glm::vec3(-0.5f, 0.5f, 0.5f)};
//unit cube indices
GLushort cubeIndices[36]={0,5,4,
5,0,1,
3,7,6,
3,6,2,
7,4,6,
6,4,5,
2,1,3,
3,1,0,
3,0,7,
7,0,4,
6,5,2,
2,5,1};
glBindVertexArray(cubeVAOID);
glBindBuffer (GL_ARRAY_BUFFER, cubeVBOID);
//pass cube vertices to buffer object memory
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &(vertices[0].x), GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attributre array for position
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,0,0);
//pass cube indices to element array buffer
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, cubeIndicesID);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof(cubeIndices), &cubeIndices[0], GL_STATIC_DRAW);
glBindVertexArray(0);
//Load the cube shader
cubeShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/cube_shader.vert");
cubeShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/cube_shader.frag");
//compile and link the shader
cubeShader.CreateAndLinkProgram();
cubeShader.Use();
//add attributes and uniforms
cubeShader.AddAttribute("vVertex");
cubeShader.AddUniform("MVP");
cubeShader.AddUniform("vColor");
cubeShader.UnUse();
//Load the front to back peeling shader
frontPeelShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/front_peel.vert");
frontPeelShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/front_peel.frag");
//compile and link the shader
frontPeelShader.CreateAndLinkProgram();
frontPeelShader.Use();
//add attributes and uniforms
frontPeelShader.AddAttribute("vVertex");
frontPeelShader.AddUniform("MVP");
frontPeelShader.AddUniform("vColor");
frontPeelShader.AddUniform("depthTexture");
//pass constant uniforms at initialization
glUniform1i(frontPeelShader("depthTexture"), 0);
frontPeelShader.UnUse();
//Load the blending shader
blendShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/blend.vert");
blendShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/blend.frag");
//compile and link the shader
blendShader.CreateAndLinkProgram();
blendShader.Use();
//add attributes and uniforms
blendShader.AddAttribute("vVertex");
blendShader.AddUniform("tempTexture");
//pass constant uniforms at initialization
glUniform1i(blendShader("tempTexture"), 0);
blendShader.UnUse();
//Load the final shader
finalShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/blend.vert");
finalShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/final.frag");
//compile and link the shader
finalShader.CreateAndLinkProgram();
finalShader.Use();
//add attributes and uniforms
finalShader.AddAttribute("vVertex");
finalShader.AddUniform("colorTexture");
finalShader.AddUniform("vBackgroundColor");
//pass constant uniforms at initialization
glUniform1i(finalShader("colorTexture"), 0);
finalShader.UnUse();
cout<<"Initialization successfull"<<endl;
}
示例5: InitGL
//.........这里部分代码省略.........
AddSpring((l1 * u) + l2,(l1 * u) + l2 + 1,KsStruct,KdStruct);
}
// Vertical
for (l1 = 0; l1 < (u); l1++)
for (l2 = 0; l2 < (v - 1); l2++) {
AddSpring((l2 * u) + l1,((l2 + 1) * u) + l1,KsStruct,KdStruct);
}
// Shearing Springs
for (l1 = 0; l1 < (v - 1); l1++)
for (l2 = 0; l2 < (u - 1); l2++) {
AddSpring((l1 * u) + l2,((l1 + 1) * u) + l2 + 1,KsShear,KdShear);
AddSpring(((l1 + 1) * u) + l2,(l1 * u) + l2 + 1,KsShear,KdShear);
}
// Bend Springs
for (l1 = 0; l1 < (v); l1++) {
for (l2 = 0; l2 < (u - 2); l2++) {
AddSpring((l1 * u) + l2,(l1 * u) + l2 + 2,KsBend,KdBend);
}
AddSpring((l1 * u) + (u - 3),(l1 * u) + (u - 1),KsBend,KdBend);
}
for (l1 = 0; l1 < (u); l1++) {
for (l2 = 0; l2 < (v - 2); l2++) {
AddSpring((l2 * u) + l1,((l2 + 2) * u) + l1,KsBend,KdBend);
}
AddSpring(((v - 3) * u) + l1,((v - 1) * u) + l1,KsBend,KdBend);
}
massSpringShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/Spring.vp");
particleShader.LoadFromFile(GL_VERTEX_SHADER,"shaders/Basic.vp");
particleShader.LoadFromFile(GL_FRAGMENT_SHADER,"shaders/Basic.fp");
renderShader.LoadFromFile(GL_VERTEX_SHADER,"shaders/Passthrough.vp");
renderShader.LoadFromFile(GL_FRAGMENT_SHADER,"shaders/Passthrough.fp");
massSpringShader.CreateAndLinkProgram();
massSpringShader.Use();
massSpringShader.AddAttribute("position_mass");
massSpringShader.AddAttribute("prev_position");
massSpringShader.AddUniform("tex_position_mass");
massSpringShader.AddUniform("tex_pre_position_mass");
massSpringShader.AddUniform("MVP");
massSpringShader.AddUniform("dt");
massSpringShader.AddUniform("gravity");
massSpringShader.AddUniform("ksStr");
massSpringShader.AddUniform("ksShr");
massSpringShader.AddUniform("ksBnd");
massSpringShader.AddUniform("kdStr");
massSpringShader.AddUniform("kdShr");
massSpringShader.AddUniform("kdBnd");
massSpringShader.AddUniform("DEFAULT_DAMPING");
massSpringShader.AddUniform("texsize_x");
massSpringShader.AddUniform("texsize_y");
massSpringShader.AddUniform("step");
massSpringShader.AddUniform("inv_cloth_size");
massSpringShader.AddUniform("ellipsoid");
glUniform1i(massSpringShader("tex_position_mass"), 0);
glUniform1i(massSpringShader("tex_pre_position_mass"), 1);
massSpringShader.UnUse();
CHECK_GL_ERRORS
particleShader.CreateAndLinkProgram();
particleShader.Use();
particleShader.AddAttribute("position_mass");
particleShader.AddUniform("pointSize");
particleShader.AddUniform("MV");
particleShader.AddUniform("MVP");
particleShader.AddUniform("vColor");
particleShader.AddUniform("selected_index");
glUniform1f(particleShader("pointSize"), pointSize);
glUniform4fv(particleShader("vColor"),1, vRed);
particleShader.UnUse();
renderShader.CreateAndLinkProgram();
renderShader.Use();
renderShader.AddAttribute("position_mass");
renderShader.AddUniform("MVP");
renderShader.AddUniform("vColor");
glUniform4fv(renderShader("vColor"),1, vGray);
renderShader.UnUse();
CHECK_GL_ERRORS
//create vbo
createVBO();
//setup transform feedback attributes
glGenTransformFeedbacks(1, &tfID);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfID);
const char* varying_names[]={"out_position_mass", "out_prev_position"};
glTransformFeedbackVaryings(massSpringShader.GetProgram(), 2, varying_names, GL_SEPARATE_ATTRIBS);
glLinkProgram(massSpringShader.GetProgram());
}
示例6: OnInit
//OpenGL initialization function
void OnInit() {
GL_CHECK_ERRORS
//create a uniform grid of size 20x20 in XZ plane
grid = new CGrid(20,20);
GL_CHECK_ERRORS
//create a new TetrahedraMarcher instance
marcher = new TetrahedraMarcher();
//set the volume dataset dimensions
marcher->SetVolumeDimensions(256,256,256);
//load the volume dataset
marcher->LoadVolume(volume_file);
//set the isosurface value
marcher->SetIsosurfaceValue(48);
//set the number of sampling voxels
marcher->SetNumSamplingVoxels(128,128,128);
//begin tetrahedra marching
marcher->MarchVolume();
//setup the volume marcher vertex array object and vertex buffer object
glGenVertexArrays(1, &volumeMarcherVAO);
glGenBuffers(1, &volumeMarcherVBO);
glBindVertexArray(volumeMarcherVAO);
glBindBuffer (GL_ARRAY_BUFFER, volumeMarcherVBO);
//pass the obtained vertices from the tetrahedra marcher and pass to the
//buffer object memory
glBufferData (GL_ARRAY_BUFFER, marcher->GetTotalVertices()*sizeof(Vertex), marcher->GetVertexPointer(), GL_STATIC_DRAW);
//enable vertex attribute array for position
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex),0);
//enable vertex attribute array for normals
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex),(const GLvoid*)offsetof(Vertex, normal));
GL_CHECK_ERRORS
//load the shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/marcher.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/marcher.frag");
//compile and link the shader program
shader.CreateAndLinkProgram();
shader.Use();
//add attribute and uniform
shader.AddAttribute("vVertex");
shader.AddAttribute("vNormal");
shader.AddUniform("MVP");
shader.UnUse();
GL_CHECK_ERRORS
//set the background colour
glClearColor(bg.r, bg.g, bg.b, bg.a);
//enable depth test and culling
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
cout<<"Initialization successfull"<<endl;
}
示例7: OnInit
//OpenGL initialization
void OnInit() {
GL_CHECK_ERRORS
//create a uniform grid of size 20x20 in XZ plane
grid = new CGrid(20,20);
GL_CHECK_ERRORS
//Load the raycasting shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/raycaster.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/raycaster.frag");
//compile and link the shader
shader.CreateAndLinkProgram();
shader.Use();
//add attributes and uniforms
shader.AddAttribute("vVertex");
shader.AddUniform("MVP");
shader.AddUniform("volume");
shader.AddUniform("camPos");
shader.AddUniform("step_size");
//pass constant uniforms at initialization
glUniform3f(shader("step_size"), 1.0f/XDIM, 1.0f/YDIM, 1.0f/ZDIM);
glUniform1i(shader("volume"),0);
shader.UnUse();
GL_CHECK_ERRORS
//load volume data
if(LoadVolume()) {
std::cout<<"Volume data loaded successfully."<<std::endl;
} else {
std::cout<<"Cannot load volume data."<<std::endl;
exit(EXIT_FAILURE);
}
//set background colour
glClearColor(bg.r, bg.g, bg.b, bg.a);
//setup unit cube vertex array and vertex buffer objects
glGenVertexArrays(1, &cubeVAOID);
glGenBuffers(1, &cubeVBOID);
glGenBuffers(1, &cubeIndicesID);
//unit cube vertices
glm::vec3 vertices[8]= { glm::vec3(-0.5f,-0.5f,-0.5f),
glm::vec3( 0.5f,-0.5f,-0.5f),
glm::vec3( 0.5f, 0.5f,-0.5f),
glm::vec3(-0.5f, 0.5f,-0.5f),
glm::vec3(-0.5f,-0.5f, 0.5f),
glm::vec3( 0.5f,-0.5f, 0.5f),
glm::vec3( 0.5f, 0.5f, 0.5f),
glm::vec3(-0.5f, 0.5f, 0.5f)
};
//unit cube indices
GLushort cubeIndices[36]= {0,5,4,
5,0,1,
3,7,6,
3,6,2,
7,4,6,
6,4,5,
2,1,3,
3,1,0,
3,0,7,
7,0,4,
6,5,2,
2,5,1
};
glBindVertexArray(cubeVAOID);
glBindBuffer (GL_ARRAY_BUFFER, cubeVBOID);
//pass cube vertices to buffer object memory
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &(vertices[0].x), GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attributre array for position
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,0,0);
//pass indices to element array buffer
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, cubeIndicesID);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof(cubeIndices), &cubeIndices[0], GL_STATIC_DRAW);
glBindVertexArray(0);
//enable depth test
glEnable(GL_DEPTH_TEST);
//set the over blending function
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
cout<<"Initialization successfull"<<endl;
}
示例8: OnInit
//OpenGL initialization
void OnInit() {
//set the polygon mode to render lines
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
GL_CHECK_ERRORS
//load shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add shader attribute and uniforms
shader.AddAttribute("vVertex");
shader.AddUniform("MVP");
shader.AddUniform("time");
shader.UnUse();
GL_CHECK_ERRORS
//setup plane geometry
//setup plane vertices
int count = 0;
int i=0, j=0;
for( j=0;j<=NUM_Z;j++) {
for( i=0;i<=NUM_X;i++) {
vertices[count++] = glm::vec3( ((float(i)/(NUM_X-1)) *2-1)* HALF_SIZE_X, 0, ((float(j)/(NUM_Z-1))*2-1)*HALF_SIZE_Z);
}
}
//fill plane indices array
GLushort* id=&indices[0];
for (i = 0; i < NUM_Z; i++) {
for (j = 0; j < NUM_X; j++) {
int i0 = i * (NUM_X+1) + j;
int i1 = i0 + 1;
int i2 = i0 + (NUM_X+1);
int i3 = i2 + 1;
if ((j+i)%2) {
*id++ = i0; *id++ = i2; *id++ = i1;
*id++ = i1; *id++ = i2; *id++ = i3;
} else {
*id++ = i0; *id++ = i2; *id++ = i3;
*id++ = i0; *id++ = i3; *id++ = i1;
}
}
}
GL_CHECK_ERRORS
//setup plane vao and vbo stuff
glGenVertexArrays(1, &vaoID);
glGenBuffers(1, &vboVerticesID);
glGenBuffers(1, &vboIndicesID);
glBindVertexArray(vaoID);
glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
//pass plane vertices to array buffer object
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attrib array for position
glEnableVertexAttribArray(shader["vVertex"]);
glVertexAttribPointer(shader["vVertex"], 3, GL_FLOAT, GL_FALSE,0,0);
GL_CHECK_ERRORS
//pass the plane indices to element array buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
cout<<"Initialization successfull"<<endl;
}
示例9: OnInit
//OpenGL initialization
void OnInit() {
GL_CHECK_ERRORS
//load shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add attributes and uniforms
shader.AddAttribute("vVertex");
shader.AddUniform("textureMap");
//pass values of constant uniforms at initialization
glUniform1i(shader("textureMap"), 0);
shader.UnUse();
GL_CHECK_ERRORS
//setup quad geometry
//setup quad vertices
vertices[0] = glm::vec2(0.0,0.0);
vertices[1] = glm::vec2(1.0,0.0);
vertices[2] = glm::vec2(1.0,1.0);
vertices[3] = glm::vec2(0.0,1.0);
//fill quad indices array
GLushort* id=&indices[0];
*id++ =0;
*id++ =1;
*id++ =2;
*id++ =0;
*id++ =2;
*id++ =3;
GL_CHECK_ERRORS
//setup quad vao and vbo stuff
glGenVertexArrays(1, &vaoID);
glGenBuffers(1, &vboVerticesID);
glGenBuffers(1, &vboIndicesID);
glBindVertexArray(vaoID);
glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
//pass quad vertices to buffer object
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attribute array for position
glEnableVertexAttribArray(shader["vVertex"]);
glVertexAttribPointer(shader["vVertex"], 2, GL_FLOAT, GL_FALSE,0,0);
GL_CHECK_ERRORS
//pass quad indices to element array buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//load the image using SOIL
int texture_width = 0, texture_height = 0, channels=0;
GLubyte* pData = SOIL_load_image(filename.c_str(), &texture_width, &texture_height, &channels, SOIL_LOAD_AUTO);
if(pData == NULL) {
cerr<<"Cannot load image: "<<filename.c_str()<<endl;
exit(EXIT_FAILURE);
}
//vertically flip the image on Y axis since it is inverted
int i,j;
for( j = 0; j*2 < texture_height; ++j )
{
int index1 = j * texture_width * channels;
int index2 = (texture_height - 1 - j) * texture_width * channels;
for( i = texture_width * channels; i > 0; --i )
{
GLubyte temp = pData[index1];
pData[index1] = pData[index2];
pData[index2] = temp;
++index1;
++index2;
}
}
//setup OpenGL texture and bind to texture unit 0
glGenTextures(1, &textureID);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
//set texture parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
//allocate texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, texture_width, texture_height, 0, GL_RGB, GL_UNSIGNED_BYTE, pData);
//free SOIL image data
SOIL_free_image_data(pData);
GL_CHECK_ERRORS
cout<<"Initialization successfull"<<endl;
}
示例10: OnInit
//.........这里部分代码省略.........
++index1;
++index2;
}
}
//get the image format
GLenum format = GL_RGBA;
switch(channels) {
case 2: format = GL_RG32UI; break;
case 3: format = GL_RGB; break;
case 4: format = GL_RGBA; break;
}
//if this is the first texture, allocate the array texture
if(k==0) {
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, format, texture_width, texture_height, total, 0, format, GL_UNSIGNED_BYTE, NULL);
}
//modify the existing texture
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0,0,0,k, texture_width, texture_height, 1, format, GL_UNSIGNED_BYTE, pData);
//release the SOIL image data
SOIL_free_image_data(pData);
}
}
GL_CHECK_ERRORS
//load flat shader
flatShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/flat.vert");
flatShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/flat.frag");
//compile and link shader
flatShader.CreateAndLinkProgram();
flatShader.Use();
//add attribute and uniform
flatShader.AddAttribute("vVertex");
flatShader.AddUniform("MVP");
flatShader.UnUse();
//load raytracing shader
raytraceShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/raytracer.vert");
raytraceShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/raytracer.frag");
//compile and link shader
raytraceShader.CreateAndLinkProgram();
raytraceShader.Use();
//add attribute and uniform
raytraceShader.AddAttribute("vVertex");
raytraceShader.AddUniform("eyePos");
raytraceShader.AddUniform("invMVP");
raytraceShader.AddUniform("light_position");
raytraceShader.AddUniform("backgroundColor");
raytraceShader.AddUniform("aabb.min");
raytraceShader.AddUniform("aabb.max");
raytraceShader.AddUniform("vertex_positions");
raytraceShader.AddUniform("triangles_list");
raytraceShader.AddUniform("VERTEX_TEXTURE_SIZE");
raytraceShader.AddUniform("TRIANGLE_TEXTURE_SIZE");
//set values of constant uniforms as initialization
glUniform1f(raytraceShader("VERTEX_TEXTURE_SIZE"), (float)vertices2.size());
glUniform1f(raytraceShader("TRIANGLE_TEXTURE_SIZE"), (float)indices2.size()/4);
glUniform3fv(raytraceShader("aabb.min"),1, glm::value_ptr(aabb.min));
glUniform3fv(raytraceShader("aabb.max"),1, glm::value_ptr(aabb.max));
glUniform4fv(raytraceShader("backgroundColor"),1, glm::value_ptr(bg));
glUniform1i(raytraceShader("vertex_positions"), 1);
glUniform1i(raytraceShader("triangles_list"), 2);
raytraceShader.UnUse();
GL_CHECK_ERRORS
示例11: OnInit
//.........这里部分代码省略.........
case 2: format = GL_RG32UI; break;
case 3: format = GL_RGB; break;
case 4: format = GL_RGBA; break;
}
GLuint id = 0;
//generate new texture id
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
//set texture parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//allocate the texture
glTexImage2D(GL_TEXTURE_2D, 0, format, texture_width, texture_height, 0, format, GL_UNSIGNED_BYTE, pData);
//delete the SOIL image data
SOIL_free_image_data(pData);
//store the texture id into the material map. Refer to the texture by name
//will give us its OpenGL texture id
materialMap[filename] = id ;
}
GL_CHECK_ERRORS
//setup shaders
flatShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/flat.vert");
flatShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/flat.frag");
//compile and link flat shader
flatShader.CreateAndLinkProgram();
flatShader.Use();
//add shader attributes and uniforms
flatShader.AddAttribute("vVertex");
flatShader.AddUniform("MVP");
flatShader.UnUse();
//For the skinning vertex shader, we pass the Bones array dynamcially
//since we may not know the total number of bones in the model at compile
//time. Since the GLSL arrays have to be a compile time constant, we
//dynamically generate the shader string to add the uniform in the shader.
//To achieve this, we overload the GLSLShader::LoadFromFile function with
//a thid parameter, the string we want to add before the shader main function.
stringstream str( ios_base::app | ios_base::out);
str<<"\nconst int NUM_BONES="<<skeleton.size()*2<<";"<<endl;
str<<"uniform vec4 Bones[NUM_BONES];"<<endl;
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert", str.str());
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add shader attributes and uniforms
shader.AddAttribute("vVertex");
shader.AddAttribute("vNormal");
shader.AddAttribute("vUV");
shader.AddAttribute("vBlendWeights");
shader.AddAttribute("viBlendIndices");
shader.AddUniform("Bones");
shader.AddUniform("MV");
shader.AddUniform("N");
shader.AddUniform("P");
shader.AddUniform("textureMap");
shader.AddUniform("useDefault");
shader.AddUniform("light_position");
示例12: OnInit
//OpenGL initialization
void OnInit() {
//load the per-fragment point light shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/PointLight.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/PointLight.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add attributes and uniforms
shader.AddAttribute("vVertex");
shader.AddAttribute("vNormal");
shader.AddUniform("MVP");
shader.AddUniform("MV");
shader.AddUniform("N");
shader.AddUniform("light_position");
shader.AddUniform("diffuse_color");
shader.UnUse();
GL_CHECK_ERRORS
//setup sphere geometry
CreateSphere(1.0f,10,10, vertices, indices);
//setup sphere vao and vbo stuff
glGenVertexArrays(1, &sphereVAOID);
glGenBuffers(1, &sphereVerticesVBO);
glGenBuffers(1, &sphereIndicesVBO);
glBindVertexArray(sphereVAOID);
glBindBuffer (GL_ARRAY_BUFFER, sphereVerticesVBO);
//pass vertices to the buffer object
glBufferData (GL_ARRAY_BUFFER, vertices.size()*sizeof(Vertex), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attribute array for position
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex),0);
GL_CHECK_ERRORS
//enable vertex attribute array for normal
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex), (const GLvoid*)(offsetof(Vertex, normal)));
GL_CHECK_ERRORS
//pass sphere indices to element array buffer
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, sphereIndicesVBO);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, indices.size()*sizeof(GLushort), &indices[0], GL_STATIC_DRAW);
//store the total number of sphere triangles
totalSphereTriangles = indices.size();
//clear the vertices and indices vectors as we will reuse them
//for cubes
vertices.clear();
indices.clear();
//setup cube geometry
CreateCube(2,vertices, indices);
//setup cube vao and vbo stuff
glGenVertexArrays(1, &cubeVAOID);
glGenBuffers(1, &cubeVerticesVBO);
glGenBuffers(1, &cubeIndicesVBO);
glBindVertexArray(cubeVAOID);
glBindBuffer (GL_ARRAY_BUFFER, cubeVerticesVBO);
//pass vertices to the buffer object
glBufferData (GL_ARRAY_BUFFER, vertices.size()*sizeof(Vertex), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attribute array for position
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex),0);
GL_CHECK_ERRORS
//enable vertex attribute array for normal
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,sizeof(Vertex), (const GLvoid*)(offsetof(Vertex, normal)));
GL_CHECK_ERRORS
//pass cube indices to element array buffer
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, cubeIndicesVBO);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, indices.size()*sizeof(GLushort), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//setup vao and vbo stuff for the light position crosshair
glm::vec3 crossHairVertices[6];
crossHairVertices[0] = glm::vec3(-0.5f,0,0);
crossHairVertices[1] = glm::vec3(0.5f,0,0);
crossHairVertices[2] = glm::vec3(0, -0.5f,0);
crossHairVertices[3] = glm::vec3(0, 0.5f,0);
crossHairVertices[4] = glm::vec3(0,0, -0.5f);
crossHairVertices[5] = glm::vec3(0,0, 0.5f);
//setup light gizmo vertex array and buffer object
glGenVertexArrays(1, &lightVAOID);
glGenBuffers(1, &lightVerticesVBO);
glBindVertexArray(lightVAOID);
glBindBuffer (GL_ARRAY_BUFFER, lightVerticesVBO);
//pass light crosshair gizmo vertices to buffer object
glBufferData (GL_ARRAY_BUFFER, sizeof(crossHairVertices), &(crossHairVertices[0].x), GL_STATIC_DRAW);
//.........这里部分代码省略.........
示例13: OnInit
//OpenGL initialization
void OnInit() {
GL_CHECK_ERRORS
//load heightmap shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add attributes and uniforms
shader.AddAttribute("vVertex");
shader.AddUniform("heightMapTexture");
shader.AddUniform("scale");
shader.AddUniform("half_scale");
shader.AddUniform("HALF_TERRAIN_SIZE");
shader.AddUniform("MVP");
//set values of constant uniforms as initialization
glUniform1i(shader("heightMapTexture"), 0);
glUniform2i(shader("HALF_TERRAIN_SIZE"), TERRAIN_WIDTH>>1, TERRAIN_DEPTH>>1);
glUniform1f(shader("scale"), scale);
glUniform1f(shader("half_scale"), half_scale);
shader.UnUse();
GL_CHECK_ERRORS
//fill indices array
GLuint* id=&indices[0];
int i=0, j=0;
//setup vertices
int count = 0;
//fill terrain vertices
for( j=0;j<TERRAIN_DEPTH;j++) {
for( i=0;i<TERRAIN_WIDTH;i++) {
vertices[count] = glm::vec3( (float(i)/(TERRAIN_WIDTH-1)),
0,
(float(j)/(TERRAIN_DEPTH-1)));
count++;
}
}
//fill terrain indices
for (i = 0; i < TERRAIN_DEPTH-1; i++) {
for (j = 0; j < TERRAIN_WIDTH-1; j++) {
int i0 = j+ i*TERRAIN_WIDTH;
int i1 = i0+1;
int i2 = i0+TERRAIN_WIDTH;
int i3 = i2+1;
*id++ = i0;
*id++ = i2;
*id++ = i1;
*id++ = i1;
*id++ = i2;
*id++ = i3;
}
}
GL_CHECK_ERRORS
//setup terrain vertex array and vertex buffer objects
glGenVertexArrays(1, &vaoID);
glGenBuffers(1, &vboVerticesID);
glGenBuffers(1, &vboIndicesID);
glBindVertexArray(vaoID);
glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
//pass terrain vertices to buffer object
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//enable vertex attribute array for position
glEnableVertexAttribArray(shader["vVertex"]);
glVertexAttribPointer(shader["vVertex"], 3, GL_FLOAT, GL_FALSE,0,0);
GL_CHECK_ERRORS
//pass the terrain indices array to element array buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//load the heightmap texture using SOIL
int texture_width = 0, texture_height = 0, channels=0;
GLubyte* pData = SOIL_load_image(filename.c_str(), &texture_width, &texture_height, &channels, SOIL_LOAD_L);
//vertically flip the heightmap image on Y axis since it is inverted
for( j = 0; j*2 < texture_height; ++j )
{
int index1 = j * texture_width ;
int index2 = (texture_height - 1 - j) * texture_width ;
for( i = texture_width ; i > 0; --i )
{
GLubyte temp = pData[index1];
pData[index1] = pData[index2];
pData[index2] = temp;
++index1;
++index2;
}
}
//.........这里部分代码省略.........
示例14: OnInit
void OnInit() {
GL_CHECK_ERRORS
//setup shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_GEOMETRY_SHADER, "shaders/shader.geom");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
shader.CreateAndLinkProgram();
shader.Use();
shader.AddAttribute("vVertex");
shader.AddUniform("heightMapTexture");
shader.AddUniform("scale");
shader.AddUniform("half_scale");
shader.AddUniform("HALF_TERRAIN_SIZE");
shader.AddUniform("MVP");
glUniform1i(shader("heightMapTexture"), 0);
glUniform2i(shader("HALF_TERRAIN_SIZE"), TERRAIN_WIDTH>>1, TERRAIN_DEPTH>>1);
glUniform1f(shader("scale"), scale);
glUniform1f(shader("half_scale"), half_scale);
shader.UnUse();
GL_CHECK_ERRORS
//setup geometry
//fill indices array
GLuint* id=&indices[0];
int i=0, j=0;
//setup vertices
int count = 0;
for( j=0;j<TERRAIN_DEPTH;j++) {
for( i=0;i<TERRAIN_WIDTH;i++) {
/*
vertices[count] = glm::vec3( ( (float(i)/(TERRAIN_WIDTH-1))*2.0f-1)*TERRAIN_HALF_WIDTH,
(pData[count]/255.0f)*scale-half_scale,
( (float(j)/(TERRAIN_DEPTH-1))*2.0-1)*TERRAIN_HALF_DEPTH);
*/
vertices[count] = glm::vec3( (float(i)/(TERRAIN_WIDTH-1)),
0,
(float(j)/(TERRAIN_DEPTH-1)));
count++;
}
}
for (i = 0; i < TERRAIN_DEPTH-1; i++) {
for (j = 0; j < TERRAIN_WIDTH-1; j++) {
int i0 = j+ i*TERRAIN_WIDTH;
int i1 = i0+1;
int i2 = i0+TERRAIN_WIDTH;
int i3 = i2+1;
*id++ = i0;
*id++ = i2;
*id++ = i1;
*id++ = i1;
*id++ = i2;
*id++ = i3;
}
}
GL_CHECK_ERRORS
//setup vao and vbo stuff
glGenVertexArrays(1, &vaoID);
glGenBuffers(1, &vboVerticesID);
glGenBuffers(1, &vboIndicesID);
glBindVertexArray(vaoID);
glBindBuffer (GL_ARRAY_BUFFER, vboVerticesID);
glBufferData (GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
glEnableVertexAttribArray(shader["vVertex"]);
glVertexAttribPointer(shader["vVertex"], 3, GL_FLOAT, GL_FALSE,0,0);
GL_CHECK_ERRORS
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices[0], GL_STATIC_DRAW);
GL_CHECK_ERRORS
//load the heightmap texture using SOIL
int texture_width = 0, texture_height = 0, format=0;
GLubyte* pData = SOIL_load_image(filename.c_str(), &texture_width, &texture_height, &format, SOIL_LOAD_L);
//setup OpenGL texture
glGenTextures(1, &heightMapTextureID);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, heightMapTextureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, texture_width, texture_height, 0, GL_RED, GL_UNSIGNED_BYTE, pData);
free(pData);
GL_CHECK_ERRORS
//.........这里部分代码省略.........
示例15: OnInit
//OpenGL initialization function
void OnInit() {
//get the mesh path for loading of textures
std::string mesh_path = mesh_filename.substr(0, mesh_filename.find_last_of("/")+1);
//load the obj model
if(!obj.Load(mesh_filename.c_str(), meshes, vertices, indices, materials)) {
cout<<"Cannot load the 3ds mesh"<<endl;
exit(EXIT_FAILURE);
}
GL_CHECK_ERRORS
//load material textures
for(size_t k=0;k<materials.size();k++) {
//if the diffuse texture name is not empty
if(materials[k]->map_Kd != "") {
//generate a new OpenGL array texture
GLuint id = 0;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
int texture_width = 0, texture_height = 0, channels=0;
const string& filename = materials[k]->map_Kd;
std::string full_filename = mesh_path;
full_filename.append(filename);
//use SOIL to load the texture
GLubyte* pData = SOIL_load_image(full_filename.c_str(), &texture_width, &texture_height, &channels, SOIL_LOAD_AUTO);
if(pData == NULL) {
cerr<<"Cannot load image: "<<full_filename.c_str()<<endl;
exit(EXIT_FAILURE);
}
//Flip the image on Y axis
int i,j;
for( j = 0; j*2 < texture_height; ++j )
{
int index1 = j * texture_width * channels;
int index2 = (texture_height - 1 - j) * texture_width * channels;
for( i = texture_width * channels; i > 0; --i )
{
GLubyte temp = pData[index1];
pData[index1] = pData[index2];
pData[index2] = temp;
++index1;
++index2;
}
}
//get the image format
GLenum format = GL_RGBA;
switch(channels) {
case 2: format = GL_RG32UI; break;
case 3: format = GL_RGB; break;
case 4: format = GL_RGBA; break;
}
//allocate texture
glTexImage2D(GL_TEXTURE_2D, 0, format, texture_width, texture_height, 0, format, GL_UNSIGNED_BYTE, pData);
//release the SOIL image data
SOIL_free_image_data(pData);
//add loaded texture ID to vector
textures.push_back(id);
}
}
GL_CHECK_ERRORS
//load flat shader
flatShader.LoadFromFile(GL_VERTEX_SHADER, "shaders/flat.vert");
flatShader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/flat.frag");
//compile and link shader
flatShader.CreateAndLinkProgram();
flatShader.Use();
//add attribute and uniform
flatShader.AddAttribute("vVertex");
flatShader.AddUniform("MVP");
flatShader.UnUse();
//load mesh rendering shader
shader.LoadFromFile(GL_VERTEX_SHADER, "shaders/shader.vert");
shader.LoadFromFile(GL_FRAGMENT_SHADER, "shaders/shader.frag");
//compile and link shader
shader.CreateAndLinkProgram();
shader.Use();
//add attribute and uniform
shader.AddAttribute("vVertex");
shader.AddAttribute("vNormal");
shader.AddAttribute("vUV");
shader.AddUniform("MV");
shader.AddUniform("N");
shader.AddUniform("P");
shader.AddUniform("textureMap");
shader.AddUniform("useDefault");
shader.AddUniform("light_position");
shader.AddUniform("diffuse_color");
//set values of constant uniforms as initialization
//.........这里部分代码省略.........