本文整理汇总了C++中VertexArray::setAttribute方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexArray::setAttribute方法的具体用法?C++ VertexArray::setAttribute怎么用?C++ VertexArray::setAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexArray
的用法示例。
在下文中一共展示了VertexArray::setAttribute方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: init
void DefaultObjects::init()
{
RenderState *state;
Geometry *axis[3];
vec3f red, green, blue;
red = vec3f(1.0f, 0.0f, 0.0f);
green = vec3f(0.0f, 1.0f, 0.0f);
blue = vec3f(0.0f, 0.0f, 1.0f);
static const f32 vertex[4 * 3] = {
-1.0f, 0.0f, -1.0f,
1.0f, 0.0f, -1.0f,
0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f
};
static const i32 index[4 * 3] = {
0, 1, 2,
1, 2, 3,
0, 1, 3,
2, 0, 3
};
failureShaderProgram = 0;
failureTexture = 0;
failureCubeMap = 0;
failureVertexArray = 0;
printf(" Setting up failure shader program\n");
failureShaderProgram = SceneGraph::createShaderProgram("FailureShaderProgram", "Default", 0);
if (!failureShaderProgram)
REPORT_ERROR("Couldn't load default shader program");
printf(" Setting up failure texture\n");
failureTexture = SceneGraph::createTexture("FailureTexture", "textures/notex.png", true, TEXTURE_FILTER_TRILINEAR, TEXTURE_WRAP_REPEAT);
if (!failureTexture)
REPORT_ERROR("Couldn't load default texture");
printf(" Setting up failure cube map\n");
failureCubeMap = SceneGraph::createCubeMap("FailureCubeMap", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png", "textures/notex.png");
if (!failureCubeMap)
REPORT_ERROR("Couldn't load default cube map");
printf(" Setting up failure vertex array\n");
failureVertexArray = SceneGraph::createVertexArray("FailureVertexArray", (void *) vertex, 4 * 3, 4, TRIANGLES, USAGE_STATIC);
printf(" Attribute\n");
failureVertexArray->setAttribute("Vertex", 0, 3, ATTRIB_FLOAT32, false);
printf(" Index array\n");
failureVertexArray->setIndexArray((void *) index, 4, 12);
printf(" Setting up bulb mesh\n");
bulbMesh = SceneGraph::createGeometry("LightBulb", "scenes/light.obj", false);
bulbShader = SceneGraph::createShaderProgram("LightShader", "Light", 0);
bulbMesh->setShaderProgram(bulbShader, false);
printf(" Setting up camera mesh\n");
camMesh = SceneGraph::createGeometry("CameraModel", "scenes/camera.obj", false);
camShader = SceneGraph::createShaderProgram("CameraShader", "Camera", 0);
camMesh->setShaderProgram(camShader, false);
printf(" Setting up arrow mesh\n");
arrowMesh = SceneGraph::createGeometry("ArrowModel", "scenes/arrow.obj", false);
arrowShader = SceneGraph::createShaderProgram("ArrowShader", "Axis", 0);
arrowMesh->setShaderProgram(arrowShader, false);
state = arrowShader->getRenderState();
axis[0] = (Geometry *) arrowMesh->duplicate("AxisX", false);
axis[1] = (Geometry *) arrowMesh->duplicate("AxisY", false);
axis[2] = (Geometry *) arrowMesh->duplicate("AxisZ", false);
axis[0]->scale(2.0f, 2.0f, 2.0f);
axis[1]->scale(2.0f, 2.0f, 2.0f);
axis[2]->scale(2.0f, 2.0f, 2.0f);
axis[0]->setRotate(-fPI * 0.5f, 0.0f, 0.0f, 1.0f);
axis[2]->setRotate(fPI * 0.5f, 1.0f, 0.0f, 0.0f);
axis[0]->setVector("col", red.vec, 3, UNIFORM_FLOAT32);
axis[1]->setVector("col", green.vec, 3, UNIFORM_FLOAT32);
axis[2]->setVector("col", blue.vec, 3, UNIFORM_FLOAT32);
axisGroup = SceneGraph::createGroup("AxisGroup");
axisGroup->attachChild(axis[0]);
axisGroup->attachChild(axis[1]);
axisGroup->attachChild(axis[2]);
printf(" Setting up grid\n");
/* Grid */
{
u32 i, o;
VertexArray *gridva;
f32 gridv[2 * 21 * 2 * 2];
vec3f color;
color = vec3f(0.4f, 0.7f, 0.8f);
for (i = 0; i < 21; i++) {
gridv[i * 4] = ((f32) i) - 10.0f;
//.........这里部分代码省略.........
示例2: run
void run(SDL_Window* window){
const glm::vec2 square[4]={
glm::vec2( 1.0, 1.0),
glm::vec2( 1.0, -1.0),
glm::vec2(-1.0, 1.0),
glm::vec2(-1.0, -1.0)
};
VertexArray vao;
ArrayBuffer buf(BufferUsage::StaticDraw, 4, square);
vao.setAttribute(0, buf).bind();
ShaderProgram program, invertProgram;
VertexShader vs, invertVs;
FragmentShader fs, invertFs;
Texture tex, tex_normal, rtt;
FrameBuffer fbo(512, 512);
try{
vs.load(loadFile("shaders/test_normalmapping.vert"));
fs.load(loadFile("shaders/test_normalmapping.frag"));
program.attach(vs).attach(fs).link().bindAttrib(0, "in_Position").use();
invertVs.load(loadFile("shaders/test_framebuffer.vert"));
invertFs.load(loadFile("shaders/test_framebuffer.frag"));
invertProgram.attach(invertVs).attach(invertFs).link().bindAttrib(0, "in_Position").use();
tex.quickFileLoad("data/floor2c.bmp");
tex_normal.quickFileLoad("data/floor2c_nm.bmp");
rtt.emptyData(512, 512);
fbo.attachColor(0, rtt);
fbo.checkStatus();
}catch(string error){
cout << error << "\n" << endl;
}catch(char const* error){
cout << error << "\n" << endl;
}
for(int i=0; i<60; i++){
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glm::vec3 lightpos(0.0, 1.0 - i/30.0, 0.3);
program.use()
.uni("tex", tex)
.uni("tex_normal", tex_normal)
.uni("light", lightpos);
fbo.bind();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
invertProgram.use()
.uni("rtt", rtt);
FrameBuffer::bindScreen();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
SDL_GL_SwapWindow(window);
SDL_Delay(60);
}
}